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 参数以启用调试信息。

Windows C++ 函数堆栈调用情况获取示例

原文地址: https://www.cveoy.top/t/topic/pd4c 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录