mirror of
https://github.com/1dot13/source.git
synced 2026-07-29 13:52:17 +02:00
Symbolize crash reports with a first-party tool
Adds tools/symbolize_crash.cpp, built alongside the game as a console exe: it reads a crash_report_*.txt written by writeExceptionBacktrace and prints the backtrace with function names, source lines and inlined frames, in call order, coloured when standard output is a console. Symbols come from DbgHelp against the build's PDB rather than an external symbolizer. SymLoadModuleEx takes the runtime base out of the report's module table, so the relocation arithmetic /DYNAMICBASE forces on us is DbgHelp's problem now; a report predating the module table loads at the image's preferred base, which is where it ran. Verified under Wine: PDB line info and inline traces both resolve. The tool wants C++23 (std::print, std::format) where the game is C++17, so the standard is set on the target alone. Both MSVC 19.51 and clang-cl build it clean in all three configurations. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
committed by
majcosta
co-authored by
Claude Opus 5
parent
58e00e0d66
commit
3794e3a274
@@ -216,7 +216,7 @@ void StackTrace::PrintBacktrace(const char* msg) {
|
||||
// and take the report down with it. So this path is deliberately heap-free: only
|
||||
// stack buffers and raw Win32. It emits runtime addresses plus the module table
|
||||
// needed to make sense of them; symbolize offline against the build's PDB:
|
||||
// llvm-symbolizer --obj=JA2.exe --adjust-vma=$((<JA2.exe base> - 0x400000)) <addr>
|
||||
// symbolize_crash crash_report_001.txt JA2.exe
|
||||
namespace sgp {
|
||||
|
||||
// Stamped into every crash report so a report maps to the exact build's PDB.
|
||||
|
||||
Reference in New Issue
Block a user