如何调查仅出现在Visual Studio调试器中的JNI错误

时间:2018-07-24 23:12:33

标签: visual-studio debugging java-native-interface jni4net

我正在使用第三方库(.NET eBMS / AS4客户端)所需的.NET应用程序;该第三方库本身就是Java库的JNI包装器。当我调用该库时,Java库中发生了异常,但是无论谁实现了包装器,都无法很好地完成,因为未包含Java异常包含的任何信息(例如,错误代码,特定错误消息)传递回我的应用程序的.NET异常,我得到的只是最普通的错误消息。您可以想象,这使得在生产中支持应用程序变得困难。

但是,如果我在Visual Studio的开发人员PC上运行相同的代码,则如果我看到“输出”窗口,调试器将从Java库中写入很多信息-我可以看到它正在初始化,并加载了所有它的模块,然后执行,最后我可以看到发生了Java异常,并且实际的错误就在“输出”窗口中。

Jul 25, 2018 8:46:42 AM com.ibm.b2b.as4.client.internal.MessageBatcherImpl logEventAudit
INFO: Event Details: App Context Component:[COMMS]; App Context Service Inst:[AS4]; Trans Id:[ebb64ae1-762d-4175-9ca3-61c0b7d74f48]; Stage:[PROCESSING_IN_PROGRESS]; Event Date Time:[25/07/2018 8:46:42 AM]; Event Action:[SENDING_REQUEST]; Event Status:[SUCCESS]; Event Data:[Mime Packing and sending request]; Is Processing:[false]; Is Final:[false]; Exchange Profile Id:[BatchBulkAsyncPull-EVTE-9ea3427a-ed94-474c-8785-460d2dc28a61]; Storage Ref:[Content-Type:[multipart/related]; Storage Blob Id:[000000020028418e00617564697400000000000000000000aa1c854f9817c08d00000164ddec3291]; ]; Role:[REQUEST]; Exchange Group Id:[e88e4628-13fc-411f-ab83-2a297dccb186]; External Reference:[Destination IP=[test2.ato.sbr.gov.au]]; 
Jul 25, 2018 8:46:42 AM com.ibm.b2b.as4.client.internal.MessageBatcherImpl logEventAudit
INFO: Event Details: App Context Component:[COMMS]; App Context Service Inst:[AS4]; Trans Id:[ebb64ae1-762d-4175-9ca3-61c0b7d74f48]; Stage:[PROCESSING_IN_PROGRESS]; Event Date Time:[25/07/2018 8:46:42 AM]; Event Action:[UNPACKAGING]; Event Status:[SUCCESS]; Event Data:[Unpacking Mime Message]; Is Processing:[false]; Is Final:[false]; Exchange Profile Id:[BatchBulkAsyncPull-EVTE-9ea3427a-ed94-474c-8785-460d2dc28a61]; Storage Ref:[Content-Type:[multipart/related]; Storage Blob Id:[000000020028dcb9006175646974000000000000000000007ca39a2ac13a687b00000164ddec3571]; ]; Role:[REQUEST]; Exchange Group Id:[e88e4628-13fc-411f-ab83-2a297dccb186]; External Reference:[Destination IP=[test2.ato.sbr.gov.au]]; 
Exception in thread "main" EBMS ERRORS : 1 - [ error Code : EBMS:0006, Severity : WARNING, Description : There is no message available for pulling from this MPC at this moment., Error Details : EmptyMsgPartitionChannelException: Pulling message from pull destination failed., RefToMessageInError : A1528423965023.21c28b02-2092-4faf-a394-96a1264f7e6e@1528423965023, Origin : EBMS, Category : Communication, Short description : EmptyMessagePartitionChannel].
    at com.ibm.b2b.as4.client.internal.ResponseImpl.workWithError(ResponseImpl.java:214)
    at com.ibm.b2b.as4.client.internal.ResponseImpl.<init>(ResponseImpl.java:89)
    at com.ibm.b2b.as4.client.internal.RequestImpl.createResponse(RequestImpl.java:341)
    at com.ibm.b2b.as4.client.internal.RequestImpl.createResponse(RequestImpl.java:317)
    at com.ibm.b2b.as4.client.internal.RequestImpl.sendBDO(RequestImpl.java:249)
    at com.ibm.b2b.as4.client.internal.RequestImpl.send(RequestImpl.java:226)
Exception thrown: 'IBM_AS4Client.AS4ClientEbMSException' in AS4Client_x64.dll

所以我的问题是:如何获得调试器可以看到的信息,但是.NET运行时不知道?其中一些看起来像记录日志输出,但是没有写入我可以找到的文件系统上的任何日志中。

更新

第三方代码似乎使用了log4cxx(至少,它带有log4cxx.properties和log4cxx_x64.dll,但log4cxx.properties似乎是纯log4j);无论如何,我将其调整为显示DEBUG级别,而不是之前显示的默认INFO级别,现在我可以看到一些输出,但只能看到DEBUG级别,而不是INFO或更高级别。下面的示例中的INFO条目与DEBUG条目使用的布局不同,因此我怀疑它们不是由log4j写入的。

进一步挖掘(嘿,我是.NET专家,不是Java专家,所以直到我用尖头棒生产它之前,我都不知道这些东西会做什么)产生一个logging.properties文件,该文件将上面的日志记录示例表明INFO:信息是由java.utils.logging编写的,因此值得进一步研究。

0 个答案:

没有答案
相关问题