2009-08-27 2 views
10

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

ответ

5

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

См How to Log Stack Frames with Windows x64

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

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

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

+0

Это не генерирует никакой символической информации. Какая польза от количества указателей? –

+0

Программы C/C++ по умолчанию не содержат символической информации. См. Здесь, как добавить символы в дамп стека: http://www.drdobbs.com/architecture-and-design/post-mortem-debugging-revisited/227900186 –

8

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

0

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

1

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

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