考虑这种情况:
有一个Android应用程序可以处理不同的线程。 其中一些可能会导致分段违规(SIGSEGV)。 我希望能够使用NDK从使用C语言编写的信号处理程序中捕获所有违规,而不管引起它的线程如何。
实际上,我已经使用sigaction
编写了这样的处理程序。
它的工作原理只适用于运行NDK代码的线程。
这是因为SIGSEGV被传递到导致违规的线程,而不是让我们说SIGKILL被传递给进程。
结果,我的处理程序没有收到由其他线程引起的SIGSEGV,程序被杀死。
有没有办法让所有SIGSEGV重定向到我的处理程序? 或者,替代地,一种覆盖所有线程的默认处理程序的方法吗?
是的,有一个原因我想要这个特别的东西就像我描述的那样! ;)
答案 0 :(得分:0)
您可能会遇到SIGSEGV
,但如果SIGSEGV
未发生,则您无法释放免费资源。 Java有一个垃圾收集器(在某些情况下甚至gc也不会从内存泄漏中节省),但是c / c ++代码必须是free()
或delete
或delete[]
已经分配的内容(但是不是alloca()
- ed)。
我会把那些冒险本地事物的东西放到一个单独的过程中。 (Android应用程序可能包含多个进程。)当进程死亡时,其垃圾也会死亡。主要过程必须检测到工人进程已经死亡。