Да там кроме этого ничего интересного (I think... стек разве что).
Код: Выделить всё
*************************************************
* (v)_(O_o)_(V) SaGe Engine Log (V)_(o_O)_(v) *
*************************************************
[2019.03.23/6][12:24:39/63] --> << Log created >>
[2019.03.23/6][12:24:39/63] -->Console caller : Enter "Shows all 3D/2D scenes".
[2019.03.23/6][12:24:39/63] -->SaGe Engine version 0.1.2.18812 (Debug) [2019/2/20] (Windows 32 bit)
[2019.03.23/6][12:24:39/65] -->Operating system: Windows 7 Ultimate Service Pack 1 (Version 6.1 Build 7601)
[2019.03.23/6][12:24:39/66] -->OpenGL : GL : Loaded 21/21, 100% from 'OpenGL32.dll'.
[2019.03.23/6][12:24:39/66] -->OpenGL : GLU : Loaded 51/51, 100% from 'GLU32.dll'.
[2019.03.23/6][12:24:39/66] -->OpenAL : Failed to load!
[2019.03.23/6][12:24:39/66] -->OpenAL : Can't load from library: -> OpenAL32.dll
[2019.03.23/6][12:24:39/66] -->Run (Class: Graphical applications, Context: WinAPI, Render: OpenGL)
An unhandled exception occurred at $004B8341:
EAccessViolation: Access violation
$004B8341
$004F97D2
$004F9B35
$764FC4E7
$764FC5E7
$764F4F0E
$764F4F7D
$7780702E
$004F9E13
$004FA309
$004F9269
$004BA85A
$004BAA62
$004B97DB
$0050F2D7
$00510882
$0045E0D1
[2019.03.23/6][12:24:39/87] --> << Log destroyed >>
TSGLeaksDetector : Total 3 leaks.
TSGLeaksDetector : Leaks : (3) -> TSGContextHandler(1) - 1 TSGContextWinAPI(1) - 1 TSGScreen(1) - 1
TSGLeaksDetector : Lines without references (5) --->
TSGDllManager(1) TSGDll[*?](25) TSGTextMultiStream(1) TSGTextLogStream(1) TSGTextConsoleStream(1)
Кстати, я себе с акцесс виолейшном не очень давно такую штуку придумал (ну или как придумал, так много кто делает), которая если не упрощает отладку, то по крайней мере делает внешний вид ошибки чуть приятнее, чем «EAccessViolation: Access violation».
Под Windows можно выставить свой top-level exception filter (SetUnhandledExceptionFilter).
Если исключение не то, что нас интересует (STATUS_ACCESS_VIOLATION) — просто делегируем вызов старому обработчику.
А при STATUS_ACCESS_VIOLATION извлекаем из EXCEPTION_RECORD информацию: адрес, по которому произошло обращение — ExceptionInformation[0], и операцию (чтение/запись/выполнение) — ExceptionInformation[1]. И дальше по обстоятельствам: например, используем их для формирования сообщения об ошибке вида «чтение по неверному адресу XYZ».
Кроме того, из адреса
кода, вызвавшего исключение (RTL обычно называет его просто Address) можно получить модуль (exe или dll), в котором произошла ошибка, как VirtualQuery(Address, info) + GetModuleFIleNameW(info.AllocationBase). Что позволяет вывести уже почти человеческое «qwerty.dll выполнила запись по неверному адресу XYZ».