- 164
- 2,887
SA-MP Crash Reporter
Информативный отчёт о крашах GTA San Andreas / SA-MP
Описание
SA-MP Crash Reporter перехватывает необработанные краши игры и создаёт подробный отчёт с информацией о модуле, типе ошибки, регистрах, стеке, загруженных DLL/ASI и состоянии Lua/CLEO-скриптов.
Основные возможности
- Определение типа исключения Windows.
- Определение DLL-модуля и смещения ошибки.
- Определение типа обращения к памяти: чтение, запись или выполнение.
- Вывод регистров процессора и проверенного стека.
- Список загруженных DLL и ASI.
- Аудит файлов сборки: Lua, CLEO, ASI, DLL, DFF, TXD, COL и IMG.
- Проверка базовых заголовков файлов.
- SHA-256 для сравнения изменённых файлов.
- Чтение последних строк cleo.log и MoonLoader/moonloader.log.
- Runtime-состояние последнего активного Lua/CLEO-скрипта.
Содержимое архива
- SampCrashReporter.asi — вариант для ASI Loader.
- SampCrashReporter.dll — вариант для DLL-загрузчика.
- MoonLoader/CrashReporterBridge.lua — мост для MoonLoader.
- CLEO/CrashReporterBridge.txt — протокол маркеров для CLEO.
- README.md — подробная документация.
Установка
- Скопируйте SampCrashReporter.asi и SampCrashReporter.dll в папку с gta_sa.exe.
- Запустите игру и дождитесь краша или обычной работы сборки.
- После краша найдите отчёты в корне игровой папки.
Для MoonLoader
Скопируйте файл:
Код:
MoonLoader/CrashReporterBridge.lua
в:
Код:
MoonLoader/lib/CrashReporterBridge.lua
Для CLEO
Используйте протокол записи маркеров из файла:
Код:
CLEO/CrashReporterBridge.txt
Создаваемые отчёты
samp_crash_report.txt
Содержит:
- Cause — код и тип исключения.
- Assessment — эвристическая подсказка по проблемному модулю.
- Fault address — адрес инструкции, на которой произошёл краш.
- Module — DLL, содержащая адрес ошибки.
- Offset — смещение ошибки относительно базы модуля.
- Access type — чтение, запись или выполнение.
- Target — адрес памяти, к которому обращалась программа.
- Registers — значения регистров процессора.
- Stack — содержимое проверенного стека.
- Loaded modules — список загруженных DLL/ASI.
- Runtime bridge state — последний известный Lua/CLEO-маркер.
samp_build_audit.txt
Таблица аудита файлов:
Код:
Kind Path SizeBytes Status Header SHA256
Статусы:
- PRESENT — файл найден.
- EMPTY — файл пустой.
- TOO_SMALL — файл слишком маленького размера.
- BAD_PE — повреждённый PE-заголовок DLL/ASI.
- BAD_RW — подозрительный заголовок DFF/TXD.
- BAD_COL — подозрительный заголовок COL.
- BAD_IMG — подозрительный заголовок IMG.
- UNREADABLE — файл невозможно прочитать.
- HASH_FAILED — не удалось вычислить SHA-256.
samp_runtime_state.txt
Содержит последнее состояние runtime-моста:
Код:
kind=event
script=my_script.lua
line=42
message=loading model 411
time=2026-08-19T00:00:00Z
Пример использования MoonLoader bridge
Код:
local bridge = require('CrashReporterBridge')
bridge.mark('my_script.lua', 42, 'loading model 411')
local safe_call = bridge.wrap(function()
-- код, который требуется отслеживать
end, 'my_script.lua')
safe_call()
Функции
- bridge.mark(script, line, message) — записывает активный скрипт, строку и описание операции.
- bridge.wrap(function, script) — выполняет функцию через xpcall и записывает traceback при Lua-ошибке.
Ограничения
- Отчёт не может гарантированно назвать виновный файл только по адресу краша.
- Для точного определения активного CLEO-скрипта нужен маркер перед подозрительной операцией.
- IMG-файлы проверяются как контейнеры и не распаковываются.
- Наличие повреждённого файла не доказывает, что именно он вызвал краш.
- SHA-256 используется для сравнения файлов между сборками.
- Для глубокого анализа редких крашей рекомендуется использовать минидамп и WinDbg или Visual Studio.
Совместимость
- GTA San Andreas 1.0 US.
- SA-MP 0.3.7.
- 32-битные ASI/DLL-загрузчики.
- MoonLoader и CLEO — через runtime-мост.