Xcode में, GDB आपको डिबगिंग करते समय स्थानीय चर बदलने की अनुमति देता है (देखें XCode में डीबगिंग करते समय NSString मान कैसे बदलें? )। क्या एलएलडीबी एक समान कार्यक्षमता प्रदान करता है? यदि हां, तो हम इसका उपयोग कैसे कर सकते हैं?
Xcode में, GDB आपको डिबगिंग करते समय स्थानीय चर बदलने की अनुमति देता है (देखें XCode में डीबगिंग करते समय NSString मान कैसे बदलें? )। क्या एलएलडीबी एक समान कार्यक्षमता प्रदान करता है? यदि हां, तो हम इसका उपयोग कैसे कर सकते हैं?
जवाबों:
expr myString = @"Foo"
(lldb)
मौजूदा प्रोग्राम के संदर्भ में C / ObjC / C ++ एक्सप्रेशन का मूल्यांकन करने में मदद करें , वर्तमान में दायरे में चर का उपयोग कर। यह कमांड 'रॉ' इनपुट लेता है (सामान को कोट करने की आवश्यकता नहीं है)।सिंटेक्स: अभिव्यक्ति -
कमांड विकल्प उपयोग: अभिव्यक्ति [-f] [-जी] [-ड] [-यू] - अभिव्यक्ति [-ओ] [-d] [-यू] - अभिव्यक्ति
-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
expr char c [] = "foo"; ग [0]महत्वपूर्ण नोट: क्योंकि यह कमांड 'कच्चा' इनपुट लेता है, यदि आप कमांड विकल्पों के अंत और कच्चे इनपुट की शुरुआत के बीच किसी भी कमांड विकल्प का उपयोग करते हैं, जिसका आपको उपयोग करना चाहिए।
'एक्सप्र' 'अभिव्यक्ति' का संक्षिप्त नाम है
'expr myLabel.text = @"hello!"
लेकिन मुझे एक error: property 'text' not found on object of type 'UILabel *'
... कोई विचार?
expr (void)[label setText:@"Foo"]
करना चाहिए। डॉट-सिंटैक्स आमतौर पर डिबगर में काम नहीं करेगा। lldb संभवतः इसकी व्याख्या करता है जैसा कि आप एक c-स्ट्रक्चर के सदस्य तक पहुंचना चाहते थे, लेकिन मुझे यकीन नहीं है कि यह कारण है कि यह काम नहीं करेगा। डॉट-सिंटैक्स po
या तो काम नहीं करता है । इसके बजाय po label.text
आपको उपयोग करना होगाpo [label text]
@property
।
p
शॉर्टकट के रूप में भी उपयोग कर सकते हैं expr
। उदाहरण:(lldb) p url = @"http://google.com"
e
शॉर्टकट के रूप में भी उपयोग कर सकते हैं expr
। BTW, p
प्रिंट के लिए एक उपनाम है जो expr --
(बस कच्चे इनपुट, कोई झंडे नहीं) के लिए एक उपनाम है expr -o -- [object]
या po
आम तौर पर यद्यपि आप वस्तुओं के लिए अधिक उपयोगी आउटपुट देते हैं।
निम्नलिखित सामान मेरे लिए काम करता है। मैं Xcode 8 का उपयोग कर रहा हूं।
यदि आप कुछ चर सेट करना चाहते हैं (उदाहरण के लिए "तानाशाही") शून्य करने के लिए और फिर कोड प्रवाह का परीक्षण करें, तो आप निम्नलिखित प्रयास कर सकते हैं।
यह कंसोल में कुछ इस तरह दिखेगा।
(lldb) expression dict = nil
(NSDictionary *) $5 = nil