Библиотека для регистрации стека вызовов во время выполнения (Windows/Linux)
Мне нужен способ записи трассировки стека функций в журнал отладки, чтобы помочь мне диагностировать дефект. Проблема в том, что мне нужно реализовать это на Windows и Linux с использованием C++.
После небольшого исследования я обнаружил, что:
- Для реализации Windows я могу использовать функцию и семейство API StackWalk64.
- Под Linux я нашел libunwind, который звучит великолепно.
- Или я могу использовать обратную трассировку glibc
Прежде чем приступить к работе, мне нужен совет, если это правильный путь, и спросить, есть ли уже написанная многоплатформенная библиотека, которая может помочь. Я подозреваю, что я не первый программист, которому это нужно.:)
3 ответа
Google Breakpad обрабатывает все это для вас, если вы хотите получить аварийные дампы с поля.
Я написал 2 статьи на эту тему, в том числе Googles Breakpad, а также очень тонкий самописный подход, который работает для Windows и Linux:
Отладка после смерти - http://drdobbs.com/tools/185300443
Повторная отладка после смерти - http://drdobbs.com/architecture-and-design/227900186
Несколько лет назад я написал это: http://drdobbs.com/cpp/191100567
В основном, некоторые макросы регистрируют место, где происходит раскрутка стека при возникновении исключения.
Обновленную версию фреймворка можно найти в библиотеке Imebra (http://imebra.com)