有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

jna如何用Java结果调试崩溃:错误\u代码

<>我有一个java应用程序,它使用C++的DLL通过JNA。C++ DLL是专有的,因此,除非我能做一个简单的可重复的例子,否则我不能共享代码。在我进一步调试之前,创建一个可复制的示例是不直接的

应用程序偶尔崩溃,错误消息为Java Result: -1073740940。我正在从Netbeans运行Java应用程序,尽管它在没有Netbeans的情况下崩溃。因为没有hs\u错误。日志,我猜崩溃是在C++层中。如何开始调试此崩溃


共 (2) 个答案

  1. # 1 楼答案

    <> P>崩溃的根本原因是C++层中的EM>堆损坏。如果由于堆损坏而发生随机崩溃,有时,要确定崩溃的原因是复杂的,因为当程序试图操作损坏的内存时,崩溃可能发生在稍后。因此,提供SSCCE也很复杂,特别是当我们处理专有遗留代码时

    我是如何调试此崩溃的:

    • 复制:尝试为崩溃找到一致的用例。如果崩溃是随机的,那么尝试找出一组总是导致崩溃的用户操作

    • 假设:猜测哪个功能/组件包含崩溃

    • 验证:确保禁用此功能/组件时不会发生崩溃

    • 验证:浏览并切分代码。检查一小段代码

    • 文档:写下所有内容

    丹尼尔的回答对修复这次碰撞非常有帮助

  2. # 2 楼答案

    Netbeans的“Java结果”输出只告诉您Java程序的退出代码。您可以使用System.exit(-1073740940);生成相同的。成功的程序以代码0退出。其他任何东西都是需要文档来解释的失败

    您没有给我们任何指示您正在使用什么DLL,因此我们必须处理的唯一信息是这个退出代码。将该整数转换为十六进制数字将产生0xc0000374,您可以将其输入到您最喜欢的搜索引擎中,并找到一个Heap Corruption Exception。提供了一些示例,但通常这意味着您正在访问未分配的本机内存

    在不知道您正在使用什么代码的情况下,我猜您在本机内存、调用本机函数或错误地操作应用程序中的某个地方的指针或句柄方面出了问题

    您应该从仔细查看本机函数的参数开始。如果字节数不匹配,则类型映射可能会出现问题。调查本机函数的任何基于Pointer的参数,包括ByReference参数。回溯代码,找出这些指针何时/如何与本机分配的内存相关联。如果它从未被分配,这就是问题的一种可能性。如果是分配的,请查看是否可以找到释放内存的点,可能是由其他本机函数释放的