我在 Ubuntu 上使用 Qt。当我调试时,我只在 Locals 和 Watchers 中看到数组的第一个值。如何查看所有数组内容?
struct node
{
int *keys;
void **pointers;
int num_keys;
struct node *parent;
int is_leaf;
struct node *nextLevelNode;
};
在调试窗口中只显示第一个键值。
在表达式评估器中, 尝试
(int[10])(*myArray)
而不是 (int[10])myArray
或者,
*myArray@10
代替myArray@10
在调试窗口中只显示第一个键值
我假设你指的是用
int *keys;
声明的指针键
调试器不知道这是一个数组:它只知道这是一个指向
int
的指针。所以它不知道你想让它显示多少个值。
我在 Ubuntu 上使用 Qt Creator 2.1.0 调试器发现,以下代码允许我查看所有 5 个值:
int array1[5];
array1[0] = 2;
array1[1] = 4;
array1[2] = 6;
array1[3] = 8;
array1[4] = 10;
而使用此代码,调试器仅显示第一个值,与您描述的完全一样。
int* array2 = new int[5];
array2[0] = 20;
array2[1] = 21;
array2[2] = 22;
array2[3] = 23;
array2[4] = 24;
旁白:当然,上面的代码后面会跟这个,以避免内存泄漏:
delete[] array2;
稍后:这篇Qt Developer Network Forum Post说你可以告诉调试器将指针显示为数组:
在 Locals 和 Watchers 中,指针条目的上下文菜单中,选择“Watch Expression”。这会在下面创建一个新的 watched 表达式。
在那里,双击“名称”列中的条目,并添加“@10”以显示 10 个条目。
这听起来应该让你去。
只需右键单击您的变量,然后选择
Change Value Display Format
并选中Array of 100 items
。
在 Qt for mac 中,对我有用的是:
二维数组有时无法显示当前投票最高的答案。有一个解决方法。首先,将二维数组声明为一维数组,如下所示:
int width = 3;
int height = 4;
int* array2D = new int [width*height];
int x,y;
for(x=width-1;x>-1;x--)
for(y=height-1;y>-1;y--)
array2D[x*height + y] = -1; // mark a breakpoint here!
// add to expression evaluator: (int[3][4]) *array2D
delete [] array2D;
然后将
(int[3][4]) *array2D
添加到表达式评估器中。不幸的是,您必须自己对数组进行索引,但是您可以编写一个专用的内联函数或使用另一种封装方法使其稍微干净一些。