mirror of
https://github.com/goatcorp/Dalamud.git
synced 2025-12-12 10:17:22 +01:00
Clean up crash handler window log for external events
This commit is contained in:
parent
446c7e3877
commit
e032840ac8
3 changed files with 25 additions and 5 deletions
|
|
@ -6,6 +6,8 @@
|
||||||
#define WIN32_LEAN_AND_MEAN
|
#define WIN32_LEAN_AND_MEAN
|
||||||
#include <Windows.h>
|
#include <Windows.h>
|
||||||
|
|
||||||
|
#define CUSTOM_EXCEPTION_EXTERNAL_EVENT 0x12345679
|
||||||
|
|
||||||
struct exception_info
|
struct exception_info
|
||||||
{
|
{
|
||||||
LPEXCEPTION_POINTERS pExceptionPointers;
|
LPEXCEPTION_POINTERS pExceptionPointers;
|
||||||
|
|
|
||||||
|
|
@ -11,8 +11,6 @@
|
||||||
#include "crashhandler_shared.h"
|
#include "crashhandler_shared.h"
|
||||||
#include "DalamudStartInfo.h"
|
#include "DalamudStartInfo.h"
|
||||||
|
|
||||||
#define CUSTOM_EXCEPTION_EXTERNAL_EVENT 0x12345679
|
|
||||||
|
|
||||||
#pragma comment(lib, "comctl32.lib")
|
#pragma comment(lib, "comctl32.lib")
|
||||||
|
|
||||||
#if defined _M_IX86
|
#if defined _M_IX86
|
||||||
|
|
|
||||||
|
|
@ -938,9 +938,19 @@ int main() {
|
||||||
} while (false);
|
} while (false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const bool is_external_event = exinfo.ExceptionRecord.ExceptionCode == CUSTOM_EXCEPTION_EXTERNAL_EVENT;
|
||||||
|
|
||||||
std::wostringstream log;
|
std::wostringstream log;
|
||||||
|
|
||||||
|
if (!is_external_event)
|
||||||
|
{
|
||||||
log << std::format(L"Unhandled native exception occurred at {}", to_address_string(exinfo.ContextRecord.Rip, false)) << std::endl;
|
log << std::format(L"Unhandled native exception occurred at {}", to_address_string(exinfo.ContextRecord.Rip, false)) << std::endl;
|
||||||
log << std::format(L"Code: {:X}", exinfo.ExceptionRecord.ExceptionCode) << std::endl;
|
log << std::format(L"Code: {:X}", exinfo.ExceptionRecord.ExceptionCode) << std::endl;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
log << L"CLR error occurred" << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
if (shutup)
|
if (shutup)
|
||||||
log << L"======= Crash handler was globally muted(shutdown?) =======" << std::endl;
|
log << L"======= Crash handler was globally muted(shutdown?) =======" << std::endl;
|
||||||
|
|
@ -957,9 +967,19 @@ int main() {
|
||||||
if (pProgressDialog)
|
if (pProgressDialog)
|
||||||
pProgressDialog->SetLine(3, L"Refreshing Module List", FALSE, NULL);
|
pProgressDialog->SetLine(3, L"Refreshing Module List", FALSE, NULL);
|
||||||
|
|
||||||
|
std::wstring window_log_str;
|
||||||
|
|
||||||
|
// Cut the log here for external events, the rest is unreadable and doesn't matter since we can't get
|
||||||
|
// symbols for mixed-mode stacks yet.
|
||||||
|
if (is_external_event)
|
||||||
|
window_log_str = log.str();
|
||||||
|
|
||||||
SymRefreshModuleList(GetCurrentProcess());
|
SymRefreshModuleList(GetCurrentProcess());
|
||||||
print_exception_info(exinfo.hThreadHandle, exinfo.ExceptionPointers, exinfo.ContextRecord, log);
|
print_exception_info(exinfo.hThreadHandle, exinfo.ExceptionPointers, exinfo.ContextRecord, log);
|
||||||
const auto window_log_str = log.str();
|
|
||||||
|
if (!is_external_event)
|
||||||
|
window_log_str = log.str();
|
||||||
|
|
||||||
print_exception_info_extended(exinfo.ExceptionPointers, exinfo.ContextRecord, log);
|
print_exception_info_extended(exinfo.ExceptionPointers, exinfo.ContextRecord, log);
|
||||||
std::wofstream(logPath) << log.str();
|
std::wofstream(logPath) << log.str();
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue