Допустим, я работаю с этой программой C.
- У меня есть три строки, которые хранятся в динамически выделяемой памяти.
- Я сохраняю адреса для этих строки в динамически выделяемом указателе на переменную указателей.
#include <string.h>
#include <stdlib.h>
int main(void)
{
char *p0 = strdup("red..");
char *p1 = strdup("green");
char *p2 = strdup("blue.");
char *p3 = NULL;
char **pp = malloc(sizeof(char *) * 4); /* I want to watch this in VSCode debugger */
pp[0] = p0;
pp[1] = p1;
pp[2] = p2;
pp[3] = p3;
/* do something */
return (0);
}
Чего я хочу достичь
Как мне получить отображение значений char в режиме просмотра отладчика VSCode (и, если возможно, адреса) строк, на которые указывает каждый указатель, например:
<watch_expression_for_pp>: <address of pp>
|- pp[0]: [6] <address of pp[0]>
| |--- [0]: 'r'
| |--- [1]: 'e'
| |--- [2]: 'd'
| |--- [3]: '.'
| |--- [4]: '.'
| |--- [5]: '\0'
|
|- pp[1]: [6] <address of pp[1]>
| |--- [0]: 'g'
| |--- [1]: 'r'
| |--- [2]: 'e'
| |--- [3]: 'e'
| |--- [4]: 'n'
| |--- [5]: '\0'
|
|- pp[2]: [6] <address of pp[2]>
| |--- [0]: 'b'
| |--- [1]: 'l'
| |--- [2]: 'u'
| |--- [3]: 'e'
| |--- [4]: '.'
| |--- [5]: '\0'
|
|- pp[3]: [6] <0x0000000000000000>
|--- [0]: 'r'
|--- [1]: 'a'
|--- [2]: 'n'
|--- [3]: 'd'
|--- [4]: 'o'
|--- [5]: 'm'
То, что я уже знаю
Я знаю, что если я добавлю (char(*)[6])pp[0]
в качестве выражения наблюдения, Я смогу просмотреть 6 значений символов от pp[0][0]
до pp[0][5]
, но это не идеальное решение, если я имею дело с сотнями указателей и мне нужно go быстро перебирать значения.
смотреть значения char в одной строке
Я ищу способ добавить одно выражение для наблюдения и получить представление, подобное приведенному выше, точно так же, как когда я смотрю связанный список в отладчике. Или совершенно другой подход, например, использование расширения.