Чтение отладочной информации во время выполнения из приложения - PullRequest
9 голосов
/ 18 февраля 2011

У меня есть несколько вопросов относительно отладочных символов и того, что можно сделать с ними, кроме, ну, отладки.В основном меня интересуют ответы, касающиеся GCC, но я также был бы рад узнать, как это выглядит под другими компиляторами, включая MSVC.

Прежде всего:

  • Чтораспространенные форматы / типы символов отладки?
  • Как они связаны с компиляторами и платформами?Это всегда один и тот же формат в GCC и MinGW на разных платформах?
  • Могу ли я проверить во время выполнения, есть ли в них сборка и в каком формате?

И еще несколько практических вопросов... Как мне :

  • Проверить текущий файл и номер строки?
  • Получить имя (квалифицированной) выполняемой функции?
  • Получить полную текущую трассировку стека?

Позвольте мне подчеркнуть, что я говорю о проверках во время выполнения.Все они могут быть прочитаны и напечатаны в GDB, но я не знаю, сколько информации поступает от самих символов отладки и сколько от исходного кода, к которому GDB также имеет доступ.

Может быть, естьбиблиотека, которая может анализировать символы отладки и выдавать такую ​​информацию?

Достаточно ли стандартизированы символы отладки, чтобы можно было ожидать некоторой степени переносимости для таких решений?

1 Ответ

8 голосов
/ 18 февраля 2011

Какие распространенные форматы / типы символов отладки?

DWARF и STABS (они встроены в исполняемый файл, в специальные разделы), база данных программ (PDB; внешний файл, используемый MSVC).

Как они связанык компиляторам и платформам?Всегда ли это одинаковый формат в GCC и MinGW на разных платформах?

GCC использует DWARF / STABS (я думаю, что это опция компиляции GCC) как в Linux (ELF), так и в Windows (PE),не знаю о других.MSVC всегда использует PDB.

Могу ли я проверить во время выполнения, есть ли в сборке они и в каком формате они находятся?

Можно проанализировать исполняемый образ и посмотреть, есть лиявляются разделами с информацией об отладке (см. документация STABS и спецификации DWARF ).Файлы PDB распространяются либо с исполняемыми файлами, либо через серверы символов (поэтому, если вы не хотите выходить в интернет, проверьте, есть ли X.pdb для X.exe / X.dll).

О том, как читатьи использовать эти символы - я не знаю о DWARF / STABS (возможно, в GNU binutils есть что-то, что может их найти и извлечь), но для PDB лучше всего использовать dbghelp - его использование довольно хорошо задокументировано и в сети есть много примеров.Существует также DIA SDK , который можно использовать для запроса файлов PDB.

Достаточно ли стандартизированы символы отладки, чтобы можно было ожидать некоторой степени переносимости для таких решений?

У DWARF есть формальная спецификация, и она чертовски сложна.PDB AFAIK не задокументировано, но dbghelp / DIA есть и являются рекомендуемым способом.

...