Skip to content

Commit c8a104c

Browse files
Remove stack printing
The stack was inaccurate making it useless
1 parent 6c9a7b2 commit c8a104c

File tree

1 file changed

+0
-75
lines changed

1 file changed

+0
-75
lines changed

src/amulet_faulthandler/faulthandler.cpp

Lines changed: 0 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -6,82 +6,8 @@
66

77
#include <dbghelp.h>
88

9-
#include <memory>
109
#include <string>
1110

12-
// https://stackoverflow.com/questions/22467604/how-can-you-use-capturestackbacktrace-to-capture-the-exception-stack-not-the-ca
13-
14-
const int MaxNameLen = 256;
15-
16-
void dump_stack(EXCEPTION_POINTERS* p)
17-
{
18-
HANDLE process = GetCurrentProcess();
19-
HANDLE thread = GetCurrentThread();
20-
SymInitialize(process, NULL, TRUE);
21-
CONTEXT ctx = *p->ContextRecord;
22-
STACKFRAME64 frame {};
23-
24-
#if defined(_M_AMD64)
25-
frame.AddrPC.Offset = ctx.Rip;
26-
frame.AddrPC.Mode = AddrModeFlat;
27-
frame.AddrStack.Offset = ctx.Rsp;
28-
frame.AddrStack.Mode = AddrModeFlat;
29-
frame.AddrFrame.Offset = ctx.Rbp;
30-
frame.AddrFrame.Mode = AddrModeFlat;
31-
#define MACHINE IMAGE_FILE_MACHINE_AMD64
32-
33-
#elif defined(_M_IX86)
34-
frame.AddrPC.Offset = ctx.Eip;
35-
frame.AddrPC.Mode = AddrModeFlat;
36-
frame.AddrStack.Offset = ctx.Esp;
37-
frame.AddrStack.Mode = AddrModeFlat;
38-
frame.AddrFrame.Offset = ctx.Ebp;
39-
frame.AddrFrame.Mode = AddrModeFlat;
40-
#define MACHINE IMAGE_FILE_MACHINE_I386
41-
42-
#else
43-
#error "Unsupported architecture"
44-
45-
#endif
46-
47-
printf("*** Exception 0x%x occured ***\n", p->ExceptionRecord->ExceptionCode);
48-
49-
while (StackWalk64(
50-
MACHINE, process, thread, &frame, &ctx, NULL, SymFunctionTableAccess64, SymGetModuleBase64, NULL)) {
51-
// get symbol name for address
52-
char symbol_buffer[sizeof(SYMBOL_INFO) + MAX_SYM_NAME * sizeof(TCHAR)];
53-
SYMBOL_INFO* symbol = reinterpret_cast<SYMBOL_INFO*>(symbol_buffer);
54-
symbol->SizeOfStruct = sizeof(SYMBOL_INFO);
55-
symbol->MaxNameLen = MAX_SYM_NAME;
56-
DWORD64 displacement = 0;
57-
if (!SymFromAddr(process, frame.AddrPC.Offset, &displacement, symbol)) {
58-
strcpy_s(symbol->Name, MAX_SYM_NAME, "<unknown>");
59-
}
60-
61-
IMAGEHLP_LINE64 line = { sizeof(IMAGEHLP_LINE64) };
62-
63-
// try to get line
64-
DWORD disp;
65-
if (SymGetLineFromAddr64(process, frame.AddrPC.Offset, &disp, &line)) {
66-
printf("in %s\n\tat %s, line: %lu, address: 0x%llx\n", line.FileName, symbol->Name, line.LineNumber, symbol->Address);
67-
} else {
68-
// failed to get line
69-
HMODULE module_handle = NULL;
70-
char module_name[MaxNameLen] = {};
71-
GetModuleHandleExA(
72-
GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT,
73-
reinterpret_cast<LPCTSTR>(frame.AddrPC.Offset),
74-
&module_handle);
75-
76-
// at least print module name
77-
if (module_handle != NULL)
78-
GetModuleFileNameA(module_handle, module_name, MaxNameLen);
79-
80-
printf("in %s\n\tat %s, address 0x%llx.\n", module_name, symbol->Name, symbol->Address);
81-
}
82-
}
83-
}
84-
8511
static std::wstring _path;
8612
static bool _full_dump = false;
8713

@@ -117,7 +43,6 @@ void dump_process(EXCEPTION_POINTERS* p)
11743
LONG WINAPI CrashHandler(EXCEPTION_POINTERS* p)
11844
{
11945
dump_process(p);
120-
dump_stack(p);
12146
return EXCEPTION_EXECUTE_HANDLER;
12247
}
12348

0 commit comments

Comments
 (0)