61

我正在使用 LLDB,想知道如何打印特定内存地址的内容,例如 0xb0987654。

4

5 回答 5

70

补充迈克尔的回答。

我倾向于使用:

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

这将在调试器中打印。

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

希望这可以帮助。

于 2013-11-03T03:43:27.263 回答
67

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

在此处输入图像描述

您可以按 访问它⌘^⌥⇧M。输入后按回车在主编辑器中打开内存浏览器。

或者

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

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

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

此处的相关答案:如何在 Xcode 4 中打开内存浏览器?

于 2014-02-25T11:43:05.180 回答
12

" me" 是您要查找的命令。

例如,这个 lldb 命令:

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

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

于 2013-11-03T02:21:03.090 回答
11

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

x/16  0xb0987654
于 2018-07-31T15:07:40.860 回答
3

这是在 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++ 中不需要它。

于 2017-09-01T14:01:48.473 回答