打印崩溃调用栈和局部变量信息的方法有所不同。以下是针对 Windows、Linux 和 MacOS 的示例代码。
Windows
在 Windows 上,可以使用 Windows API 来捕获异常并打印调用栈。
#include <windows.h>
#include <DbgHelp.h>
#include <stdio.h>
#include <stdlib.h>
#pragma comment(lib, "dbghelp.lib")
void print_stack_trace() {
const int FRAMES_TO_CAPTURE = 64;
IMAGEHLP_STACK_FRAME frames[FRAMES_TO_CAPTURE];
STACKFRAME64 stack;
DWORD machine_type;
HANDLE process = GetCurrentProcess();
DWORD i;
SYMBOL_INFOW* symbol_info;
DWORD64 displacement;
SymInitialize(process, NULL, TRUE);
SymSetOptions(SYMOPT_UNDNAME | SYMOPT_LOAD_LINES);
ZeroMemory(&stack, sizeof(stack));
stack.AddrPC.Offset = (DWORD_PTR)__debugbreak;
stack.AddrPC.Mode = AddrModeFlat;
stack.AddrFrame.Offset = (DWORD_PTR)__security_check_cookie;
stack.AddrFrame.Mode = AddrModeFlat;
stack.AddrStack.Offset = (DWORD_PTR)&stack;
stack.AddrStack.Mode = A