Android JNI信号/异常后发送报告 我试图让我的Android应用程序使用FixBasic,但主要是C++代码。 很多的可能性是,如果有任何崩溃,它将是一种在C++部分的坏访问。 Firebase可以很好地处理未捕获的java异常,但是我无法让它处理JNI信号/异常

Android JNI信号/异常后发送报告 我试图让我的Android应用程序使用FixBasic,但主要是C++代码。 很多的可能性是,如果有任何崩溃,它将是一种在C++部分的坏访问。 Firebase可以很好地处理未捕获的java异常,但是我无法让它处理JNI信号/异常,android,c++,firebase,java-native-interface,signals,Android,C++,Firebase,Java Native Interface,Signals,据我所知,它还不能与JNI兼容,但我认为解决方案类似于此: < C++中的某个WEHRE为我们想要处理的信号添加信号处理程序,将它发送回java端,并尝试发送报告(如果可能的话,使用STACKTACK的一部分)。 #包括 名称空间 { 无效信号处理器(int sig) { //在我的活动中调用静态方法的代码 } } CrashReporter::CrashReporter() { ::信号(SIGABRT,&::信号处理器) } //在爪哇 公共静态void SendReportOnCrash(

据我所知,它还不能与JNI兼容,但我认为解决方案类似于此:

< C++中的某个WEHRE为我们想要处理的信号添加信号处理程序,将它发送回java端,并尝试发送报告(如果可能的话,使用STACKTACK的一部分)。
#包括
名称空间
{
无效信号处理器(int sig)
{
//在我的活动中调用静态方法的代码
}
}
CrashReporter::CrashReporter()
{
::信号(SIGABRT,&::信号处理器)
}
//在爪哇
公共静态void SendReportOnCrash()
{
FirebaseCrash.report(新异常(“OOPS”);
}
不幸的是,从来没有发送过假报告,但我确实收到了Java中的回调。 我尝试启动一个流程分离的活动,在其中我将调用FirebaseCrash.report(),但没有非静态的方法,因此它总是崩溃,因为FirebaseApp/crash没有在辅助活动中实例化

我来这里是想问有没有人能给我一点提示


我最后一次尝试但最不想要的测试是将堆栈跟踪写入一个文件,在新开始时,测试该文件是否存在,如果存在,请使用firebasecash.log然后发送一个假报告…

对于致命错误,JVM调用
abort()
后,您不能保证能够执行任何Java处理。Per:

SIGABRT

热点VM不处理此信号。相反,它调用中止 致命错误处理后的函数。如果应用程序使用此 然后它应该终止进程以保持预期的 语义学

是的,这是针对Oracle实施的。它很可能也适用于所有其他实现


因为在它调用
abort()
时,JVM会被终止。

在JVM调用
abort()
导致致命错误后,不能保证您能够执行任何Java处理。Per:

SIGABRT

热点VM不处理此信号。相反,它调用中止 致命错误处理后的函数。如果应用程序使用此 然后它应该终止进程以保持预期的 语义学

是的,这是针对Oracle实施的。它很可能也适用于所有其他实现

因为在调用
abort()
时,JVM希望被终止

#include <cisgnal>
namespace
{
    void SignalHandler( int sig )
    {
         // Code to call a static method in my Activity
    }
}

CrashReporter::CrashReporter()
{
    ::signal( SIGABRT, & ::SignalHandler )
}

// In java
public static void SendReportOnCrash()
{
     FirebaseCrash.report( new Exception( "OOPS" ) );
}