C代码中的异常

时间:2011-08-24 19:44:14

标签: c callstack

想知道这个例外是关于什么的?

NTUnhandledExceptionHandler@NTExceptionHandler@@CGJPAU_EXCEPTION_POINTERS@@@Z! jdenet_k.exe

=====Call stack of thread 5612=====
_LogNTCallStackDump@8! jdel.dll  
?NTUnhandledExceptionHandler@NTExceptionHandler@@CGJPAU_EXCEPTION_POINTERS@@@Z! jdenet_k.exe  
0x78c65b6.<nosymbols>! qstatus.dll  
0x771bd29e.<nosymbols>! ntdll.dll  
0x771bd45f.<nosymbols>! ntdll.dll  

====> Exception C0000005 ACCESS_VIOLATION occurred in thread 5612 with call stack:
_jdeStrcmp@8! jdeunicode.dll  
_IB4210030_SetCrossReferenceItemData@20! CSALES.dll  
_IB4210030_ReconcileSalesOrderLineData@24! CSALES.dll  
_IB4210030_IProcessSalesOrderLine@20! CSALES.dll  
_IB4210030_ProcessNextUnprocessedSalesOrderLine@20! CSALES.dll  
_ProcessNextUnprocessedSalesOrderLine@20! CSALES.dll  
_IB4210900_ProcessUnprocessedLines@12! CSALES.dll  
_IB4210900_PerformSalesOrderAction@32! CSALES.dll  
_SalesOrderApplCtrlEX@12! CSALES.dll  
_jdeCallObjectV2@44! jdekrnl.dll



There is also another related error in one of the log files:

====> Exception C0000005 ACCESS_VIOLATION occurred in thread 5612
call stack dumped in file <E:\JDEdwards\E812\DDP\log\jde_11740_1310990285_1_dmp.log>: iParam: 0000000000
INFO: Entering kernel signal handler, process exiting soon: iParam: 1310990289
INFO: Done setting IPC Handle State structures to abandoned, process exiting immediately: iParam: 1310990289

2 个答案:

答案 0 :(得分:1)

强调文字看起来jdeStrcmp()中的函数stdcalljdeunicode.dll函数)导致异常(访问违规,换句话说,某些指针坏或没有)。

在我看来,一个好的DLL不会让异常逃脱,但显然这个就行了。

更新

对于使用与DLL相同的语言编写的调用者来说,让异常转义通常没有问题。对于没有的呼叫者来说,这可能是灾难性的。我是根据这里的经验说的。该功能当然应以某种方式向呼叫者发出信号,表明发生了某些事情。如何发生这是一个设计问题。让异常逃脱当然是错误的方式。

关于跨越模块边界的异常,请参见this SO question。或this one(相同语言,不同版本!)。或谷歌为它。您将看到许多原因和示例,说明为什么跨越模块边界的异常是坏主意(tm)

无法 捕获转义(本机)DLL的异常的语言的一个示例是C#,例如在this SO question。我认为这同样适用于其他.NET语言,以及一些本地语言。

答案 1 :(得分:0)

显然,你有一些“JD Edwards”应用程序,它使用.dll的jdeunicode.dll和jdekrnl.dll。失败位于jdeunicode.dll中的函数“JdeStrcmp()”。

JdeStrcmp():

a)有一个错误

 ... or ...

b)未能检测到空或非法参数

SUGGESTIONS:

  • 如果您的应用程序直接使用JdeStrcmp(),请确保在比较两个字符串时检查null或非法字符串参数。在您使用8位ASCII和16位Unicode字符串的不同组合时编写测试用例会很有用。

  • 如果您购买了J.D. Edwards应用程序和/或开发库,请联系他们的技术支持。也许他们有可以安装的更新。