【问题标题】:How to print the contents of a memory address using LLDB?如何使用 LLDB 打印内存地址的内容?
【发布时间】:2013-11-13 23:00:24
【问题描述】:

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

【问题讨论】:

  • 你试过print *(int*)0xb0987654吗?
  • 我收到了错误,错误:Could't dematerialize struct : (null) Errored out in Execute: Couldn't FinalizeJITExpression
  • 我可以切换到 gdb 吗?我正在使用 XCode5
  • 可能是的。你试过了吗? (你可以安装gdb,也许通过从源代码编译它)。
  • 当您像这样直接打印内存时,“无法取消实体化结构”通常意味着内存不可读。错误消息很可怕,但要正确处理却很棘手。您可以使用“内存读取”来判断这是否是真的。

标签: xcode lldb


【解决方案1】:

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

您可以按⌘^⌥⇧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?

【讨论】:

  • 有史以来最好的快捷键:有时它们是 2-3 个特殊键的组合(⌘^⇧、⌘⌥⇧、^⌥⇧ 或其他)。苹果没有捷径,他们全力以赴。
  • @drewster 确实如此,但由于 Xcode 的新用户体验,您必须决定在哪里打开内存浏览器(所以只需在输入快捷方式后按 Enter)
  • xcode 是 xcode。 Q 是关于 LLDB 的。它们不是一回事。
【解决方案2】:

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

x/16  0xb0987654

【讨论】:

    【解决方案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++ 中不需要。

    【讨论】:

      【解决方案4】:

      补充迈克尔的回答。

      我倾向于使用:

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

      这将在调试器中打印。

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

      希望这会有所帮助。

      【讨论】:

        【解决方案5】:

        me”是您要查找的命令。

        例如,这个 lldb 命令:

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

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

        【讨论】:

        • 我在 Apple macOS 11.3 版本 lldb-1200.0.44.2 上使用 lldb,我不得不稍微更改命令:me read -o /tmp/mem.txt -c512 0xb0987654
        猜你喜欢
        • 2017-02-21
        • 2014-08-06
        • 1970-01-01
        • 2021-10-02
        • 1970-01-01
        • 2020-10-23
        • 1970-01-01
        • 2012-08-13
        • 1970-01-01
        相关资源
        最近更新 更多