lldb :打印变量的地址
lldb : Printing a variable's address
我正在尝试使用 lldb
打印变量地址。然而,调用 print &(myVar)
打印变量的内容而不是它的地址。
(lldb) print &(myVar)
(const string *) = "hello"
与 expression &(myVar)
相同。
(lldb) expression &(myVar)
(const string *) = "hello"
我也尝试了 expression
的 -L
选项:
(lldb) expression -L -- &(myVar)
0x00000000021aea80: (const string *) = "hello"
(lldb) expression -L -- myVar
0x0000000002a15430: (std::string) = "hello"
但是每次我调用 expression -L
时输出的地址都会改变。因此我假设它不对应于变量在内存中的地址。
如何获取变量在内存中的地址?
(我用的是lldb 3.4)
是的,-L 位置告诉您 lldb 用来表示表达式结果的变量,所以这不是您想要的。尽管常见的命令别名 print
使该命令看起来只是打印值,但它的作用远不止于此:例如在 运行 程序中创建新实体。因此,表达式结果的位置与您计算的表达式并非无关紧要。
无论如何,有两种简单的方法可以做到这一点。首先是关闭字符串摘要,这样可以看到打印地址的实际结果:
(lldb) expr --raw -- &my_string
(string *) = 0x00007fff5fbff618
获取相同数据的另一种方法是使用 "frame variable" 命令。此命令使您可以访问局部变量,而无需完整表达式解析器的开销。由于 frame variable
直接打印调试信息报告的变量,在这种情况下 -L 选项正是变量的位置:
(lldb) frame var -L my_string
0x00007fff5fbff618: (std::__1::string) my_string = "Some string here"
我正在尝试使用 lldb
打印变量地址。然而,调用 print &(myVar)
打印变量的内容而不是它的地址。
(lldb) print &(myVar)
(const string *) = "hello"
与 expression &(myVar)
相同。
(lldb) expression &(myVar)
(const string *) = "hello"
我也尝试了 expression
的 -L
选项:
(lldb) expression -L -- &(myVar)
0x00000000021aea80: (const string *) = "hello"
(lldb) expression -L -- myVar
0x0000000002a15430: (std::string) = "hello"
但是每次我调用 expression -L
时输出的地址都会改变。因此我假设它不对应于变量在内存中的地址。
如何获取变量在内存中的地址?
(我用的是lldb 3.4)
是的,-L 位置告诉您 lldb 用来表示表达式结果的变量,所以这不是您想要的。尽管常见的命令别名 print
使该命令看起来只是打印值,但它的作用远不止于此:例如在 运行 程序中创建新实体。因此,表达式结果的位置与您计算的表达式并非无关紧要。
无论如何,有两种简单的方法可以做到这一点。首先是关闭字符串摘要,这样可以看到打印地址的实际结果:
(lldb) expr --raw -- &my_string
(string *) = 0x00007fff5fbff618
获取相同数据的另一种方法是使用 "frame variable" 命令。此命令使您可以访问局部变量,而无需完整表达式解析器的开销。由于 frame variable
直接打印调试信息报告的变量,在这种情况下 -L 选项正是变量的位置:
(lldb) frame var -L my_string
0x00007fff5fbff618: (std::__1::string) my_string = "Some string here"