LINUX.ORG.RU

получение Debug-information программным путем


0

0

Есть ли какая-нибудь возможность используя какую-либу библиотеку (к примеру часть кода gdb или что-нибудь другое) реализовать следующее ?: 1. поставить обработчик SIGSEGV с помощью sigaction 2. в обработчике по адресу, имеющемуся в информации, пришедшей с сигналом (в структуре siginfo_t) узнать файл и строку исходного кода, где произошло нарушение SIGSEGV и вывести эту информацию.

Это было бы очень полезно с т.к. отладки, т.к. core при использовании Linux pthreads часто не содержит полезной информации.

anonymous

Действительно можно перехватить SIGSEGV. Но как ты будешь потом выковыривать состояние процесса (стек, и др.) это другой вопрос. КДЕ для этих целей юзает прожку под названием drkonqi.

А дебаг информацию можно достать непосредственно из своего процесса приблизительно так:

extern char __end; addr = (unsigned long *)(&__end);

Это будет адрес начала секции с отладочной информацией. Точнее надо смотреть скрипты линкера для твоей системы. А дальше надо читать доку.

А то можно bfd заюзать. Все зависит от того, на сколько ты захочешь мудохаться с этим.

Banshee
()
Ответ на: комментарий от Banshee

А что такое BFD ? Хотелось бы иметь простой интерфейс(к тому же не слишком увеличивающий размер программы), позволяющий заюзать информацию в siginfo_t.

anonymous
()

bfd это библиотека для манипуляции всеми поддерживаемыми выполнимыми файлами. Например, elf32, a.out...

С ней ты можешь например достать нужную секцию из elf-a.

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

Banshee
()

а так компилить не пробовал?

-g Produce debugging information in the operating sys-
tem's native format (stabs, COFF, XCOFF, or DWARF).
GDB can work with this debugging information.

-ggdb Produce debugging information in the native format
(if that is supported), including GDB extensions if
at all possible.

HEKTO
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.