2010-01-14 5 views
4

Каков наилучший способ реализации трассировки стека исключений?Исключения stacktrace

Я нашел какое-то решение, использующее uncaught_exception(), но для этого нужно добавить код для каждой функции.

мне нужно что-то работает на GCC под Linux и окна

+0

Какой вид вы хотите видеть? – 2010-01-14 13:53:32

+0

Dupe: http://stackoverflow.com/questions/77005/how-to-generate-a-stacktrace-when-my-gcc-c-app-crashes –

+0

Это не тот же вопрос. Я не хочу, чтобы стек, когда мое приложение терпело крах, я хочу, чтобы у меня была стекная привязка к моим исключениям, как e.printStackTrace(); в Java –

ответ

4

Я не думаю, что это кросс-платформенный способ сделать это. В окнах посмотрите на метод StackWalk; на linux, man backtrace. Это получит информацию; это зависит от вас, чтобы отформатировать его.

4

Я не уверен, что существует надежный кросс-платформенный метод для разматывания стека.

Все платформы/архитектуры, над которыми я работал, предложили способ ходить по стеку при возникновении исключения и сопоставлении адресов с именами функций. Ни один из них не является переносимым, но структура отчетов может быть написана как переносимая с фактическим кодом стека, остающимся на платформе (StackWalk для Windows или backtrace в Linux).

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

2

Я реализовал некоторый код, который генерирует текущую трассировку стека в виде строки; посмотрите на функцию GetStackTrace(), которая начинается с строки 1220 из this file, если вы заинтересованы. Эта функция работает под управлением Linux, MacOS/X и Windows (обратите внимание, что я позаимствовал реализацию Windows с here и что для реализации этой функции в Windows требуется невероятное количество кода). Bleah)

Смежные вопросы