在我的android项目中,我使用了我已经实现的c ++库。我的lib有一些崩溃,但我只能检索引发的异常的堆栈跟踪,但不能检索SIGSEGV之类的信号(堆栈跟踪为空)。
要检索堆栈跟踪,我已使用此代码: https://stackoverflow.com/a/28858941/5120292
处理信号:
struct sigaction psa, oldPsa;
void Utils::registerSignalHandlers() {
psa.sa_sigaction = Utils::handleSignal;
psa.sa_flags = SA_SIGINFO;
sigemptyset( &psa.sa_mask );
sigaction(SIGSEGV, &psa, &oldPsa);
}
void Utils::handleSignal(int signalNumber, siginfo_t *sigInfo, void *context) {
std::string message = get_stacktrace();
throw std::runtime_error(message); // this will create a java.lang.RuntimeException
}
顺便说一句,我无法修改JNI桥,因为它们是由工具自动生成的。
我的项目有这个架构:
我看到有一个名为ndk-stack的工具,但我无法理解如何使它与我的项目一起工作。此外,最好在程序中检索日志,而不是使用外部工具..任何帮助将不胜感激!