mirror of
https://github.com/MaaAssistantArknights/MaaAssistantArknights.git
synced 2026-07-19 18:47:55 +08:00
perf: 空stack trace输出
This commit is contained in:
@@ -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();
|
||||
|
||||
// 初始化符号处理器
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user