使用C++开发时,为了理清代码的执行顺序,有时需要将当前执行进度的调用堆栈打印下来。
为了方便使用,提供下面的Demo,打印调用堆栈。
#include <Windows.h>
#include <DbgHelp.h>
#include <iostream>
#pragma comment(lib, "Dbghelp.lib")
void printCallStack();
void Function01();
int main()
{
Function01();
}
void Function01()
{
printCallStack(); // 打印调用堆栈
}
void printCallStack()
{
const int maxFrames = 64;
void* callStack[maxFrames];
USHORT frames = CaptureStackBackTrace(0, maxFrames, callStack, nullptr);
HANDLE process = GetCurrentProcess();
SymInitialize(process, nullptr, TRUE);
DWORD symOptions = SymGetOptions();
symOptions |= SYMOPT_LOAD_LINES | SYMOPT_UNDNAME;
SymSetOptions(symOptions);
STACKFRAME64 stackFrame;
memset(&stackFrame, 0, sizeof(STACKFRAME64));
stackFrame.AddrPC.Mode = AddrModeFlat;
SYMBOL_INFO* symbol = (SYMBOL_INFO*)malloc(sizeof(SYMBO