Просмотр содержимого массива в отладчике Qt Creator - PullRequest
14 голосов
/ 23 сентября 2011

Я использую Qt в Ubuntu. При отладке я вижу только самое первое значение массива в Locals and Watchers. Как я могу просмотреть все содержимое массива?

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

Показывает только первое значение ключа в окне отладки.

Ответы [ 5 ]

13 голосов
/ 16 декабря 2013

В выражении Expression, Попробуйте (int[10])(*myArray) вместо (int[10])myArray

Или *myArray@10 вместо myArray@10

8 голосов
/ 24 сентября 2011

Показывает только первое значение ключа в окне отладки

Я предполагаю, что вы ссылаетесь на клавиши указателя, объявленные с int *keys;

отладчик не знает, что это массив: все, что он знает, это то, что это указатель на int.Поэтому он не может знать, сколько значений вы хотите отобразить.

Что я нашел, используя отладчик Qt Creator 2.1.0 в Ubuntu, так это то, что следующий код позволяет мне увидеть все 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 говорится, что вы можете указать отладчику отображать указатель в виде массива:

В контекстном меню ввода указателя «Местные жители и наблюдатели» выберите «Наблюдение за выражением».Это создаст новое просматриваемое выражение ниже.

Там дважды щелкните запись в столбце «Имена» и добавьте «10», чтобы отобразить 10 записей.

Звучиткак будто это должно помочь вам.

3 голосов
/ 26 августа 2016

Просто щелкните правой кнопкой мыши по вашей переменной, выберите Change Value Display Format и отметьте Array of 100 items.

1 голос
/ 04 декабря 2018

Двумерные массивы иногда не могут быть отображены таким образом. Есть обходной путь. Сначала объявите двумерный массив как одномерный массив следующим образом:

    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 в оценщик выражений. К сожалению, вы сами должны индексировать массив, но вы можете написать встроенную функцию специального назначения или использовать другой метод инкапсуляции, чтобы сделать его немного чище.

1 голос
/ 09 октября 2018

В Qt для Mac, что работало для меня, было:

  1. Добавить оценщик выражений для нужной переменной (щелкните правой кнопкой мыши переменную в окне отладчика, затем «Добавить оценщик выражений для« имя переменной здесь »)"

enter image description here

Переменная массива изначально отображается как одно значение.Просто измените «var» на «var [start ... end] и появятся значения массива.

enter image description here

enter image description here

...