我正在尝试使用lldb
打印变量的地址。然而,调用print &(myVar)
会打印变量的内容,而不是它的地址。
(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)
expr --raw -- &self
,会返回错误:error: use of extraneous '&'
。我发现唯一的方法是将深度限制为零:frame var -L -D 0 self
,但这似乎有点别扭。 - Jason Moore&
作为“地址”,所以那不是有效的Swift代码,因此会出现错误。作为一种“内存安全”的语言,Swift对于展示变量存储位置没有太大兴趣。你可能可以使用Unsafe...方法来找到一个有效的Swift表达式,返回变量的位置?但是在那一点上,你将与Swift的设计相抵触。 - Jim Ingham