Получить BackTrace из основного файла без GDB

Есть ли способ получить обратную трассировку из основного файла без использования GDB?

Произошел сбой программы, и файл ядра сгенерирован, но на целевой машине не установлен GDB. Есть ли способ узнать обратную трассировку из основного файла без GDB?


person illaya    schedule 17.03.2014    source источник


Ответы (2)


Есть ли способ получить обратную трассировку из основного файла без использования GDB?

Конечно есть. Существуют и другие отладчики, и приложение может создавать трассировку стека самостоятельно, даже не создавая файл core. библиотека ведения журналов Google содержит код для этого в Linux.

Однако в вашем случае может быть проще просто проанализировать core с помощью GDB.

на целевой машине не установлен GDB.

Вы можете анализировать core на любой другой машине (обычно называемой хостом — машиной, на которой вы компилируете двоичный файл).

Для этого вам нужно:

  • системные библиотеки с целевой машины (если ваш бинарный файл динамически связан) и
  • соответствующим образом сконфигурированный cross-GDB (часто включенный в комплекты встроенной разработки).
person Employed Russian    schedule 17.03.2014

Получение трассировки из основного файла во многом зависит от архитектуры и ОС, если вы планируете извлекать все это самостоятельно.
gdb — это переносимая программа, которая работает на нескольких архитектурах. В любом случае gdb использует два метода для извлечения трассировки из дампа ядра:
1. Следование списку ссылок указателя кадра (ebp в случае архитектуры x86).
2. Использование фреймворка обработки исключений для виртуальной раскрутки.
> gdb требует бинарников для извлечения трассировки из дампа ядра, так как бинарники содержат информацию, как запустить виртуальную раскрутку.

После этого мой ответ относится к архитектуре linux-x86_64.

Использование указателя кадра, т.е. rbp, не работает, когда речь идет о надежном извлечении обратной трассы, если указатель кадра опущен или это оптимизированная программа. В архитектуре x86_64 компиляторы, например. gcc выдает раздел .eh_frame, который используется gdb для виртуальной раскрутки (помните, что я не говорю об отладке исходного кода gdb). Но gdb требует, чтобы двоичные файлы выполняли виртуальную раскрутку, поскольку gdb предполагает, что ядро ​​​​без исполняемого содержимого, поскольку ядро ​​Linux Box по умолчанию выгружает только сегменты данных.

Если у вас есть полный дамп ядра и нет двоичных файлов на linux-x86_64, вам может помочь следующий проект. http://sourceforge.net/projects/core-dump-analyzer/

person user1746827    schedule 26.11.2015