如何使用lldb在0xb0987654中打印内存?

时间:2013-11-03 01:22:16

标签: xcode lldb

我正在使用LLDB,我想知道如何在内存中打印值0xb0987654?

5 个答案:

答案 0 :(得分:55)

Xcode有一个非常好的内存浏览器窗口,它可以很好地显示内存地址的内容。它还允许您控制字节分组和显示的字节数,并向后或向前移动存储页面:

enter image description here

您可以按⌘^⌥⇧M(Xcode 9及更早版本中的⌘⇧M)访问它

调试 - >调试工作流程 - >查看内存

注意左下角的字段,您可以粘贴要检查的内存地址!

此处的文档:https://developer.apple.com/library/ios/recipes/xcode_help-debugger/articles/viewing_memory.html

相关答案:How do I open the memory browser in Xcode 4?

答案 1 :(得分:41)

补充迈克尔的答案。

我倾向于使用:

memory read -s1 -fu -c10000 0xb0987654 --force

将在调试器中打印。

  1. -s用于字节分组,因此例如对uint8使用1,对int
  2. 使用4
  3. -f表示格式。我天生就忘记了正确的符号。只需将语句与-f放在一起,它就会回显给你,并为你提供所有选项的列表
  4. -c用于字节数
  5. 如果您打印的字节超过1024个字节,请附加--force
  6. 希望这有帮助。

答案 2 :(得分:8)

" me"是你正在寻找的命令。

例如,这个lldb命令:

me -r -o /tmp/mem.txt -c512 0xb0987654

将从您的内存地址复制512个字节到/tmp/mem.txt文件中。

答案 3 :(得分:1)

这是一个在lldb中显示固定长度类型数组的简单技巧。如果你的程序包含一个指向9个元素的long *变量,你可以声明一个包含9个long值的固定数组的结构类型,并将指针强制转换为该类型:

long *values = new long[9]{...};

(lldb) expr typedef struct { long values[9]; } l9; *(l9 *)values
(l9) $1 = {
  values = {
    [0] = 0
    [1] = 1
    [2] = 4
    [3] = 9
    [4] = 16
    [5] = 25
    [6] = 36
    [7] = 49
    [8] = 64
  }
}

我在用C编码时使用typedef,在C ++中不需要它。

答案 4 :(得分:0)

例如,打印内存的长度为16x4字节。

x/16  0xb0987654