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

View variable value in memory during Xcode debugging?

我正在 Xcode 中调试我的 C 项目。基本上,我有很多嵌套数组,我想检查它们的值。它们以起始内存地址的形式出现在控制台中(不确定它是否正确),如

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

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

然后我在某处读到,可以通过检查 0x0000000100108250 处的内存内容来实现这一点,我就是这么做的(截图如下)。

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

想象一下被停在这里:

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

"memory read" 应该是显而易见的

-t int 表示"print elements of type int"

-c 5 表示"print 5 elements"

`ptr` 表示 "evaluate the string ptr as an expression and replace the result in the command" - 这是一个通用的 LLDB 技巧,其中反引号在命令中引入内联表达式