admin管理员组

文章数量:1516870

Microsoft Dynamics Ax 出现 application error(10000)问题排查

在日常使用中,Microsoft Dynamics Ax的AOS出现application error(10000)的错误简直太常见了,而且这个错误总是异常崩溃时产生,很难定位错误原因,如果只是偶尔出现,基本不影响使用,倒是问题不大,电脑都有蓝屏的时候,更何况软件服务,如果出现频率较高,那基本就是一些程序代码造成的,这个时候就需要去定位错误代码了

  1. 获取服务崩溃时的dump文件,获取这个文件的方式有很多,不再细说
  2. 用windbg加载捕获到的dump文件
  3. 输入命令kv

Child-SP RetAddr : Args to Child : Call Site
00000000 040b4c40 00000001 406ffc75 : ffffffff fffffffe 00000000 00000001 00000000 00000001 00000001 403bc721 : Ax32Serv!cqlCursor::connection+0x14
00000000 040b4c70 00000001 406ffec6 : 00000000 1e84a7a0 00000000 1e56c720 00000000 00000001 00000000 040b50b0 : Ax32Serv!cqlCursor::DropTempDBTableInstance+0x75
00000000 040b4eb0 00000001 403b9771 : 00000000 00000001 00000000 00000001 00000000 040b50b0 00000001 40437346 : Ax32Serv!cqlCursor::Dispose+0x26
00000000 040b4ee0 00000001 403bc714 : 00000000 1e56c720 00000001 404351f0 00000000 1ac20d28 00000001 407d8d4b : Ax32Serv!cqlCursor::~cqlCursor+0x101
00000000 040b4f60 00000001 40369815 : 00000000 1e56c720 00000000 194c0d00 00000000 1b912800 00000001 407d8ead : Ax32Serv!cqlCursor:: vector deleting destructor'+0x14
00000000
040b4f90 00000001 403801d5 : 00000000 1e56c720 00000000 040b6100 00000000 1e0bfe40 00000001 4058067b : Ax32Serv!cqlCursor::freeRef_AdHoc+0x35
00000000
040b4fc0 00000001 40582026 : 00000000 040b50b0 00000000 00000006 00000000 040b51a0 00000001 4049e2b1 : Ax32Serv!assignCursor+0x75
00000000
040b4ff0 00000001 40582d95 : 00000000 000000c8 00000000 00000000 00000000 040b51b0 00000000 040b51a0 : Ax32Serv!CQLFreeVars+0x116
00000000
040b5040 00000001 40430c43 : 00000000 1b912800 00000000 00000005 00000000 00000005 00000000 00000005 : Ax32Serv!interpret::CQLEvalProc+0x715
00000000
040b52c0 00000001 4043370a : 00000000 03720cc8 000007fe 8f8fc3a1 00000000 18ebfb90 00000000 1b913940 : Ax32Serv!interpret::doEval+0x3e3
00000000
040b55c0 00000001 40434517 : 00000000 18ebfb00 00000000 1e522736 00000000 1e665e60 00000000 00930200 : Ax32Serv!interpret::evalFunc+0x2ca
00000000
040b56a0 00000001 404351f0 : ffffffff fffffffe 00000001 4065167a ffffffff fffffffe 00000000 040b6190 : Ax32Serv!interpret::xal_eval_func+0xc77
00000000
040b6030 00000001 4049e127 : 00000000 1b912800 00000000 1b912800 00000000 040b6190 00000000 040b7000 : Ax32Serv!interpret::xal_eval_id+0xd0
00000000
040b6070 00000001 4049e268 : 00000000 1b912800 00000000 00000000 00000000 1b912800 00000000 040b70e0 : Ax32Serv!interpret::evalLoop+0x167
00000000
040b60d0 00000001 40582b53 : 00000000 00000001 00000000 00000000 00000000 040b6180 00000000`00000000 : Ax32Serv!interpret::eval+0x58

找到这一行
00000000 040b55c0 00000001 40434517 : 00000000 18ebfb00 00000000 1e522736 00000000 1e665e60 00000000 00930200 : Ax32Serv!interpret::evalFunc+0x2ca

输入命令 du 00000000 1e522736
00000000
1e522736 “saveBudgetCheckResultErrorWarnin”
00000000`1e522776 “gDetails”

输入命令 dd 00000000 040b55c0+44
00000000
040b5604 000f554e 1b913940 00000000 00000000
00000000 040b5614 00000000 00000000 00000000 00000000
00000000
040b5624 00000000 00000000 00000000 00000000
00000000 040b5634 00000000 00000000 00000000 00000000
00000000
040b5644 00000000 ffffff00 00000000 1e665e60
00000000 040b5654 00000000 fffffffe ffffffff 00000001
00000000
040b5664 00000000 1b913940 00000000 1e522736
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也是让人无语了。

原文地址:

本文标签: 出现输入命令成的