我要搬家aproject到新的AndroidNativeDevelopmentKit(即JNI)并且我想捕获SIGSEGV,如果它发生(可能还有SIGILL,SIGABRT,SIGFPE),以便呈现一个很好的崩溃报告对话框,而不是(或之前)当前的发生:进程立即意外死亡,并且操作系统可能尝试重新启动它。(编辑:JVM/DalvikVM捕获信号并记录堆栈跟踪和其他有用信息;我只是想为用户提供将这些信息通过电子邮件发送给我的选项。)情况是:我没有编写的大量C代码在这个应用程序中完成了大部分工作(所有游戏逻辑),虽然它在许多其他平台上经过了很好的测试,但我完全有可能,在我的Android端口中
我一直在阅读其他帖子,了解在Android应用中获取SIGSEGV的原因。我计划在我的应用程序中搜索与Canvas使用相关的可能NullPointers,但我的SIGSEGV每次都会输入不同的内存地址。另外,我还见过code=1和code=2。如果内存地址是0x00000000,我会知道它是NullPointer。我得到的最后一个是code=2:A/libc(4969):Fatalsignal11(SIGSEGV)at0x42a637d9(code=2)关于如何追踪此问题的任何建议?我有一个嫌疑人,但我还不热衷于尝试它。我的应用程序使用OSMDroidAPI进行离线映射。Overlay
我想编写一个信号处理程序来捕获SIGSEGV。我保护一block内存以供读取或写入使用char*buffer;char*p;chara;intpagesize=4096;mprotect(buffer,pagesize,PROT_NONE)这可以保护从缓冲区开始的页面大小字节内存免受任何读取或写入。其次,我尝试读取内存:p=buffer;a=*p这将生成一个SIGSEGV,并且我的处理程序将被调用。到目前为止,一切都很好。我的问题是,一旦调用了处理程序,我想通过执行来更改内存的访问写入mprotect(buffer,pagesize,PROT_READ);并继续我的代码的正常运行。我不
我想编写一个信号处理程序来捕获SIGSEGV。我保护一block内存以供读取或写入使用char*buffer;char*p;chara;intpagesize=4096;mprotect(buffer,pagesize,PROT_NONE)这可以保护从缓冲区开始的页面大小字节内存免受任何读取或写入。其次,我尝试读取内存:p=buffer;a=*p这将生成一个SIGSEGV,并且我的处理程序将被调用。到目前为止,一切都很好。我的问题是,一旦调用了处理程序,我想通过执行来更改内存的访问写入mprotect(buffer,pagesize,PROT_READ);并继续我的代码的正常运行。我不