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


173

এক্সকোডে, জিডিবি আপনাকে ডিবাগ করার সময় স্থানীয় ভেরিয়েবলগুলি পরিবর্তন করতে দেয় (এক্সকোডে ডিবাগ করার সময় এনএসএসটিং মান কীভাবে পরিবর্তন করবেন তা দেখুন ? ) এলএলডিবি কি একই ধরনের কার্যকারিতা সরবরাহ করে? যদি তা হয় তবে আমরা কীভাবে এটি ব্যবহার করতে পারি?


আইওএসে অ্যাডভান্সড ডিবাগিংটি নিশ্চিত করে দেখুন । এটি দুর্দান্ত
হানি

আমি একটি অবজেক্ট প্রোপার্টি সেট করার চেষ্টা করছি, যা স্ট্রিংয়ের দৈর্ঘ্য 0-15 অক্ষরের মধ্যে থাকলে কাজ করে। 16 বা ততোধিক অক্ষরের একটি স্ট্রিং সেট করা গ্রহণ করা হয় তবে আমি যখন এটি আবার মুদ্রণ করি তখন এটি আমাকে একটি আজেবাজে স্ট্রিং দেখায়: po myObj.someString = "1234567890123456", যা কাজ করে তবে আমি মুদ্রিত হয়ে গেলে (স্ট্রিং? 68 R68 = " \ 0 \ 0 \ 0 \ 0 @ \ a \ u {1} \ c {5} \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ "
নিক রাইট

উত্তর:


267
expr myString = @"Foo"

(lldb)
বর্তমান প্রোগ্রামের প্রেক্ষাপটে বর্তমানে স্কোপে থাকা ভেরিয়েবলগুলি ব্যবহার করে একটি সি / ওবিজেসি / সি ++ এক্সপ্রেশন মূল্যায়ন করতে সহায়তা করে। এই কমান্ডটি 'কাঁচা' ইনপুট নেয় (স্টাফের উদ্ধৃতি দেওয়ার প্রয়োজন নেই)।

সিনট্যাক্স: প্রকাশ -

কমান্ড বিকল্পের ব্যবহার: প্রকাশ [-f] [-G] [-d] [-u] - অভিব্যক্তি [-o] [-d] [-u] - প্রকাশ

   -G <gdb-format>  ( --gdb-format <gdb-format> )
        Specify a format using a GDB format specifier string.

   -d <boolean>  ( --dynamic-value <boolean> )
        Upcast the value resulting from the expression to its dynamic type
        if available.

   -f <format>  ( --format <format> )
        Specify a format to be used for display.

   -o  ( --object-description )
        Print the object description of the value resulting from the
        expression.

   -u <boolean>  ( --unwind-on-error <boolean> )
        Clean up program state if the expression causes a crash, breakpoint
        hit or signal.

উদাহরণ:

expr my_struct-> a = my_array [3]
expr -f bin - (সূচক * 8) + 5
এক্সপ্রেস চর সি [] = "foo"; গ [0]

গুরুত্বপূর্ণ দ্রষ্টব্য: কারণ এই কমান্ডটি 'কাঁচা' ইনপুট নেয়, যদি আপনি কোনও কমান্ড বিকল্প ব্যবহার করেন তবে আপনাকে অবশ্যই কমান্ড অপশনগুলির শেষ এবং কাঁচা ইনপুট শুরুর মধ্যে অবশ্যই '-' ব্যবহার করতে হবে।

'এক্সপ্রেস' 'এক্সপ্রেশন' এর একটি সংক্ষেপণ


1
সত্যিই, ধন্যবাদ! আরও একটি সামান্য প্রশ্ন: আমি ইউআইএলবেলের পাঠ্য পরিবর্তন করার চেষ্টা করার জন্য এটি করছি: 'expr myLabel.text = @"hello!"তবে আমি একটি error: property 'text' not found on object of type 'UILabel *'... কোনও চিন্তা পেয়েছি ?
এরিক

10
expr (void)[label setText:@"Foo"]এটা করা উচিত। ডট-সিনট্যাক্স সাধারণত ডিবাগারে কাজ করবে না। আপনি যেমন সি-স্ট্রাক্টের সদস্য অ্যাক্সেস করতে চেয়েছিলেন সম্ভবত এলডিবি এটির ব্যাখ্যা করেছেন তবে আমি নিশ্চিত নই যে এটি কারণ নয় যা এটি কাজ করবে না। ডট-সিনট্যাক্স কোনওটির জন্যই কাজ করে না po। পরিবর্তে po label.textআপনার ব্যবহার করতে হবেpo [label text]
ম্যাথিয়া বাউচ

4
প্রকৃতপক্ষে, ldb জিডিবির চেয়ে ডট সিনট্যাক্স পরিচালনা করে। gdb কেবল ধরে নিয়েছে আপনি এটি সি-স্ট্রাক্টের মতো আচরণ করছেন যা ব্যর্থ হয়। lldb বৈশিষ্ট্যগুলিতে সঠিকভাবে অ্যাক্সেস করবে, তবে কেবলমাত্র যদি সেগুলি প্রকৃতপক্ষে ঘোষণা করা হয় @property
বিজে হোমার

28
আপনি এর pশর্টকাট হিসাবেও ব্যবহার করতে পারেন expr। উদাহরণ:(lldb) p url = @"http://google.com"
ফিনরল

11
আপনি এর eশর্টকাট হিসাবেও ব্যবহার করতে পারেন expr। বিটিডাব্লু, pমুদ্রণের জন্য একটি নাম যা expr --কেবলমাত্র কোনও কাঁচা ইনপুট সন্ধান করতে পারে না, কোনও পতাকা নেই) expr -o -- [object]বা poসাধারণত আপনাকে বস্তুর জন্য আরও কার্যকর আউটপুট দেয়।
জেসন

21

নিম্নলিখিত জিনিসগুলি আমার জন্য কাজ করে। আমি এক্সকোড 8 ব্যবহার করছি।

আপনি যদি কিছু পরিবর্তনশীল সেট করতে চান (উদাহরণস্বরূপ একটি "ডিক") নীল করতে এবং তারপরে কোড প্রবাহটি পরীক্ষা করতে চান, আপনি নিম্নলিখিতগুলি চেষ্টা করতে পারেন।

  1. পছন্দসই মানটি শুরু করার পরে ব্রেকপয়েন্টটি সঠিকভাবে রাখুন।
  2. তারপরে এটি পরিবর্তন করার জন্য lldb কমান্ড লাইনে "এক্সপ্রেশন ডিক্ট = নিল" চালিত করুন। (উদাহরণস্বরূপ "শূন্য")
  3. ব্রেক পয়েন্ট উপর পদক্ষেপ।
  4. পরের লাইনে পরিবর্তনশীল "ডিক" পরীক্ষা করুন Check এটা শূন্য হবে।

এটি কনসোলের মতো দেখতে লাগবে।

(lldb) expression dict = nil
(NSDictionary *) $5 = nil

3

আপনি যদি Xcode 10 বা 11 ব্যবহার করছেন তবে প্রয়োজনীয় ভেরিয়েবলটি আরম্ভ করার পরে ব্রেকপয়েন্টটি সঠিকভাবে রাখলে আপনি po myString = "Hello World"সহজেই আপনার পরিবর্তনশীলটি পরিবর্তন করতে পারেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.