Печать n уровней вызова?

Используя С++ с Visual Studio, мне было интересно, есть ли API, который будет печатать для меня стоп-код. Желательно, чтобы я напечатал столбец 5 уровней в глубину. Предоставляет ли Windows простой API, позволяющий мне это делать?

Ответ 1

Существует несколько способов сделать это.

См. Как скопировать фреймы стека с Windows x64

На мой взгляд, самым простым и наиболее надежным способом является функция Win32 API:

USHORT WINAPI CaptureStackBackTrace(
     __in       ULONG FramesToSkip,
     __in       ULONG FramesToCapture,
     __out      PVOID *BackTrace,
     __out_opt  PULONG BackTraceHash
);

Этот параметр FramesToCapture определяет максимальную глубину стека вызовов.

Ответ 2

Похоже, что библиотека Microsoft DbgHelp может делать то, что вы хотите. Для получения дополнительной информации обратитесь к документации по функциям StackWalk64 на MSDN. Кроме того, эта статья CodeProject может быть полезна.

Ответ 3

Я считаю, что вы можете получить это из своего API отладчика (dbghelp).

Ответ 4

Посмотрите на API Stackwalk и Stackwalk64 API DbgHelp.