Просмотр содержимого массива в отладчике Qt Creator

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

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

В окне отладки отображается только первое ключевое значение.

Ответ 2

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

Я предполагаю, что вы ссылаетесь на клавиши указателя, объявленные с помощью 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 Forum Post говорит, что вы можете сказать отладчику отображать указатель как массив:

В Locals and Watchers, в контекстном меню ввода указателей, выберите "Watch Expression". Это создает новое наблюдаемое выражение ниже.

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

Похоже, вам это нужно.

Ответ 3

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

Ответ 4

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

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

enter image description here

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

enter image description here

enter image description here

Ответ 5

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

    int width = 3;
    int height = 4;
    int* array2D = new int [width*height];
    int x,y;
    for(x=2;x>-1;x--)
        for(y=3;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 в (int[3][4]) *array2D оценки выражений. К сожалению, вам нужно индексировать массив самостоятельно, но вы можете написать специальную встроенную функцию или использовать другой метод инкапсуляции, чтобы сделать его немного более чистым.