|
![]() |
#1 |
Участник
|
Попробуйте отключить выполнение бизнес-логики в CIL и посмотрите, удастся ли снова завалить AOS найденным вами способом. Аналогичный случай был у меня в прошлом году: при определенных обстоятельствах вроде как в штатной ситуации падал AOS AX 2012 R2, при этом удалось выудить вот такой стек вызовов:
Код: Child-SP RetAddr Call Site 00000000`2451d8c8 00000000`77763072 ntdll!NtWaitForSingleObject+0xa 00000000`2451d8d0 00000000`777632b5 ntdll!RtlReportSqmEscalation+0x1162 00000000`2451d9c0 00000000`7776331a ntdll!RtlReportException+0xb5 00000000`2451da40 00000000`77764155 ntdll!RtlReportException+0x11a 00000000`2451da70 00000000`776b85c8 ntdll!RtlUnhandledExceptionFilter+0x325 00000000`2451daa0 00000000`776c9d2d ntdll!_C_specific_handler+0x9c 00000000`2451db10 00000000`776b91cf ntdll!RtlDecodePointer+0xad 00000000`2451db40 00000000`776b97c8 ntdll!RtlUnwindEx+0xbbf 00000000`2451e220 00000000`77764102 ntdll!RtlRaiseException+0x248 00000000`2451ebd0 00000000`77764746 ntdll!RtlUnhandledExceptionFilter+0x2d2 00000000`2451eca0 00000000`77765952 ntdll!EtwEnumerateProcessRegGuids+0x216 00000000`2451ecd0 00000000`77767604 ntdll!RtlQueryProcessLockInformation+0x972 00000000`2451ed00 00000000`7770dc1f ntdll!RtlLogStackBackTrace+0x444 00000000`2451ed30 00000000`774a1a4a ntdll!RtlIsDosDeviceName_U+0x141ff 00000000`2451edb0 00000000`74fe8d94 kernel32!HeapFree+0xa 00000000`2451ede0 00000001`40213110 msvcr100!free+0x1c 00000000`2451ee10 00000001`3ffe5c7e Ax32Serv!CQLFreeVars+0x130 00000000`2451ee60 00000001`3ffe91e3 Ax32Serv!cqlClass::doFree+0x6e 00000000`2451ef40 000007fe`fe4afe85 Ax32Serv!ServerFreeClass+0x163 00000000`2451f010 000007fe`fe4a4d12 rpcrt4!Invoke+0x65 00000000`2451f0a0 000007fe`fe4a16bd rpcrt4!NdrStubCall2+0x32a 00000000`2451f6c0 000007fe`fe4a3134 rpcrt4!NdrServerCall2+0x1d 00000000`2451f6f0 000007fe`fe4a3296 rpcrt4!DispatchToStubInCNoAvrf+0x14 00000000`2451f720 000007fe`fe49bf2e rpcrt4!RPC_INTERFACE::DispatchToStubWorker+0x146 00000000`2451f840 000007fe`fe49bd92 rpcrt4!OSF_SCALL::DispatchHelper+0x15e 00000000`2451f960 000007fe`fe49bd29 rpcrt4!OSF_SCALL::ProcessReceivedPDU+0x36b 00000000`2451f9f0 000007fe`fe49b853 rpcrt4!OSF_SCONNECTION::ProcessReceiveComplete+0x3e9 00000000`2451faa0 000007fe`fd4e85ff rpcrt4!CO_ConnectionThreadPoolCallback+0x123 00000000`2451fb50 00000000`776b097a KERNELBASE!BasepTpIoCallback+0x4b 00000000`2451fb90 00000000`776bff2f ntdll!RtlEqualDomainName+0x38a 00000000`2451fc40 00000000`774959ed ntdll!RtlValidateHeap+0x4af 00000000`2451ff40 00000000`776cc541 kernel32!BaseThreadInitThunk+0xd 00000000`2451ff70 00000000`00000000 ntdll!RtlUserThreadStart+0x21 В моем случае причина падения АОСа была локализована, как ни странно, в не совсем корректной обработке исключений при выполнении кода в CIL. Обработка исключений в CIL имеет определенные особенности, которые исследованы в публикации Exception handling with X++ and .NET Interop. В частности, из моего скромного опыта, следует корректно и аккуратно обрабатывать Exception::CLRError, даже если код явно не взаимодействует с CLR. К сожалению, стандартный код самых что ни на есть базовых классов в этом плане не безупречен. В общем, как минимум, в моем случае причина падения АОСа, естественно, была в ядре - в том, как оно освобождает память при обработке исключений в CIL, но проблему удалось обойти за счет более аккуратного написания кода X++. |
|
|
За это сообщение автора поблагодарили: Logger (3), jonny (4). |
![]() |
#2 |
Участник
|
Спасибо за ответ.
Галочку Выполнение бизнес логики в CIL снял, не помогло, с 6-го повторения AOS упал. Я не могу понять, как вообще может быть связаны манипуляции в форме заказа на продажу с падением при старте клиента. А как вам удалось локализовать проблему в вашем случае? |
|
![]() |
#3 |
Участник
|
gl00mie, что-то уж очень похож Ваш стек на мой. проблема та же - падает АОС и не пойму из-за чего. С помощью статей Tariq не смог ничего подчерпнуть. Если помните, подскажите плиз где конкретно и что мне посмотреть, чтобы убедиться, что у меня не та же самая проблема? И если это она, что исправить. Заранее очень благодарен!
мой стек: Код: # Child-SP RetAddr Call Site 00 00000004`931ac908 000007fe`fd8a1430 ntdll!NtWaitForMultipleObjects+0xa 01 00000004`931ac910 00000000`77911753 KERNELBASE!WaitForMultipleObjectsEx+0xe8 02 00000004`931aca10 00000000`7798b635 kernel32!WaitForMultipleObjectsExImplementation+0xb3 03 00000004`931acaa0 00000000`7798b7b7 kernel32!WerpReportFaultInternal+0x215 04 00000004`931acb40 00000000`7798b80f kernel32!WerpReportFault+0x77 05 00000004`931acb70 00000000`7798ba2c kernel32!BasepReportFault+0x1f 06 00000004`931acba0 00000000`77acfe45 kernel32!UnhandledExceptionFilter+0x1fc 07 00000004`931acc80 00000000`77ad0225 ntdll!TppExceptionFilter+0xa5 08 00000004`931acce0 00000000`77a9a2cf ntdll!TppWorkerpInnerExceptionFilter+0x15 09 00000004`931acd10 00000000`77a28008 ntdll! ?? ::FNODOBFM::`string'+0x25a0 0a 00000004`931acd50 00000000`77a98419 ntdll!_C_specific_handler+0x8c 0b 00000004`931acdc0 00000000`77a3905d ntdll!_GSHandlerCheck_SEH+0x75 0c 00000004`931acdf0 00000000`77a28c0f ntdll!RtlpExecuteHandlerForException+0xd 0d 00000004`931ace20 00000000`77a5d948 ntdll!RtlDispatchException+0x45a 0e 00000004`931ad500 00000001`4059412a ntdll!KiUserExceptionDispatcher+0x2e 0f 00000004`931adac0 00000001`40594618 Ax32Serv!SqlData::cvtField+0x1ea 10 00000004`931adba0 00000001`4030092f Ax32Serv!SqlData::cvtRecord+0x458 11 00000004`931adc60 00000001`40300e92 Ax32Serv!SqlStmt::GetFetchedDataContents+0x67f 12 00000004`931ae5d0 00000001`40300fad Ax32Serv!SqlStmt::next+0x382 13 00000004`931ae670 00000001`404ef6d4 Ax32Serv!SqlStmtTimed::next+0x4d 14 00000004`931ae6a0 00000001`4027bc25 Ax32Serv!cqlDatasourceSql::fetchrec+0x384 15 00000004`931ae710 00000001`4027e745 Ax32Serv!cqlCursor::__next+0x605 16 00000004`931ae8f0 00000001`4027f18c Ax32Serv!cqlCursor::_next+0x2805 17 00000004`931aebc0 000007fe`ff57f4a5 Ax32Serv!ServerNext+0x45c 18 00000004`931aed40 000007fe`ff574502 rpcrt4!Invoke+0x65 19 00000004`931aee00 000007fe`ff570e7d rpcrt4!NdrStubCall2+0x32a 1a 00000004`931af420 000007fe`ff572924 rpcrt4!NdrServerCall2+0x1d 1b 00000004`931af450 000007fe`ff572a86 rpcrt4!DispatchToStubInCNoAvrf+0x14 1c 00000004`931af480 000007fe`ff56b6ee rpcrt4!RPC_INTERFACE::DispatchToStubWorker+0x146 1d 00000004`931af5a0 000007fe`ff56b552 rpcrt4!OSF_SCALL::DispatchHelper+0x15e 1e 00000004`931af6c0 000007fe`ff56b4e9 rpcrt4!OSF_SCALL::ProcessReceivedPDU+0x36b 1f 00000004`931af750 000007fe`ff56b013 rpcrt4!OSF_SCONNECTION::ProcessReceiveComplete+0x3e9 20 00000004`931af800 000007fe`fd8a8c6f rpcrt4!CO_ConnectionThreadPoolCallback+0x123 21 00000004`931af8b0 00000000`77a206ea KERNELBASE!BasepTpIoCallback+0x4b 22 00000004`931af8f0 00000000`77a2f7af ntdll!TppIopExecuteCallback+0x1ff 23 00000004`931af9a0 00000000`77905a4d ntdll!TppWorkerThread+0x3f8 24 00000004`931afca0 00000000`77a3b831 kernel32!BaseThreadInitThunk+0xd 25 00000004`931afcd0 00000000`00000000 ntdll!RtlUserThreadStart+0x1d Последний раз редактировалось igortsk; 06.05.2016 в 11:30. |
|
![]() |
#4 |
Модератор
|
igortsk, MS попросить посмотреть почему не хотите ?
__________________
-ТСЯ или -ТЬСЯ ? Последний раз редактировалось Vadik; 06.05.2016 в 10:30. |
|
![]() |
#5 |
Участник
|
потому что подписка закончилась на AX, а там похоже нужна подписка
|
|
![]() |
#6 |
Участник
|
Цитата:
Код: Child-SP RetAddr Call Site 00000000`2451edb0 00000000`74fe8d94 kernel32!HeapFree+0xa 00000000`2451ede0 00000001`40213110 msvcr100!free+0x1c 00000000`2451ee10 00000001`3ffe5c7e Ax32Serv!CQLFreeVars+0x130 00000000`2451ee60 00000001`3ffe91e3 Ax32Serv!cqlClass::doFree+0x6e 00000000`2451ef40 000007fe`fe4afe85 Ax32Serv!ServerFreeClass+0x163 Код: Child-SP RetAddr Call Site 00000004`931adac0 00000001`40594618 Ax32Serv!SqlData::cvtField+0x1ea 00000004`931adba0 00000001`4030092f Ax32Serv!SqlData::cvtRecord+0x458 00000004`931adc60 00000001`40300e92 Ax32Serv!SqlStmt::GetFetchedDataContents+0x67f 00000004`931ae5d0 00000001`40300fad Ax32Serv!SqlStmt::next+0x382 00000004`931ae670 00000001`404ef6d4 Ax32Serv!SqlStmtTimed::next+0x4d 00000004`931ae6a0 00000001`4027bc25 Ax32Serv!cqlDatasourceSql::fetchrec+0x384 00000004`931ae710 00000001`4027e745 Ax32Serv!cqlCursor::__next+0x605 00000004`931ae8f0 00000001`4027f18c Ax32Serv!cqlCursor::_next+0x2805 00000004`931aebc0 000007fe`ff57f4a5 Ax32Serv!ServerNext+0x45c Последний раз редактировалось gl00mie; 07.05.2016 в 10:13. |
|
![]() |
#7 |
Участник
|
возможно ли, что это мы что-то на*бокодили? Но мы в ядро не лезем конечно..
|
|
![]() |
#8 |
Участник
|
![]()
Добрый день.
Подскажите, пожалуйста, как для Ax 2012 R3 x64 смещения узнать, которые добавлять к адресу в дампе памяти. Пробовал указанные для Ax 2009 x64 не выходит (https://blogs.msdn.microsoft.com/eme...aused-a-crash/). Еще в статье почему-то в описании алгоритма указываются одни числа для ax 2009 x64, а в примере другие. ![]() |
|
![]() |
#9 |
Участник
|
Цитата:
|
|
|
За это сообщение автора поблагодарили: Logger (5), vmokerov (1). |
![]() |
#10 |
Участник
|
Спасибо
Цитата:
Сообщение от gl00mie
![]() Попробуйте рецепты из axsa: Finding the X++ stack and AX user with public symbols in AX2012
Класс вычислил, правда метод возвращает только ????????? Падения удалось устранить очисткой SysLastValue, видимо что-то не предусмотрели при кастомизации. |
|
|
За это сообщение автора поблагодарили: Ivanhoe (1). |
![]() |
#11 |
Участник
|
Цитата:
Как правильнее делать обработку исключений CLR чтобы свести к минимуму такие риски ? |
|
Теги |
.net, aoc, ax2012, crash, crash and hang analysis, crash dump, debug symbols, dump analisys, exception, lcs, stack trace, symbols, tariq bell |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|