2016-03-19 6 views
6

मैं lldb के साथ एक चर के पते को मुद्रित करने का प्रयास कर रहा हूं। हालांकि, print &(myVar) पर कॉल करने से इसके पते के बजाय चर की सामग्री प्रिंट होती है।lldb: एक चर के पते को प्रिंट करना

(lldb) print &(myVar) 
(const string *) $18 = "hello" 

expression &(myVar) के लिए समान। हालांकि पते हर बार मैं आह्वान expression -L outputted परिवर्तन

(lldb) expression -L -- &(myVar) 
0x00000000021aea80: (const string *) $20 = "hello" 

(lldb) expression -L -- myVar 
0x0000000002a15430: (std::string) $23 = "hello" 

:

(lldb) expression &(myVar) 
(const string *) $19 = "hello" 

मैं भी कोशिश की expression के -L विकल्प। इसलिए मुझे लगता है कि यह स्मृति में चर के पते के अनुरूप नहीं है।

मैं चर में चर का पता कैसे प्राप्त करूं?

(मैं 3.4 lldb का उपयोग करें)

उत्तर

8

हाँ, एल स्थान चर कि lldb अभिव्यक्ति परिणाम प्रतिनिधित्व करने के लिए बनाता है के बारे में आपको बता रहा है, ताकि नहीं है तुम क्या चाहते। भले ही सामान्य कमांड उर्फ ​​print ऐसा लगता है कि यह इस आदेश की तरह ही मूल्यों को प्रिंट करता है, यह उससे कहीं अधिक है: उदा। चल रहे कार्यक्रम में नई संस्थाएं बनाना। तो अभिव्यक्ति परिणाम का स्थान आपके द्वारा मूल्यांकन की गई अभिव्यक्ति से तुच्छ रूप से संबंधित नहीं है।

वैसे भी, इस पर पहुंचने के दो आसान तरीके हैं।

(lldb) expr --raw -- &my_string 
(string *) $14 = 0x00007fff5fbff618 

एक और तरीका है एक ही डेटा पर प्राप्त करने के लिए "फ्रेम चर" आदेश का उपयोग करने के लिए है: पहली स्ट्रिंग सारांश बंद करने के लिए है, तो आप पता मुद्रण के वास्तविक परिणाम देख सकते हैं है। यह आदेश आपको पूर्ण अभिव्यक्ति पार्सर के ऊपरी हिस्से के बिना स्थानीय चर तक पहुंच प्रदान करता है।

(lldb) frame var -L my_string 
0x00007fff5fbff618: (std::__1::string) my_string = "Some string here" 
+0

विस्तृत जवाब के लिए धन्यवाद: frame variable प्रिंट के बाद से चर सीधे रूप में डिबग जानकारी द्वारा रिपोर्ट, उस मामले में एल विकल्प वास्तव में वेरिएबल का स्थान है! –

संबंधित मुद्दे