【问题标题】:Viewing a dynamically-allocated array with the Xcode debugger?使用 Xcode 调试器查看动态分配的数组?
【发布时间】:2010-10-03 20:06:54
【问题描述】:

假设我有一个 C++ 数组:

double* velocity = new double[100];

使用 GDB 命令行,我可以通过以下命令查看这个数组:

> print *velocity @ 100

它会打印出数组中所有双精度值的格式正确的列表。

但是,当使用 Xcode 调试器时,它最多会将其视为指向单个双精度值的指针,并在变量列表中显示 velocity[0]。

这使它成为调试包含大型动态分配数组的程序的真正 PITA。必须有某种方法来告诉 Xcode“这是一个指向长度为 100 的数组的指针”,并让它这样显示。有人知道是什么吗?

【问题讨论】:

  • 您的意思是在调试控制台中中断时对吗? XCode 4.3 似乎支持它。感谢您的提示!
  • 即使我输入“print *velocity @ 100”或“print *velocity @ 100;”或“p *速度@ 100;”在调试器控制台中,它不会打印并给出此错误:错误:警告L表达式结果未使用错误:预期';' after expression error: 1 errors parsing expression 有什么提示吗?谢谢!
  • @Zennichimaro XCode 使用 lldb,而不是 gdb。等效为p *(double( * )[100])velocity。从这个答案:stackoverflow.com/questions/7062173/…
  • 这个原始问题已有 7 年的历史,我认为这个问题现在应该已经解决了,但我似乎找不到明确的答案。我正在使用最新版本的 Xcode (7.3.1),我无法看到使用指针指向它的数组的所有内容。 2016 年有什么更好的解决方法吗?
  • @joe_04_04 现在支持了,看我的回答

标签: c++ xcode macos gdb


【解决方案1】:

我认为我的回答会是对旧回答的一个很好的补充。

新版本的 Xcode 使用 lldb 调试器作为默认工具,而不是 gdb

据此page

随着 Xcode 5 的发布,LLDB 调试器成为 OS X 调试体验的基础。

所以对于 Xcode 5 及以上版本,我使用这个lldb 命令:

内存读取 -t int -c8 `array_name`

其中:
8 - 数组中的元素个数
array_name - 数组名称
int - 数组类型

这个命令的执行结果会是这样的:

(lldb) 内存读取 -t int -c8 array (int) 0x7fff5fbff870 = 7 (int) 0x7fff5fbff874 = 6 (int) 0x7fff5fbff878 = 9 (int) 0x7fff5fbff87c = 10 (int) 0x7fff5fbff880 = 1 (int) 0x7fff5fbff884 = 8 (int) 0x7fff5fbff888 = 4 (int) 0x7fff5fbff88c = 3

【讨论】:

  • 如果你的数组名恰好是所有的十六进制值,比如 ABC,xcode 会尝试从地址 0xABC 开始读取值。您可以通过提供 '0 + ABC' 来解决此问题(包括引号)
【解决方案2】:

您可以使用 gdb 语法作为表达式:

  1. 使用 Run/Show/Expressions... 菜单显示表达式窗口
  2. 在窗口底部输入'*velocity @ 100'(表达式:)

【讨论】:

    【解决方案3】:

    从 Xcode 10 开始,您可以右键单击 velocity,选择“View value as...”,然后选择“Custom Type”。然后将其转换为 (double(&)[100]) *velocity 并在 GUI 中显示该数组。

    【讨论】:

    • 这行得通!我认为从 Xcode 10 开始,这应该被标记为答案。
    • 好吧,C++ 一直是 XCode 中不受欢迎的孩子。
    【解决方案4】:

    不幸的是,GUI 是有限的,您需要充分融合 GDB 魔法才能完成任务。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-22
    • 1970-01-01
    • 2019-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-25
    相关资源
    最近更新 更多