Использование GDB с встроенными функциями - PullRequest
4 голосов
/ 13 февраля 2009

Я пытаюсь использовать gdb в посмертном режиме с дампом ядра сбойного процесса. Я могу получить трассировку стека, но вместо того, чтобы показывать мне фактическое местоположение в функции-нарушителе, gdb показывает номер строки двухстрочной встроенной функции, которую вызывает функция-нарушитель.

Встроенная функция вызывается во многих местах; Как я могу найти, какой вызов вызвал сбой? Как мне сразу найти код вокруг встроенной функции?

Ответы [ 3 ]

2 голосов
/ 23 февраля 2009

Я предполагаю, что «много-много вызовов встроенной функции» происходят из одной «функции-нарушителя» (иначе ваш вопрос для меня не имеет смысла).

Лучше всего записать IP-адрес точки сбоя в GDB, затем использовать "objdump -dS ./a.out" и найти этот IP в выходных данных.

2 голосов
/ 18 декабря 2009

Перейти к рассматриваемому фрейму стека, распечатать точку инструкции (например, p $ rip), затем используйте его, чтобы найти вручную, например, "addr2line -e -i 0x84564756".

Это не масштабируется, но, по крайней мере, работает.

0 голосов
/ 18 февраля 2009

Вы можете попробовать установить OPTIMIZE в NO (например, setenv OPTIMIZE NO) и пересобрать проект: это говорит компилятору не оптимизировать код, следовательно, он может не выполнять встроенные вызовы функций.

...