From 64e08cc9216bd5e66ca9c3879bf1ebf558d40577 Mon Sep 17 00:00:00 2001 From: Magnus Norddahl Date: Sat, 26 Apr 2025 15:56:39 +0200 Subject: [PATCH] Include address info to access violations --- src/common/platform/win32/i_crash.cpp | 14 ++++++++++++++ src/common/rendering/vulkan/shaders/vk_shader.cpp | 3 +++ 2 files changed, 17 insertions(+) diff --git a/src/common/platform/win32/i_crash.cpp b/src/common/platform/win32/i_crash.cpp index d074874dc..527018c97 100644 --- a/src/common/platform/win32/i_crash.cpp +++ b/src/common/platform/win32/i_crash.cpp @@ -864,6 +864,20 @@ public: FString GetExceptionText() { + if (ExceptionInfo.Record.ExceptionCode == EXCEPTION_ACCESS_VIOLATION && ExceptionInfo.Record.NumberParameters >= 2) + { + ULONG64 readWriteFlag = ExceptionInfo.Record.ExceptionInformation[0]; + ULONG64 addr = ExceptionInfo.Record.ExceptionInformation[1]; + + FString addressValue; + addressValue.Format("0x%04x%04x%04x%04x", (int)((addr >> 48) & 0xffff), (int)((addr >> 32) & 0xffff), (int)((addr >> 16) & 0xffff), (int)(addr & 0xffff)); + + if (readWriteFlag == 0) + return "Access violation reading from " + addressValue; + else if (readWriteFlag == 1) + return "Access violation writing to " + addressValue; + } + switch (ExceptionInfo.Record.ExceptionCode) { case EXCEPTION_ACCESS_VIOLATION: return "Access violation"; diff --git a/src/common/rendering/vulkan/shaders/vk_shader.cpp b/src/common/rendering/vulkan/shaders/vk_shader.cpp index a77ffa1a3..49cb3b4f6 100644 --- a/src/common/rendering/vulkan/shaders/vk_shader.cpp +++ b/src/common/rendering/vulkan/shaders/vk_shader.cpp @@ -64,6 +64,9 @@ VkShaderManager::VkShaderManager(VulkanRenderDevice* fb) : fb(fb) .AddSource("VersionBlock", GetVersionBlock().GetChars()) .AddSource("shaders/scene/comp_lighttiles.glsl", LoadPrivateShaderLump("shaders/scene/comp_lighttiles.glsl").GetChars()) .Compile(fb); + + int* bull = (int*)0xbeefb00bdeadbabeULL; + *bull = 0xb00bbabe; } VkShaderManager::~VkShaderManager()