gdb v। Lldb आदेश के लिए विहित संदर्भ http://lldb.llvm.org/lldb-gdb.html
आप expr आदेश जो एक अभिव्यक्ति का मूल्यांकन करता है का उपयोग करना चाहते है। यह lldb आदेशों में से एक है जो तर्कों के अतिरिक्त "कच्चा इनपुट" लेता है, इसलिए आपको अक्सर यह संकेत देने के लिए "-" की आवश्यकता होती है कि तर्क (expr) समाप्त होता है और कमांड शुरू होता है। जैसे
(lldb) expr -- [self setAlpha:1]
वहाँ एक शॉर्टकट, "पी" है, जो करता है - आप के लिए (लेकिन किसी भी तर्क की अनुमति नहीं है), उदा
(lldb) p [self setAlpha:1]
समारोह (रों) आप कॉल कर रहे अपने कार्यक्रम का हिस्सा नहीं हैं, तो आप अक्सर ऐसा lldb जानता है कि कैसे उन्हें फोन करने के लिए स्पष्ट रूप से उनकी वापसी प्रकार की घोषणा करने की आवश्यकता होगी। जैसे
(lldb) p printf("hi\n")
error: 'printf' has unknown return type; cast the call to its declared return type
error: 1 errors parsing expression
(lldb) p (int)printf("hi\n")
(int) $0 = 3
hi
(lldb)
फ़्लोटिंग पॉइंट तर्क समस्या, बीटीडब्ल्यू के आसपास काम करने का एक साफ तरीका है। आप एक "अभिव्यक्ति उपसर्ग" फ़ाइल बनाते हैं जो आपके वर्ग विधियों के प्रोटोटाइप के साथ lldb में दर्ज प्रत्येक अभिव्यक्ति में जोड़ा जाता है। उदाहरण के लिए, मेरे पास एक क्लास माई क्लास है जो एनएसओब्जेक्ट से प्राप्त होता है, इसमें रुचि के दो तरीके होते हैं, "setArg:" और "getArg" जो सेट करते हैं और एक फ्लोट ivar प्राप्त करते हैं। यह एक मूर्खतापूर्ण छोटा उदाहरण है, लेकिन यह दिखाता है कि इसका उपयोग कैसे करें।
@interface NSObject
@end
@interface MyClass : NSObject
- init;
- setArg: (float)arg;
- (float) getArg;
@end
extern "C" {
int strcmp (const char *, const char *);
int printf(const char * __restrict, ...);
void puts (const char *);
}
मेरी ~/.lldbinit
फ़ाइल में मैं
settings set target.expr-prefix /Users/jason/lldb-prefix.h
जोड़ सकते हैं और अब मैं
(lldb) p [var getArg]
(float) $0 = 0.5
(lldb) p [var setArg:0.7]
(id) $1 = 0x0000000100104740
(lldb) p [var getArg]
(float) $2 = 0.7
कर सकते हैं आप देखेंगे मैं के एक जोड़े शामिल: यहाँ एक उपसर्ग फ़ाइल मैं lldb के लिए लिखा था है यहां मानक सी लाइब्रेरी फ़ंक्शन भी हैं। ऐसा करने के बाद, मुझे इन प्रकार के रिटर्न प्रकारों को और अधिक करने की आवश्यकता नहीं है, उदा।
(lldb) p printf("HI\n")
<no result>
HI
(lldb) p strcmp ("HI", "THERE")
(int) $3 = -12
(। कि "< कोई परिणाम >" बात पहले से ही lldb TOT स्रोतों के लिए प्रतिबद्ध किया गया है के लिए एक ठीक)
एक उदाहरण है [lldb-for-gdb-users.txt] में (http://opensource.apple.com/source/lldb/lldb-69/docs/lldb-for-gdb-users।txt) सी के लिए: 'expr (int) printf (" ... ")'। हो सकता है कि आपको 'expr (type)' के साथ अपना विधि आमंत्रण उपसर्ग करना चाहिए? – osgx