From c686fde0ec017b1372b6bdc5c7f87b694b244df3 Mon Sep 17 00:00:00 2001 From: Quentin Date: Fri, 21 Jul 2023 16:00:01 +0200 Subject: [PATCH] feat(debug): log msvc c++ exception properly. (#1790) --- src/logger/stack_trace.cpp | 13 ++++++++++++- src/logger/stack_trace.hpp | 1 + 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/logger/stack_trace.cpp b/src/logger/stack_trace.cpp index ad6ac286..4650eaf4 100644 --- a/src/logger/stack_trace.cpp +++ b/src/logger/stack_trace.cpp @@ -38,6 +38,7 @@ namespace big dump_module_info(); dump_registers(); dump_stacktrace(); + dump_cpp_exception(); m_dump << "\n--------End of exception--------\n"; } @@ -155,6 +156,16 @@ namespace big << m_exception_info->ContextRecord->Rdi - m_exception_info->ContextRecord->Rsi << '\n'; } + void stack_trace::dump_cpp_exception() + { + constexpr DWORD msvc_exception_code = 0xe06d7363; + if (m_exception_info->ExceptionRecord->ExceptionCode == msvc_exception_code) + { + m_dump + << reinterpret_cast(m_exception_info->ExceptionRecord->ExceptionInformation[1])->what() << '\n'; + } + } + void stack_trace::grab_stacktrace() { CONTEXT context = *m_exception_info->ContextRecord; @@ -200,6 +211,6 @@ namespace big if (const auto& it = exceptions.find(code); it != exceptions.end()) return it->second; - return "UNKNOWN_EXCEPTION"; + return "UNKNOWN_EXCEPTION: CODE: " + std::to_string(code); } } diff --git a/src/logger/stack_trace.hpp b/src/logger/stack_trace.hpp index fe5c712d..862d6726 100644 --- a/src/logger/stack_trace.hpp +++ b/src/logger/stack_trace.hpp @@ -39,6 +39,7 @@ namespace big void dump_registers(); void dump_stacktrace(); void dump_script_info(); + void dump_cpp_exception(); void grab_stacktrace(); const module_info* get_module_by_address(uint64_t addr) const;