2016-03-19 79 views
6

我想用lldb打印一個變量的地址。但是,撥打print &(myVar)將打印變量的內容而不是其地址。lldb:打印一個變量的地址

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

expression &(myVar)相同。

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

我也試過expression-L選項:

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

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

但是地址輸出改變每個我調用expression -L時間。因此我假設它不對應於內存中變量的地址。

如何獲取內存中變量的地址?

(我用LLDB 3.4)

回答

8

是的,-L位置告訴你有關LLDB使代表表達結果的變量,所以這不是你想要的。儘管通用命令別名print使得它看起來像這個命令只是打印值,但它的功能遠不止於此:在正在運行的程序中創建新的實體。因此,表達式結果的位置與您所評估的表達式並不平凡。

無論如何,有兩個簡單的方法可以解決這個問題。首先是關閉的字符串摘要,所以你可以看到打印地址的實際結果是:

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

另一種方式來獲得相同的數據是使用「框架變量」命令。這個命令可以讓你訪問局部變量,而不需要全表達式解析器的開銷。由於frame variable直接打印所報告的調試信息變量,在這種情況下,-L選項是完全可變的位置:

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

感謝詳細的解答! –