2009-08-27 4 views
10

Visual Studio에서 C++을 사용하여 콜 스택을 인쇄 할 API가 있는지 궁금합니다. 가급적이면 5 단계 콜 스택을 인쇄하고 싶습니다. Windows에서이 작업을 수행 할 수있는 간단한 API를 제공합니까?콜 스택의 n 레벨 인쇄?

답변

5

이렇게하는 방법에는 여러 가지가 있습니다.

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

이 FramesToCapture 매개 변수, 반환 된 최대 호출 스택의 깊이를 결정

는 간단하고도 가장 신뢰할 수있는 방법은 Win32 API 함수는, 내 의견으로는

How to Log Stack Frames with Windows x64를 참조하십시오.

+0

이것은 기호 정보를 생성하지 않습니다. 어떤 포인터 값을 사용합니까? –

+0

C/C++ 프로그램은 기본적으로 기호 정보를 절대로 포함하지 않습니다. 스택 덤프에 심볼을 추가하는 방법은 다음을 참조하십시오. http://www.drdobbs.com/architecture-and-design/post-mortem-debugging-revisited/227900186 –

8

Microsoft의 DbgHelp 라이브러리가 원하는대로 할 수있는 것처럼 보입니다. 자세한 내용은 MSDN의 StackWalk64 함수 설명서를 참조하십시오. 또한 this CodeProject article이 유용 할 수 있습니다.

0

DbgHelp API의 Stackwalk 및 Stackwalk64 API를 살펴보십시오.

1

디버거 API (dbghelp)에서 해결할 수 있다고 생각합니다.