Цитата:
Сообщение от
Logger
Что больше всего напрягает в этой ситуации - почему сервер накрывается ? Ну отваливался бы рабочий поток с одной сессией пользователя и все, так ведь аос целиком ложится!
Мне кажется, AOS просто не ловит соответствующие исключения, а раз так, то возникают они где-то там, где он не ожидает их словить. Вспоминается, как он валился однажды - при этом в eventlog писалось (виндой, а не самим AOS'ом) следующее:
Код:
Faulting application name: Ax32Serv.exe, version: 5.0.1500.2985, time stamp: 0x4c29d4fc
Faulting module name: Ax32Serv.exe, version: 5.0.1500.2985, time stamp: 0x4c29d4fc
Exception code: 0xc0000005
Fault offset: 0x0000000000650359
Faulting process id: 0x834
Faulting application start time: 0x01cb21cd511ff28c
Что примечательного в этом сообщении? А то, что виртуальный адрес 0x0000000000650359 находится
посреди процессорной инструкции - вблизи него исполняемый код выглядит так:
Код:
.00000000`00650355: 4084FF test dil,dil
.00000000`00650358: 7411 jz .00065036B
.00000000`0065035A: 488903 mov [rbx],rax
.00000000`0065035D: 488B4630 mov rax,[rsi][030]
.00000000`00650361: 483B18 cmp rbx,[rax]
.00000000`00650364: 7517 jnz .00065037D
т.е. по адресу 0x000000000065035
8 начинается двухбайтовая инструкция условного перехода. Если же начать смотреть с адреса 0x0000000000650359, то увидим совсем левый код:
Код:
.00000000`00650359: 114889 adc [rax][-077],ecx
.00000000`0065035C: 03488B add ecx,[rax][-075]
.00000000`0065035F: 4630483B xor [rax][03B],r9b
.00000000`00650363: 187517 sbb [rbp][017],dh
Т.е. управление перешло по левому адресу (так совпало, что в сегмент кода, а могло бы куда угодно). Отсюда вывод: либо у AOS'а разрушился стек, либо он криво инициализировал какие-то структуры в памяти, используемые для передачи управления. При таком раскладе не удивительно, что он валится целиком, а не просто отстреливает одну сессию, как в трешке.