java jni调试_JNI C++调试技术?

本文探讨了在Linux环境下,当C++应用程序使用JNI调用JVM时遇到的调试挑战,特别是针对'致命错误被Java运行时环境检测到'的问题。作者分享了检查JNI调用返回值和异常检查的基本策略,并描述了一个具体的SIGSEGV错误实例,该错误发生在_callObjectMethod()。尽管检查了参数,但由于JNI类的不透明性,仍难以确定问题所在。寻求针对这类问题的调试建议。
摘要由CSDN通过智能技术生成

我有一个Linux C++应用程序,它创建一个JVM并使JNI调用。我刚接触JNI,到目前为止,我发现在开发过程中调试应用程序的唯一有效方法是通过尝试和错误。有什么技术可以用来调试臭名昭著的“致命错误被Java运行时环境检测到”Java虚拟机崩溃?我如何知道问题是我的代码还是真正的JVM bug?

总的来说,到目前为止我所知道的最明显的事情是:

在代码中,在继续之前,始终检查JNI调用返回的jobject、class和jmethodid值是否为空值。

在适当的地方调用env->exceptioncheck(),以确保没有挂起的异常。

目前,我遇到了一个问题,错误报告文件中的堆栈跟踪没有帮助:

# A fatal error has been detected by the Java Runtime Environment:

#

# SIGSEGV (0xb) at pc=0x00002b137a99db59, pid=19977, tid=47362673452544

#

# JRE version: 6.0_20-b02

# Java VM: Java HotSpot(TM) 64-Bit Server VM (16.3-b01 mixed mode linux-amd64 )

# Problematic frame:

# V [libjvm.so+0x40fb59]

... ...

Stack: [0x00007fff1964f000,0x00007fff1974f000], sp=0x00007fff1974e050, free space=3fc0000000000000018k

Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值