perf: 空stack trace输出

This commit is contained in:
status102
2025-11-03 12:38:03 +08:00
parent afd732f2b7
commit ca0cb659c1
2 changed files with 14 additions and 14 deletions

View File

@@ -108,21 +108,11 @@ public:
break;
}
result += std::format(" #{:2}: ", frameNum);
// 获取符号信息
DWORD64 displacement = 0;
bool hasSymbol = SymFromAddr(process, frame.AddrPC.Offset, &displacement, symbol);
// 获取行号信息
DWORD lineDisplacement = 0;
bool hasLine = SymGetLineFromAddr64(process, frame.AddrPC.Offset, &lineDisplacement, &line);
// 获取模块信息
IMAGEHLP_MODULE64 moduleInfo = {};
moduleInfo.SizeOfStruct = sizeof(moduleInfo);
bool hasModule = SymGetModuleInfo64(process, frame.AddrPC.Offset, &moduleInfo);
result += std::format(" #{:2}: ", frameNum);
if (hasSymbol) {
result += std::format("{}+0x{:X}", symbol->Name, displacement);
}
@@ -130,10 +120,17 @@ public:
result += "<unknown>";
}
// 获取行号信息
DWORD lineDisplacement = 0;
bool hasLine = SymGetLineFromAddr64(process, frame.AddrPC.Offset, &lineDisplacement, &line);
if (hasLine) {
result += std::format(" at {}:{}", line.FileName, line.LineNumber);
}
// 获取模块信息
IMAGEHLP_MODULE64 moduleInfo = {};
moduleInfo.SizeOfStruct = sizeof(moduleInfo);
bool hasModule = SymGetModuleInfo64(process, frame.AddrPC.Offset, &moduleInfo);
if (hasModule) {
result += std::format(" [{}]", moduleInfo.ModuleName);
}
@@ -154,7 +151,6 @@ public:
static std::string capture_current_stack_trace()
{
std::string result;
HANDLE process = GetCurrentProcess();
// 初始化符号处理器

View File

@@ -923,11 +923,15 @@ private:
logger.error("=== FATAL ERROR ===");
logger.error("Unhandled exception caught:", exception_info);
logger.error("Exception stack trace:");
if (!stack_trace.empty()) {
logger.error("Exception stack trace:");
logger.error(stack_trace);
write_crash_file("Unhandled exception stack trace:", stack_trace.c_str());
}
else {
logger.error("empty");
write_crash_file("empty");
}
logger.error("Program terminating...");
logger.error("===================");
logger.flush();