MCPcopy Create free account
hub / github.com/The-Powder-Toy/The-Powder-Toy / StackTrace

Function StackTrace

src/common/platform/stacktrace/Windows.cpp:50–136  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

48}
49
50std::optional<std::vector<String>> StackTrace()
51{
52 static std::mutex mx;
53 std::unique_lock lk(mx);
54 auto process = GetCurrentProcess();
55 auto thread = GetCurrentThread();
56
57 Defer symCleanup([process]() {
58 SymCleanup(process);
59 });
60 SymInitialize(process, nullptr, TRUE);
61
62 CONTEXT context{};
63 context.ContextFlags = CONTEXT_FULL;
64 RtlCaptureContext(&context);
65
66 STACKFRAME64 frame{};
67 DWORD machine;
68#if defined(_M_IX86)
69 machine = IMAGE_FILE_MACHINE_I386;
70 frame.AddrPC.Offset = context.Eip;
71 frame.AddrPC.Mode = AddrModeFlat;
72 frame.AddrFrame.Offset = context.Ebp;
73 frame.AddrFrame.Mode = AddrModeFlat;
74 frame.AddrStack.Offset = context.Esp;
75 frame.AddrStack.Mode = AddrModeFlat;
76#elif defined(_M_X64)
77 machine = IMAGE_FILE_MACHINE_AMD64;
78 frame.AddrPC.Offset = context.Rip;
79 frame.AddrPC.Mode = AddrModeFlat;
80 frame.AddrFrame.Offset = context.Rsp;
81 frame.AddrFrame.Mode = AddrModeFlat;
82 frame.AddrStack.Offset = context.Rsp;
83 frame.AddrStack.Mode = AddrModeFlat;
84#elif defined(_M_IA64)
85 machine = IMAGE_FILE_MACHINE_IA64;
86 frame.AddrPC.Offset = context.StIIP;
87 frame.AddrPC.Mode = AddrModeFlat;
88 frame.AddrFrame.Offset = context.IntSp;
89 frame.AddrFrame.Mode = AddrModeFlat;
90 frame.AddrBStore.Offset = context.RsBSP;
91 frame.AddrBStore.Mode = AddrModeFlat;
92 frame.AddrStack.Offset = context.IntSp;
93 frame.AddrStack.Mode = AddrModeFlat;
94#elif defined(_M_ARM64)
95 machine = IMAGE_FILE_MACHINE_ARM64;
96 frame.AddrPC.Offset = context.Pc;
97 frame.AddrPC.Mode = AddrModeFlat;
98 frame.AddrFrame.Offset = context.Fp;
99 frame.AddrFrame.Mode = AddrModeFlat;
100 frame.AddrStack.Offset = context.Sp;
101 frame.AddrStack.Mode = AddrModeFlat;
102#else
103 return std::nullopt;
104#endif
105
106 std::vector<String> res;
107 for (auto i = 0; i < 100; ++i)

Callers

nothing calls this directly

Calls 4

HexFunction · 0.85
GetModuleInfoFunction · 0.85
GetSymbolInfoFunction · 0.85
BuildMethod · 0.60

Tested by

no test coverage detected