【问题标题】:View Array contents in Qt Creator debugger在 Qt Creator 调试器中查看数组内容
【发布时间】:2011-09-23 19:25:51
【问题描述】:

我在 Ubuntu 上使用 Qt。当我调试时,我只在 Locals 和 Watchers 中看到数组的第一个值。如何查看所有数组内容?

struct node
{
    int *keys;
    void **pointers;
    int num_keys;
    struct node *parent;
    int is_leaf;
    struct node *nextLevelNode;
};

它只显示调试窗口中的第一个键值。

【问题讨论】:

    标签: c++ qt qt-creator


    【解决方案1】:

    在表达式求值器中, 试试(int[10])(*myArray) 而不是(int[10])myArray

    或者,*myArray@10 而不是 myArray@10

    【讨论】:

      【解决方案2】:

      在调试窗口中只显示第一个键值

      我想你指的是指针键,用 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 表示您可以告诉调试器将指针显示为数组:

      在本地和观察者的指针条目的上下文菜单中,选择“观察表达式”。这会在下面创建一个新的观察表达式。

      在此处,双击“名称”列中的条目,并添加“@10”以显示 10 个条目。

      这听起来应该能让你继续前进。

      【讨论】:

        【解决方案3】:

        只需右键单击您的变量,然后选择 Change Value Display Format 并选中 Array of 100 items

        【讨论】:

          【解决方案4】:

          在 Qt for mac 中对我有用的是:

          1. 为所需变量添加表达式求值器(右键单击调试器窗口中的变量,然后“为“var name here”添加表达式求值器”

          1. 数组变量最初显示为单个值。只需将“var”更改为“var[start...end],就会出现数组值。

          【讨论】:

            【解决方案5】:

            二维数组有时无法以这种方式显示。有一个解决方法。首先,将二维数组声明为一维数组,如下所示:

                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 添加到表达式求值器中。不幸的是,您必须自己索引数组,但您可以编写一个特殊用途的内联函数或使用其他封装方法使其稍微干净一些。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2010-12-08
              • 2018-06-13
              • 1970-01-01
              相关资源
              最近更新 更多