我在Xcode中调试我的C项目。基本上,我有许多嵌套数组,我希望检查它们的值。它们以启动内存地址的形式存在于控制台中(不确定它是否是正确的名称),如
a (0x0000000100300010)
|-- b (0x0000000100105750)
|-- c (0x0000000100108250)
我发现很难检查c
中数组lldb
的值。我在po
中尝试了lldb
命令,但没有运气。所以我的第一个问题是人们通常如何进行此检查?我相信在调试时这是常见的事情。
然后我在某个地方读到了一个可以通过检查内存内容来实现这一点,比如0x0000000100108250
,我做了(截图如下)。
在我看来,内存内容显示为二进制。我知道这在物理上更加真实,但对于我的目标(检查变量值),这是违反直觉的。 我的第二个问题:有没有办法将这些内存内容检查为自然十进制数?如果没有,我应该在读取这些二进制数时遵循什么顺序(具体来说,01 00 00 00
是什么)?
答案 0 :(得分:1)
想象一下被拦在这里:
int foo(int* ptr) {
return *ptr; // HERE
}
你碰巧知道ptr指向一个5元素的int数组
(lldb) memory read -t int -c 5 `ptr`
将为您生成以下输出:
(int) 0x7fff5fbff920 = 1
(int) 0x7fff5fbff924 = 2
(int) 0x7fff5fbff928 = 3
(int) 0x7fff5fbff92c = 4
(int) 0x7fff5fbff930 = 5
“记忆读取”应该是显而易见的
-t int表示“打印int类型的元素”
-c 5表示“打印5个元素”
`ptr`的意思是“将字符串ptr计算为表达式并替换命令中的结果” - 这是一个通用的LLDB技巧,其中反引号在命令中引入内联表达式