Библиотека для регистрации стека вызовов во время выполнения (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)

Другие вопросы по тегам