Использование ptrace для генерации дампа стека - PullRequest
2 голосов
/ 28 апреля 2010

Я компилирую C ++ в * nix и хотел бы создать дамп стека а) в произвольной точке программы, б) во время любого сигнала, особенно во время SIGSEGV.

Google говорит мне, что ptrace, вероятно, является инструментом для работы, но я не могу найти каких-либо понятных примеров обхода стека. Получение обратного адреса, да, но как насчет СЛЕДУЮЩЕГО обратного адреса? А как насчет извлечения символического имени функции в этот момент? Что-то связанное с DWARF?

Большое спасибо, если вы можете сказать мне, куда идти отсюда.

1 Ответ

2 голосов
/ 28 апреля 2010

Если вы используете glibc, функции GNU backtrace() и backtrace_symbols() являются лучшим способом сделать это. В любом случае, обход стека будет зависеть от конкретной среды, поэтому нет недостатка в использовании непереносимых встроенных функций на каждой платформе для этого.

...