Доступ к информации о программе, которую GDB видит в C ++ - PullRequest
6 голосов
/ 19 марта 2010

У меня есть программа, написанная на C ++, для Linux, скомпилированная с -g.

Когда я запускаю его под GDB, я могу

1) set breakpoints
2) at those breakpoints, print out variables
3) see the stackframe
4) given a variable that's a structure, print out parts of the structure (i.e. how ddd displays information).

Теперь, учитывая, что моя программа скомпилирована с "-g" - есть ли способ получить доступ к этой возможности внутри самой программы?

т.е. учитывая, что моя программа скомпилирована с "-g", есть ли

std::vector<string> getStackFrame();

функция, которую я могу вызвать, чтобы получить текущий стек в текущей точке выполнения?

Учитывая указатель на объект и его тип ... могу ли я сделать

std :: vector getClassMember (имя_класса);

Я понимаю, что ответ по умолчанию - «нет, C ++ не поддерживает этот уровень самоанализа» - однако, напомним, я нахожусь на Linux, моя программа скомпилирована с «-g», и GDB может это сделать, ясно, информация там. Вопрос: есть ли API для доступа к нему?

РЕДАКТИРОВАТЬ: PS Naysers, я хотел бы увидеть причину для закрытия этого вопроса.

Ответы [ 2 ]

3 голосов
/ 19 марта 2010

Формат отладки называется карликовым. Это должно дать вам подсказку, где искать дальше.

Библиотека для чтения файла ELF Отладочная информация DWARF

2 голосов
/ 19 марта 2010

Я помню, как использовал libbfd для получения имен функций из объектных файлов. Это библиотека для чтения форматов объектов, возможно, вы также можете прочитать другую отладочную информацию, используя это (Не знаю, если честно)

http://www.skyfree.org/linux/references/bfd.pdf

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