Отлаживал новую версию своей карты Geobase путём наблюдения за игрой ботов в TDM, по 45 штук в каждой команде.
И заметил, что спустя минут 15-30 игра вылетает с вот таким вот последним прости:
Код:
[0:33:47] !!! Access violation
=====================
$1002F075
$1003F146
$10068F66
$1006919C
$10085951
$10083DD6
$10082D78
$10082F1B
$10071831
$1007434B
$100878EC
$1008E16C
$1002412F
$10069D0D
$004F395D PROCESSMESSAGE, line 188 of g_window.pas
$004F42CD SDLMAIN, line 377 of g_window.pas
$00486566 MAIN, line 576 of g_main.pas
Происходить это начало ещё до всех моих недавних коммитов в игру, так что я здесь точно ни при чём.
Заинтересовавшись, решил погонять игру в отладчике. И мне улыбнулась удача:
Код:
Index Location Line Function
0 :1002EE76 - fmodex:?System_SetDebugMode@FMOD@@YG?AW4FMOD_RESULT@@I@Z+6972
1 :1003F146 - fmodex:?System_SetDebugMode@FMOD@@YG?AW4FMOD_RESULT@@I@Z+73228
2 :10068F66 - fmodex:?getMemoryUsedImpl@DSPI@FMOD@@QAG?AW4FMOD_RESULT@@PAVMemoryTracker@2@@Z+149117
3 :1006919C - fmodex:?getMemoryUsedImpl@DSPI@FMOD@@QAG?AW4FMOD_RESULT@@PAVMemoryTracker@2@@Z+149683
4 :10085951 - fmodex:?System_GetDebugMode@FMOD@@YGIXZ+28419
5 :10083DD6 - fmodex:?System_GetDebugMode@FMOD@@YGIXZ+21384
6 :10082D78 - fmodex:?System_GetDebugMode@FMOD@@YGIXZ+17194
7 :10082F1B - fmodex:?System_GetDebugMode@FMOD@@YGIXZ+17613
8 :10071831 - fmodex:?wakeupThread@AsyncThread@FMOD@@QAG?AW4FMOD_RESULT@@XZ+20398
9 :1007434B - fmodex:?validate@ChannelI@FMOD@@SG?AW4FMOD_RESULT@@PAVChannel@2@PAPAV12@@Z+2252
10 :100878EC - fmodex:?getUserDataInternal@SoundI@FMOD@@QAG?AW4FMOD_RESULT@@PAPAX@Z+4369
11 :1008E16C - fmodex:?getUserDataInternal@SoundI@FMOD@@QAG?AW4FMOD_RESULT@@PAPAX@Z+31121
12 :1002412F - fmodex:?update@System@FMOD@@QAG?AW4FMOD_RESULT@@XZ+29
13 :10069D0D - fmodex:FMOD_System_Update+50
14 e_sound_fmod.inc 726 e_SoundUpdate
15 g_window.pas 182 ProcessMessage
16 g_window.pas 371 PerformExecution
17 g_main.pas 579 Main
18 Doom2DF.lpr 236 $main
19 :00414267 - SYSTEM_$$_EXE_ENTRY$TENTRYINFORMATION+71
20 :00401F6D - _WinMainCRTStartup+45
21 :75F6343D - kernel32:BaseThreadInitThunk+18
22 :77CA9812 - ntdll32:RtlInitializeExceptionChain+99
23 :77CA97E5 - ntdll32:RtlInitializeExceptionChain+54
Номера строк соответствуют коммиту
1f4e9f21, версия FMODex - 4.30.22 (та, что ныне поставляется с игрой; CRC32-сумма DLL-библиотеки - 16299F6D).
Собирал через FPC 3.2.2 из Lazarus 3.0, однако наличие
fmodex:?getUserDataInternal в списке подсказывает, что ошибка всё же где-то у нас.
Возможно, связано с вот этим вот случайным вылетом, так как он тоже произошёл в коде callback'а обёртки:
viewtopic.php?f=38&t=3317#p46671Важное примечание: всё это тестировалось на машине в условиях некоторой нехватки памяти (диспетчер задач отображал занятыми 91% из 16ти гигабайт). Может быть, это тоже повлияло. Но всё равно падать по звуку не должно даже в таком случае. на более новом ноутбуке моего товарища также вылетает аналогичным образом, а памяти у него хватает + включён файл подкачки, так что дело почти наверняка не в этом