Учитывая указатель, как GDB получает свой тип? - PullRequest
2 голосов
/ 26 мая 2011

Как GDB знает, что указатель указывает на int или struct или любые другие типы данных?

Ответы [ 3 ]

6 голосов
/ 10 сентября 2013

из: Изучение таблицы символов

whatis expr

Вывести тип данных выражения expr. expr фактически не оценивается, и любые побочные операции (такие как присваивания или вызовы функций) внутри него не выполняются. Смотрите раздел Выражения.


ptype expr

PTYPE

Вывести описание типа выражения expr. ptype отличается от whatis тем, что печатает подробное описание, а не просто название типа. Например, для этого объявления переменной:

struct complex {double real; double imag;} v;

две команды дают такой вывод:

(gdb) whatis v
 type = struct complex
(gdb) ptype v
 type = struct complex {
    double real;
    double imag;
 }
4 голосов
/ 26 мая 2011

GDB не может знать, если указатель не получен из переменной или выражения, для которого можно определить тип.

Если gdb задан 0x4567789, он не знает, на что это может указывать. Но если int * p имеет это значение, GDB может отменить это и дать вам то, что содержится в этом адресе.

1 голос
/ 26 мая 2011

gdb знает тип переменной-указателя в вашем коде, читая отладочную информацию (таблицу символов a.k.a), которая встроена в ваш исполняемый файл при компиляции с параметром отладки (-g).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...