Отладка кода Visual Studio: назовите переменную и приведите ее

  1. Как присвоить пользовательское имя переменной, указанной в списке наблюдения, в режиме отладки кода VisualStudio?
  2. Есть ли способ автоматически приводить переменные к char* из указателя, чтобы, если они содержат текст, он был виден пользователю?

Я использую VSCode для отладки большой программы на C. При отладке возникают большие структуры вроде:

type variable; где переменная является заголовком однонаправленного списка:

feature_type *variable->feature
char* variable->features->head->name // name of the 1st feature
feature_type *variable->features->head->next // 2nd feature, that has its own "name"
void* variable->features->head->a->b->c->value // value of a 1st feature.

Проблема в том, что значение этой переменной очень часто (95%?) char*, и я хотел бы видеть его таким, но теперь - для каждого элемента списка мне приходится вручную выбирать его и приводить к (const символ *). Это раздражает, так как кажется, что печать этих переменных - менее профессиональная - будет намного быстрее.

фрагмент кода в VSCode

(const char *) (((((type *)0x844430)->a).b).c).value // rewritten what was important on the picture that you might want to copy.

Вторая проблема заключается в том, что все переменные, приведенные таким образом, имеют одинаковое имя, но отличаются только адресом памяти (это означает, что я должен помнить, что есть что). Есть ли способ дать им имя?


person Yurkee    schedule 07.08.2019    source источник
comment
Публикация текста в виде текста, а не изображения, более полезна при создании ответов и поиске. Рассмотрите возможность редактирования в виде текста.   -  person chux - Reinstate Monica    schedule 07.08.2019
comment
Я написал весь пример в тексте выше. картинка показывает, как это выглядит в отладчике - так как я не вижу имени переменной, только окончание (значение a-›b-›c-›)   -  person Yurkee    schedule 07.08.2019
comment
Возможно, проблема в коде, а не в IDE.   -  person Antti Haapala    schedule 07.08.2019
comment
Пожалуйста, опубликуйте минимальный воспроизводимый пример, чтобы мы могли воспроизвести проблему и помочь вам отладить ее. Также, пожалуйста, уточните что код пытается выполнить   -  person user3629249    schedule 07.08.2019
comment
Я не прошу помощи в отладке или написании кода. Код — это то, что он есть, и для проекта такого масштаба переписывание базовой структуры представления данных потребовало бы очень много времени. Я ясно написал о своих намерениях - я хочу давать имя переменным, которые добавляются в список наблюдения (потому что теперь все они выглядят одинаково), а также автоматически приводить такие переменные к char*, чтобы отладчик, чтобы показать мне содержимое.   -  person Yurkee    schedule 08.08.2019


Ответы (1)


Наткнулся на это, когда искал, как посмотреть значения в памяти в списке наблюдения. Похоже, вы можете установить имя переменной в окне gdb и использовать это имя в списке наблюдения.

Консоль отладки:

-exec set $var_name = (const char *) (((((type *)0x844430)->a).b).c).value

Затем в списке наблюдения вы можете просто сослаться на удобную переменную как $var_name

Отладчик кода VS

person gr0k    schedule 19.08.2020
comment
А не изменятся ли адреса через какое-то время (или после перезагрузки компа)? - person Yurkee; 21.08.2020
comment
Да, похоже, вам придется сбрасывать каждый запуск? Не могли бы вы изучить настройку вашего gdbinit, чтобы он инициализировался каждый раз при запуске, не уверен, выполняется ли это через VS Code или нет. sourceware.org/gdb/current/onlinedocs/gdb/gdbinit-man. html - person gr0k; 21.08.2020