在Xcode调试期间查看内存中的变量值?

时间:2015-10-28 15:51:31

标签: c xcode lldb

我在Xcode中调试我的C项目。基本上,我有许多嵌套数组,我希望检查它们的值。它们以启动内存地址的形式存在于控制台中(不确定它是否是正确的名称),如

a (0x0000000100300010)
|-- b (0x0000000100105750)
    |-- c (0x0000000100108250)

我发现很难检查c中数组lldb的值。我在po中尝试了lldb命令,但没有运气。所以我的第一个问题是人们通常如何进行此检查?我相信在调试时这是常见的事情。

然后我在某个地方读到了一个可以通过检查内存内容来实现这一点,比如0x0000000100108250,我做了(截图如下)。

enter image description here

在我看来,内存内容显示为二进制。我知道这在物理上更加真实,但对于我的目标(检查变量值),这是违反直觉的。 我的第二个问题:有没有办法将这些内存内容检查为自然十进制数?如果没有,我应该在读取这些二进制数时遵循什么顺序(具体来说,01 00 00 00是什么)?

1 个答案:

答案 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技巧,其中反引号在命令中引入内联表达式