相关疑难解决方法(0)

如何在Android上的JNI下捕获SIGSEGV(分段错误)并获得堆栈跟踪?

我正在将一个项目转移到新的Android Native Development Kit(即JNI),我想抓住SIGSEGV,如果它发生(可能还有SIGILL,SIGABRT,SIGFPE),以便提供一个很好的崩溃报告对话框,而不是(或之前)当前发生的事情:该过程立即毫不客气地死亡,并且可能是操作系统重启它的一些尝试.(编辑: JVM/Dalvik VM捕获信号并记录堆栈跟踪和其他有用信息;我只是想为用户提供将该信息真正通过电子邮件发送给我的选项.)

情况是:我没有编写的大量C代码完成了这个应用程序中的大部分工作(所有游戏逻辑),虽然它在很多其他平台上都经过了很好的测试,但我完全有可能在我的Android中端口,将它提供垃圾并导致本机代码崩溃,所以我想要当前显示在Android日志中的崩溃转储(本机和Java)(我想在非Android情况下它将是stderr).我可以随意修改C和Java代码,尽管回调(进入和退出JNI)的数量大约为40,显然,小差异的奖励积分.

我听说过J2SE中的信号链接库,libjsig.so,如果我可以在Android上安全地安装这样的信号处理程序,这将解决我的问题的捕捉部分,但我看不到Android/Dalvik这样的库.

java-native-interface android signals segmentation-fault android-ndk

90
推荐指数
4
解决办法
6万
查看次数

如何捕获JNI/Java异常

我的应用程序中有一个JNI层.在某些情况下,Java会抛出异常.如何在JNI层中获取Java异常?我的代码如下所示.

if((*(pConnDA->penv))->ExceptionCheck(pConnDA->penv))
{
    (*(pConnDA->penv))->ExceptionDescribe(pConnDA->penv); 
    (*(pConnDA->penv))->ExceptionClear(pConnDA->penv);
}
Run Code Online (Sandbox Code Playgroud)

这个代码块是否只捕获JNI异常?将在控制台(stderr)中记录异常描述的位置?如何将其插入缓冲区,以便将其传递给记录器模块?

java-native-interface

26
推荐指数
2
解决办法
4万
查看次数

当我从本机Java方法抛出C++异常时会发生什么?

假设我将Sun的JVM嵌入到C++应用程序中.通过JNI,我调用了一个Java方法(我自己的),它又调用了我在共享库中实现的本机方法.

如果此本机方法抛出C++异常会发生什么?

编辑:编译器是gcc 3.4.x,jvm是sun的1.6.20.

c++ java linux java-native-interface exception

24
推荐指数
2
解决办法
9914
查看次数

如何调试SEGV_ACCERR

我有一个使用KickflipButterflyTV libRTMP传输视频的应用程序

现在有99%的时间应用程序正常工作,但我不时会遇到一个我无法调试的本机分段错误,因为消息太含糊了:

01-24 10:52:25.576 199-199/? A/DEBUG: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
01-24 10:52:25.576 199-199/? A/DEBUG: Build fingerprint: 'google/hammerhead/hammerhead:6.0.1/M4B30Z/3437181:user/release-keys'
01-24 10:52:25.576 199-199/? A/DEBUG: Revision: '11'
01-24 10:52:25.576 199-199/? A/DEBUG: ABI: 'arm'
01-24 10:52:25.576 199-199/? A/DEBUG: pid: 14302, tid: 14382, name: MuxerThread  >>> tv.myapp.broadcast.dev <<<
01-24 10:52:25.576 199-199/? A/DEBUG: signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr 0x9fef1000
01-24 10:52:25.636 199-199/? A/DEBUG: Abort message: 'Setting to …
Run Code Online (Sandbox Code Playgroud)

java-native-interface android android-ndk

13
推荐指数
1
解决办法
4094
查看次数