এক্সকোড ডিবাগার: ভেরিয়েবলের মান দেখুন


107

কোনও ইউআইটিএবল ভিউ কনট্রোলারের মধ্যে আমার কোড:

delegate.myData = [myData objectAtIndex:indexPath.row];

আমি মান কীভাবে তা দেখতে পাব delegate.myDataবা indexPath.rowডিবাগার মধ্যে? delegate.myDataএকটি অ্যারে এবং indexPath.rowএকটি হওয়া উচিত int। আমি কেবলমাত্র বস্তুর মেমরি ঠিকানাগুলি দেখতে পারি delegateএবং indexPathকোথায় myDataএবং কোথায় row?

বিকল্প পাঠ

উত্তর:


142

এক্সকোড ডিবাগারে এনএসডেটরিও ভেরিয়েবলের সামগ্রীগুলি কীভাবে দেখুন তা পরীক্ষা করে দেখুন?

আমিও ব্যবহার করি

po variableName
print variableName

কনসোল এ।

আপনার ক্ষেত্রে এটি কার্যকর করা সম্ভব

print [myData objectAtIndex:indexPath.row]  

অথবা

po [myData objectAtIndex:indexPath.row]

ধন্যবাদ! আমি অনেক চেষ্টা করি: "মুদ্রণ [আমার ডেটা অবজেক্টএটিআইডেক্স: সূচকপথ.রো]", "পো [আমার ডেটা অবজেক্টটিআইটিএনডেক্স: ইনডেক্সপথ.রো]", "প্রিন্ট ইনডেক্সপথ.রো", "পো ইনডেক্সপথ.রো", ... তবে প্রতিবার আমি "সারি নামের কোনও সদস্য নেই" বার্তাটি পেয়েছেন। এটি কাজ করে: "মুদ্রণ সূচকপথ" এবং "পো ইন্ডেক্সপথ"। সুতরাং আমি "[]" এর পরিবর্তে "" ব্যবহার করার চেষ্টা করেছি। "po [indexPath getRow]" -> "লক্ষ্য এই বার্তা নির্বাচককে সাড়া দেয় না" " :-(
মান্নি

4
মুদ্রণ (int- এ) [indexPath সারি] চেষ্টা
আন্দ্রেই

PO [myData objectAtIndex: (int- এ) [indexPath সারি]]
আন্দ্রেই

@ ভানডুট্রান আমি খুব নিশ্চিত যে po objদ্রুতগতির সমতুল্য po print(obj)
ক্রিস

এটি গণিত বৈশিষ্ট্যগুলির মানগুলিও সন্ধানের জন্য উপযুক্ত। ধন্যবাদ!
পলা হ্যাস্তেনটিফেল

25

আমি অন্যান্য পোস্টারগুলির সাথে একমত যে উন্নয়নশীল পরিবেশ হিসাবে এক্সকোডে ভেরিয়েবলগুলি ডিবাগ করার সহজ উপায় অন্তর্ভুক্ত করা উচিত। ভাল, ভাল খবর, একটি আছে!

এক্সকোডে ভেরিয়েবলগুলি কীভাবে ডিবাগ করা যায় তার একটি সহজ উত্তর / টিউটোরিয়াল অনুসন্ধান করার পরেও আমি নিজেই এক্সকোডের সাথে অন্বেষণ করতে গিয়েছিলাম এবং এটি (কমপক্ষে আমার জন্য) খুব দরকারী আবিষ্কার খুঁজে পেয়েছি।

এক্সকোড 4.6.3 এ কীভাবে আপনার ভেরিয়েবলগুলি সহজেই ডিবাগ করা যায়

এক্সকোডের মূল স্ক্রিনে স্ক্রিনশটটিতে প্রদর্শিত উপরের-ডান কোণার বোতামটি ক্লিক করে নীচের ডিবাগ অঞ্চলটি দেখতে নিশ্চিত করুন make

ডিবাগ এরিয়া বোতাম

এক্সকোডে ডিবাগ অঞ্চল ৪.6.৩

এখন একটি ব্রেকপয়েন্ট নির্ধারণ করুন - আপনার কোডের লাইনটি যেখানে আপনি আপনার কোড এরিয়ার সীমানা ক্লিক করে আপনার প্রোগ্রামটি বিরতি দিতে চান।

ব্রেকপয়েন্ট

এখন ডিবাগ এরিয়াতে এই বোতামগুলি সন্ধান করুন এবং মাঝখানে একটিতে ক্লিক করুন। আপনি লক্ষ্য করবেন আপনার অঞ্চলটি এখন দুটি ভাগে বিভক্ত।

বিভক্ত ডিবাগ অঞ্চল

এই মত চেহারা উচিত

এখন আপনার অ্যাপ্লিকেশন চালান।

আপনার প্রোগ্রামটি কার্যকর করার সময় প্রথম ব্রেকপয়েন্টে পৌঁছে গেলে আপনি বাম পাশে দেখতে পাবেন যে আপনার ব্রেকিয়েট পয়েন্টে আপনার সমস্ত ভেরিয়েবল উপলব্ধ।

অনুসন্ধান ক্ষেত্র

আপনি আরও বিশদ বিশদের জন্য চলকটিতে বাম তীরগুলি প্রসারিত করতে পারেন। এমনকি আপনি যে ভেরিয়েবলটি চান তা আলাদা করতে অনুসন্ধান ক্ষেত্রটি ব্যবহার করুন এবং ব্রেকপয়েন্টের সুযোগটি "পদক্ষেপ" নেওয়ার সাথে সাথে এটি বাস্তব সময়ে পরিবর্তিত হতে দেখবেন।

পদার্পণ করা

আপনার ডিবাগ এরিয়ার ডান দিকে আপনি পছন্দসই ভেরিয়েবলের উপর মাউসের ডান-বোতামটি ক্লিক করতে চান হিসাবে ভেরিয়েবলগুলি মুদ্রণ করতে পাঠাতে পারেন।

প্রাসঙ্গিক মেনু

আপনি দেখতে পাচ্ছেন যে প্রাসঙ্গিক মেনুতে খুব আকর্ষণীয় ডিবাগিং বিকল্প রয়েছে। যেমন ওয়াচ যা ইতিমধ্যে টাইপড কমান্ড বা এমনকি সম্পাদনা মানের সাথে পরামর্শ দেওয়া হয়েছে ... যা আপনার ভেরিয়েবলের রানটাইম মান পরিবর্তন করে!


21

এছাড়াও আপনি করতে পারেন:

  1. সম্পাদন স্থগিত করার জন্য একটি ব্রেকপয়েন্ট সেট করুন।
  2. অবজেক্টটি অবশ্যই কার্যকর করার সুযোগের ভিতরে থাকা উচিত
  3. বস্তু বা ভেরিয়েবলের উপরে মাউস পয়েন্টার সরান
  4. একটি হলুদ টুলটিপ উপস্থিত হবে
  5. টুলটিপের উপর দিয়ে মাউসটি সরান
  6. উপরে এবং নীচে ইশারা করে দুটি ছোট তীরের উপরে ক্লিক করুন
  7. একটি প্রসঙ্গ মেনু পপ আপ হবে
  8. "মুদ্রণের বিবরণ" নির্বাচন করুন, এটি একটি [অবজেক্টের বিবরণ] কার্যকর করবে
  9. কনসোলের আউটপুটে বর্ণনাটি উপস্থিত হবে

IMHO একটি সামান্য লুকানো এবং জটিল ...


আমার এক্সকোডে "মুদ্রণ বিবরণ" কাজ করছে না, তাই আমি কীভাবে এটি সক্ষম করব?
কির্তিকুমার এ।

@ কির্তিভাইয়ায় অ্যাপ্লিকেশনটি অবশ্যই বিরতিতে হবে এবং আপনার পরিবর্তনশীল মুদ্রণের জন্য বর্তমান স্কোপের অভ্যন্তরে থাকা দরকার। এছাড়াও আপনি সরাসরি "স্ব। পরিবর্তনশীল" মুদ্রণ করতে পারবেন না, তবে আপনি _ <ভেরিয়েবলের নাম>> মুদ্রণের জন্য অ্যান্ড্রি সমাধান ব্যবহার করতে পারেন। উদাহরণস্বরূপ: সেল্ফ.বিটিএন হেলোর জন্য কনসোলে লিখুন "পো _ বিটিএনহেলো" (এটি কেবলমাত্র যদি আপনি
গেটের

@ লাইটম্যান হ্যাঁ, এটি যেমনটি আপনি বলেছেন ঠিক তেমনি এটি এখনও কার্যকর নয়
কির্তিকুমার এ।

10

আপনার বিভ্রান্তি হ'ল ঘোষিত সম্পত্তিগুলি (অগত্যা হিসাবে একই নামকরণ করা হয় না) (উদাহরণস্বরূপ) ভেরিয়েবল হয়।

এক্সপ্রেশন

indexPath.row

সমতুল্য

[indexPath row]

এবং অ্যাসাইনমেন্ট

delegate.myData = [myData objectAtIndex:indexPath.row];

সমতুল্য

[delegate setMyData:[myData objectAtIndex:[indexPath row]]];

সংশ্লেষিত বৈশিষ্ট্যের জন্য মানক নামকরণ অনুমান করা।

তদুপরি, delegateসম্ভবত ধরণের হিসাবে ঘোষিত হয়েছে id<SomeProtocol>, অর্থাত, সংকলক delegateসেই মুহূর্তে প্রকৃত ধরণের তথ্য সরবরাহ করতে সক্ষম হয় নি , এবং ডিবাগার সংকলন-সময় প্রদত্ত তথ্যের উপর নির্ভর করে। যেহেতু idএকটি জেনেরিক প্রকার, তাই উদাহরণটি ভেরিয়েবল সম্পর্কে কোনও সংকলন-সময় তথ্য নেই delegate

সেই কারণে আপনি দেখতে না myDataবা rowভেরিয়েবল হিসেবে।

আপনি যদি প্রেরণের ফলাফলটি পরীক্ষা করতে চান -rowবা -myData, আপনি আদেশগুলি pবা ব্যবহার করতে পারেন po:

p (NSInteger)[indexPath row]
po [delegate myData]

বা এক্সপ্রেশন উইন্ডোটি ব্যবহার করুন (উদাহরণস্বরূপ, যদি আপনি জানেন যে আপনার delegateপ্রকৃত ধরণের হয় MyClass *, আপনি একটি এক্সপ্রেশন যুক্ত করতে পারেন (MyClass *)delegate, বা ডান-ক্লিক করতে পারেন delegate, বেছে নিতে পারেন View Value as…এবং প্রকৃত ধরণের টাইপ করুন delegate(যেমন MyClass *)।

বলা হচ্ছে, আমি সম্মত হই যে ডিবাগারটি আরও সহায়ক হতে পারে:

  • সংকলন-সময় তথ্যের পরিবর্তে ডিবাগার উইন্ডোকে রান-টাইম ধরণের তথ্য ব্যবহার করতে বলার বিকল্প থাকতে পারে। এটি ডিবাগারটি ধীর করবে, মঞ্জুর করা হবে, তবে দরকারী তথ্য সরবরাহ করবে;

  • ঘোষিত বৈশিষ্ট্যগুলি বৈশিষ্ট্য নামে পরিচিত একটি গোষ্ঠীতে প্রদর্শিত হতে পারে এবং সরাসরি ডিবাগার উইন্ডোতে (alচ্ছিক) পরিদর্শন করার অনুমতি দেয়। এটি ডিবাগারকে ধীর করবে কারণ তথ্য পাওয়ার জন্য কোনও পদ্ধতি পাঠানো / চালানো দরকার, তবে দরকারী তথ্যও সরবরাহ করবে।


তোমার ব্যাখার জন্য ধন্যবাদ! এটি আমাকে অনেক সাহায্য করেছে! :-)
মানি

7

রান-টাইমে আপনি কনসোল উইন্ডোতে মানগুলি মুদ্রণ করতে পারেন। নীচে পদক্ষেপ রয়েছে:

  1. একটি ব্রেক-পয়েন্ট রাখুন যার জন্য আপনি মান পেতে চান
  2. এখন ধাপে ধাপে ডিবাগ সম্পাদন করুন।
  3. ভেরিয়েবল / ডেলিগেটের উপরে একটি কার্সার রাখুন যার মূল্য রান-টাইমে পরীক্ষা করা উচিত।
  4. এখন এটি ভেরিয়েবল / ডেলিগেটের বিবরণ প্রদর্শন করবে
  5. "আমি" ক্লিক করলে বিশদ বিবরণ দেখাবে
  6. এটি কনসোল উইন্ডোতেও বিশদ মুদ্রণ করবে।

কনসোল উইন্ডোতে বিশদ মুদ্রণের জন্য স্ক্রিনশট


1
এই কাজটি কি সুইফটে চলেছে, আমি বস্তুটির মানগুলি সুইট করতে পারছি না যেমন আমরা বস্তু সি তে দেখতে ব্যবহার করি।
umairhhhs

1
@ umairhhhs এই পোস্টটি কেবলমাত্র উদ্দেশ্য-সি এর জন্য।
জয়প্রকাশ দুবে

1
আমি ভাবছি কেন এটি সুইফ্ট এডিটরটিতে নেই কারণ এটি ছিল খুব সাহায্যকারী এবং সময় সাশ্রয়ী বৈশিষ্ট্য।
umairhhhs

1

এটি কিছুটা জটিল হয়ে যায়। এই অবজেক্টগুলি কাস্টম ক্লাস বা স্ট্রাক্ট এবং এগুলির ভিতরে থাকা অন্য বিকাশের পরিবেশের মতো এক্সকোডের মতো সহজ নয়।

আমি যদি আপনি হয়ে থাকি তবে আমি কিছু বর্ণনার সাথে আপনি যে মানগুলি দেখতে চান তা এনএসলগ করতাম।

অর্থাৎ,

NSLog(@"Description of object & time: %i", indexPath.row);

11
হ্যাঁ, এনএসলগ একটি সম্ভাবনা তবে ডিবাগিংয়ের জন্য আরামদায়ক বিকল্প নয়। আমি খুব অবাক হই যে পছন্দসই মানগুলি প্রদর্শনের কোনও উপায় নেই। এটি একটি বিকাশের পরিবেশের প্রাথমিক কার্যকারিতার জন্য।
মানি

2
এক্সকোড সম্পর্কে সর্বাধিক বিপর্যয়কর বিষয়। বেচারা।
ryan0

1

রান-> শো-> এক্সপ্রেশন চেষ্টা করুন

অ্যারের নামে বা আপনি যা খুশি তা সন্নিবেশ করান।


ধন্যবাদ! আমি এক্সপ্রেশন-উইন্ডোতে "ইনডেক্সপথ.রো" এবং "ডেলিগেট.মিডাটা" প্রবেশ করেছি তবে প্রতিবার "সংক্ষিপ্তসার" কলামে "সুযোগের বাইরে" উপস্থিত হয় :-(
মান্নি

এনপি, এটি না পাওয়া পর্যন্ত আমার একই সমস্যা ছিল;)
টিবিনে

1
আপনার অ্যারে বা যা কিছু সেট করার ঠিক পরে ব্রেকআপপয়েন্ট সেট করুন এবং এক্সপ্রেশনগুলিতে আপনার মানটি পাওয়া উচিত। শুভকামনা
19:10
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.