mirror of
https://github.com/Kbz-8/Pulse.git
synced 2026-01-10 15:03:34 +00:00
yes
This commit is contained in:
31
Tests/main.c
31
Tests/main.c
@@ -44,17 +44,17 @@
|
||||
LONG WINAPI ExceptionHandler(EXCEPTION_POINTERS* ExceptionInfo)
|
||||
{
|
||||
fprintf(stderr, "Exception occurred!\n");
|
||||
PrintStackTrace();
|
||||
FollowStackTrace();
|
||||
return EXCEPTION_EXECUTE_HANDLER;
|
||||
}
|
||||
|
||||
void PrintStackTrace()
|
||||
void FollowStackTrace()
|
||||
{
|
||||
// Initialize symbols
|
||||
HANDLE process = GetCurrentProcess();
|
||||
SymInitialize(process, NULL, TRUE);
|
||||
|
||||
// Capture stack backtrace
|
||||
SymSetOptions(SYMOPT_LOAD_LINES | SYMOPT_UNDNAME);
|
||||
|
||||
void* stack[62];
|
||||
USHORT frames = CaptureStackBackTrace(0, 62, stack, NULL);
|
||||
|
||||
@@ -62,12 +62,25 @@
|
||||
symbol->MaxNameLen = 255;
|
||||
symbol->SizeOfStruct = sizeof(SYMBOL_INFO);
|
||||
|
||||
for(USHORT i = 0; i < frames; i++)
|
||||
{
|
||||
SymFromAddr(process, (DWORD64)(stack[i]), 0, symbol);
|
||||
fprintf(stderr, "[%d] %s - 0x%0llX\n", i, symbol->Name, symbol->Address);
|
||||
}
|
||||
IMAGEHLP_LINE64 line;
|
||||
DWORD displacement;
|
||||
ZeroMemory(&line, sizeof(IMAGEHLP_LINE64));
|
||||
line.SizeOfStruct = sizeof(IMAGEHLP_LINE64);
|
||||
|
||||
for (USHORT i = 0; i < frames; i++)
|
||||
{
|
||||
DWORD64 address = (DWORD64)(stack[i]);
|
||||
if(SymFromAddr(process, address, 0, symbol))
|
||||
{
|
||||
fprintf(stderr, "[%d] %s - 0x%0llX", i, symbol->Name, symbol->Address);
|
||||
if(SymGetLineFromAddr64(process, address, &displacement, &line))
|
||||
fprintf(stderr, " (%s:%lu)\n", line.FileName, line.LineNumber);
|
||||
else
|
||||
fprintf(stderr, " (no file info)\n");
|
||||
}
|
||||
else
|
||||
fprintf(stderr, "[%d] (unable to resolve symbol)\n", i);
|
||||
}
|
||||
free(symbol);
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -206,6 +206,9 @@ for name, module in pairs(tests) do
|
||||
add_defines("BACKTRACE")
|
||||
elseif is_plat("windows") then
|
||||
add_defines("WINTRACE")
|
||||
add_cflags("/Zi")
|
||||
add_ldflags("/DEBUG")
|
||||
add_links("dbghelp")
|
||||
end
|
||||
target_end()
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user