Windows C++ 函数堆栈调用情况获取示例
Windows C++ 函数堆栈调用情况获取示例
在 Windows 下,可以使用 Windows API 函数 CaptureStackBackTrace 来获取函数堆栈调用情况。下面是一个简单的示例代码:
#include <Windows.h>
#include <iostream>
void PrintStackTrace(DWORD* stackTrace, int count)
{
SYMBOL_INFO* symbol = (SYMBOL_INFO*)malloc(sizeof(SYMBOL_INFO) + 256 * sizeof(char));
symbol->MaxNameLen = 255;
symbol->SizeOfStruct = sizeof(SYMBOL_INFO);
for (int i = 0; i < count; i++)
{
DWORD64 address = stackTrace[i];
if (SymFromAddr(GetCurrentProcess(), address, 0, symbol))
{
std::cout << symbol->Name << ' (0x' << std::hex << symbol->Address << ')' << std::endl;
}
else
{
std::cout << 'Unknown function' << std::endl;
}
}
free(symbol);
}
void FuncC()
{
DWORD stackTrace[20];
int count = CaptureStackBackTrace(0, 20, stackTrace, NULL);
PrintStackTrace(stackTrace, count);
}
void FuncB()
{
FuncC();
}
void FuncA()
{
FuncB();
}
int main()
{
FuncA();
return 0;
}
上述代码使用了 CaptureStackBackTrace 函数获取堆栈信息,并通过 SymFromAddr 函数将地址转换为函数名。注意,编译时需要添加 -g 参数以启用调试信息。
原文地址: https://www.cveoy.top/t/topic/pd4c 著作权归作者所有。请勿转载和采集!