Xcode 如何使用LLDB打印内存地址的内容?

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表

我正在使用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表示格式。我天生就忘了正确的符号。只要在语句中加上-f,它就会回复到您并给出所有选项的列表
  • -c表示字节数
  • 如果打印的字节数超过1024个,请使用--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键)