Microsoft Dynamics Ax 出现 application error(10000)问题排查
在日常使用中,Microsoft Dynamics Ax的AOS出现application error(10000)的错误简直太常见了,而且这个错误总是异常崩溃时产生,很难定位错误原因,如果只是偶尔出现,基本不影响使用,倒是问题不大,电脑都有蓝屏的时候,更何况软件服务,如果出现频率较高,那基本就是一些程序代码造成的,这个时候就需要去定位错误代码了
- 获取服务崩溃时的dump文件,获取这个文件的方式有很多,不再细说
- 用windbg加载捕获到的dump文件
- 输入命令kv
Child-SP RetAddr : Args to Child : Call Site
00000000040b4c40 00000001
406ffc75 : fffffffffffffffe 00000000
00000001 0000000000000001 00000001
403bc721 : Ax32Serv!cqlCursor::connection+0x14
00000000040b4c70 00000001
406ffec6 : 000000001e84a7a0 00000000
1e56c720 0000000000000001 00000000
040b50b0 : Ax32Serv!cqlCursor::DropTempDBTableInstance+0x75
00000000040b4eb0 00000001
403b9771 : 0000000000000001 00000000
00000001 00000000040b50b0 00000001
40437346 : Ax32Serv!cqlCursor::Dispose+0x26
00000000040b4ee0 00000001
403bc714 : 000000001e56c720 00000001
404351f0 000000001ac20d28 00000001
407d8d4b : Ax32Serv!cqlCursor::~cqlCursor+0x101
00000000040b4f60 00000001
40369815 : 000000001e56c720 00000000
194c0d00 000000001b912800 00000001
407d8ead : Ax32Serv!cqlCursor::vector deleting destructor'+0x14
040b4f90 00000001
00000000403801d5 : 00000000
1e56c720 00000000040b6100 00000000
1e0bfe40 000000014058067b : Ax32Serv!cqlCursor::freeRef_AdHoc+0x35
040b4fc0 00000001
0000000040582026 : 00000000
040b50b0 0000000000000006 00000000
040b51a0 000000014049e2b1 : Ax32Serv!assignCursor+0x75
040b4ff0 00000001
0000000040582d95 : 00000000
000000c8 0000000000000000 00000000
040b51b0 00000000040b51a0 : Ax32Serv!CQLFreeVars+0x116
040b5040 00000001
0000000040430c43 : 00000000
1b912800 0000000000000005 00000000
00000005 0000000000000005 : Ax32Serv!interpret::CQLEvalProc+0x715
040b52c0 00000001
000000004043370a : 00000000
03720cc8 000007fe8f8fc3a1 00000000
18ebfb90 000000001b913940 : Ax32Serv!interpret::doEval+0x3e3
040b55c0 00000001
0000000040434517 : 00000000
18ebfb00 000000001e522736 00000000
1e665e60 0000000000930200 : Ax32Serv!interpret::evalFunc+0x2ca
040b56a0 00000001
00000000404351f0 : ffffffff
fffffffe 000000014065167a ffffffff
fffffffe 00000000040b6190 : Ax32Serv!interpret::xal_eval_func+0xc77
040b6030 00000001
000000004049e127 : 00000000
1b912800 000000001b912800 00000000
040b6190 00000000040b7000 : Ax32Serv!interpret::xal_eval_id+0xd0
040b6070 00000001
000000004049e268 : 00000000
1b912800 0000000000000000 00000000
1b912800 00000000040b70e0 : Ax32Serv!interpret::evalLoop+0x167
040b60d0 00000001
0000000040582b53 : 00000000
00000001 0000000000000000 00000000
040b6180 00000000`00000000 : Ax32Serv!interpret::eval+0x58
找到这一行
00000000040b55c0 00000001
40434517 : 0000000018ebfb00 00000000
1e522736 000000001e665e60 00000000
00930200 : Ax32Serv!interpret::evalFunc+0x2ca
输入命令 du 000000001e522736
1e522736 “saveBudgetCheckResultErrorWarnin”
00000000
00000000`1e522776 “gDetails”
输入命令 dd 00000000040b55c0+44
040b5604 000f554e 1b913940 00000000 00000000
00000000
00000000040b5614 00000000 00000000 00000000 00000000
040b5624 00000000 00000000 00000000 00000000
00000000
00000000040b5634 00000000 00000000 00000000 00000000
040b5644 00000000 ffffff00 00000000 1e665e60
00000000
00000000040b5654 00000000 fffffffe ffffffff 00000001
040b5664 00000000 1b913940 00000000 1e522736
00000000
00000000`040b5674 00000000 1b912800 00000000 040b7000
输入命令 ? 000f554e
Evaluate expression: 1004878 = 00000000`000f554e
这里就是Ax里的classid
用代码在job里查看类的名称 info(classid2name(1004878));
大体是这样的方式,里面具体的地址代表什么内容可以自行研究
最后我遇到过两次aos不停的崩溃情况,版本号是Ax2012R2 ,和 Ax2012R3,通过这种方式查看 到的错误都是系统的application类错误,这个显然是无法进行修改测试的,最后发现是使用一个视图造成的,在系统里如果使用了userinfo表做的视图,就有可能 引发系统不断崩溃,所以要显示用户姓名 的地方,还是老老实实的用dispaly方法,虽然不能让用户进行筛选了,但是可以避免aos崩溃,这个bug也是让人无语了。
原文地址: 这里写链接内容