我正在使用 LLDB,想知道如何打印特定内存地址的内容,例如 0xb0987654。
问问题
47922 次
5 回答
70
补充迈克尔的回答。
我倾向于使用:
memory read -s1 -fu -c10000 0xb0987654 --force
这将在调试器中打印。
- -s 用于字节分组,例如 uint8 使用 1,int 使用 4
- -f 用于格式。我天生就忘记了正确的符号。只需将语句与 -f 放在一起,它就会向您回弹并为您提供所有选项的列表
- -c 用于字节数
- 如果要打印超过 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 回答