使用Xcode调试器查看动态分配的数组?

时间:2009-01-27 18:53:43

标签: c++ xcode macos gdb

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

double* velocity = new double[100];

使用GDB命令行,我可以使用以下命令查看此数组:

> print *velocity @ 100

它将打印一个格式良好的列表,列出数组中所有的double值。

然而,当使用Xcode调试器时,它所做的最多就是将其视为指向单个double值的指针,并在变量列表中显示velocity [0]。

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

4 个答案:

答案 0 :(得分:32)

我认为我的答案对于旧答案来说是一个很好的补充。

新版Xcode使用lldb调试程序作为默认工具,而不是gdb

根据page

  

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

因此对于Xcode从版本5开始,我使用这个lldb命令:

memory read -t int -c8 `array_name`

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

执行此命令的结果如下:

(lldb) memory read -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

答案 1 :(得分:13)

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

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

答案 2 :(得分:1)

从Xcode 10开始,您可以右键单击velocity,选择“以...查看值”,然后选择“自定义类型”。然后将其转换为(double(&)[100]) *velocity并在GUI中显示该数组。

答案 3 :(得分:0)

不幸的是,GUI是有限的,你需要融合GDB神奇的混合来完成任务。