【问题标题】:lldb : Printing a variable's addresslldb : 打印变量的地址
【发布时间】:2016-07-06 10:05:51
【问题描述】:

我正在尝试使用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)

【问题讨论】:

    标签: memory-address lldb


    【解决方案1】:

    是的,-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"
    

    【讨论】:

    • 感谢详细解答!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-10
    • 2015-10-03
    • 2014-08-06
    • 1970-01-01
    • 2019-06-15
    • 2015-05-15
    • 2013-11-13
    相关资源
    最近更新 更多