gpt4 book ai didi

memory-address - lldb:打印变量的地址

转载 作者:行者123 更新时间:2023-12-04 01:53:56 25 4
gpt4 key购买 nike

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

最佳答案

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

关于memory-address - lldb:打印变量的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36104930/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com