任何線程SIGSEGVs考慮這種情況:的Android NDK:處理由從Java端
有一個Android應用程序,並東西,這可能是在不同的線程。 其中一些可能會導致分段違規(SIGSEGV's)。 我希望能夠從使用NDK編寫的C語言信號處理程序中捕獲所有違規行爲,而不管引起它的線程如何。
其實我用sigaction
寫了這樣的處理程序。 它只適用於運行NDK代碼的線程。 這是因爲SIGSEGV被傳遞給導致違規的線程,與之相反,讓我們說SIGKILL將其傳遞給進程。 因此,我的處理程序不會收到由其他線程引起的SIGSEGV,並且程序被終止。
有沒有辦法讓所有SIGSEGV被重定向到我的處理程序? 或者,也可以重寫所有線程的默認處理程序?
是的,有一個原因,我希望這個特殊的東西,我已經描述它的方式! ;)
一些信息在這裏:http://stackoverflow.com/questions/1083154/how-can-i-catch-sigsegv-segmentation-fault-and-get-a-stack-trace-under-jni-on/。從每個線程進行JNI調用以設置該線程的處理程序。確保你確定你的具體崩潰並鏈接到以前的處理程序。 – fadden
@fadden對不起,我的問題不是很清楚!我們假設我不能訪問這些線程。我不知道應用程序可能會做什麼,我只想處理由它引起的所有SIGSEGV。 – Paschalis
你想要什麼被稱爲未捕獲異常處理程序。它存在於Java中,不確定它在c/C++中調用的是什麼。 – 18446744073709551615