Xcode 如何使用LLDB打印内存地址的内容?
我正在使用LLDB,不知道如何打印特定内存地址的内容,例如0xb0987654。“Xcode 如何使用LLDB打印内存地址的内容?,xcode,lldb,Xcode,Lldb,我正在使用LLDB,不知道如何打印特定内存地址的内容,例如0xb0987654。“me”是您要查找的命令 例如,此lldb命令: me -r -o /tmp/mem.txt -c512 0xb0987654 将从内存地址复制512字节到/tmp/mem.txt的文件中。以补充Michael的答案 我倾向于使用: memory read -s1 -fu -c10000 0xb0987654 --force 这将在调试器中打印 -s表示字节分组,因此使用1表示uint8,使用4表示int -f表
me
”是您要查找的命令
例如,此lldb命令:
me -r -o /tmp/mem.txt -c512 0xb0987654
将从内存地址复制512字节到/tmp/mem.txt的文件中。以补充Michael的答案 我倾向于使用:
memory read -s1 -fu -c10000 0xb0987654 --force
这将在调试器中打印
希望这有帮助。Xcode有一个非常好的内存浏览器窗口,可以很好地显示内存地址的内容。它还允许您控制字节分组和显示的字节数,并向后或向前移动内存页: 您可以按
⌘^⌥⇧M
。输入后,按enter键在主编辑器中打开内存浏览器
或
调试-->调试工作流-->查看内存
注意左下角的字段,您可以在其中粘贴要检查的内存地址
此处的文档:
相关答案:这里有一个在lldb中显示固定长度的键入数组的简单技巧。如果程序包含指向9个元素的long*变量,则可以声明包含9个长值的固定数组的结构类型,并将指针强制转换为该类型:
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中用TyWIFF编码时,C++中不需要。
< P>例如,长度16x4字节的打印内存。x/16 0xb0987654
您是否尝试过打印*(int*)0xb0987654?我收到了错误,错误:无法对结构进行非物质化:(null)在执行中出错:无法完成ejitexpression我可以切换到gdb吗?我正在使用Xcode5可能是的。你试过了吗?(您可以安装
gdb
,也许可以从源代码处编译它)。当您像这样直接打印内存时,“无法对结构进行非物质化”通常意味着内存不可读。错误消息很可怕,但要正确处理却很棘手。你可以用“记忆读取”来判断这是否是真的。有史以来最好的快捷方式:有时它们是2-3个特殊键的组合(⌘^⇧, ⌘⌥⇧, ^⌥⇧ 或者别的什么)。苹果没有快捷方式了,它们全都用上了。@drewster是的,但是由于Xcode的新用户体验,你必须决定在哪里打开内存浏览器(所以在输入快捷方式后按enter键)