我正在閱讀David Hanson的書 - 「C接口和實現」。這次演習的問題似乎是有趣的,但無法找到一個解決方案:在C程序中調用調試器
在某些系統中,一個程序可以在自身調用調試器時,它已經 檢測到錯誤。在斷言失敗可能很常見的情況下,此工具在開發 期間特別有用。
您可以提供一個關於如何調用調試器的簡短示例。
void handle_seg_fault(int arg)
{
/* how to invoke debugger from within here */
}
int main()
{
int *ptr = NULL;
signal(SIGSEGV, handle_seg_fault);
/* generate segmentation fault */
*ptr = 1;
}
不管你做什麼,都要確保在信號處理程序中只使用[異步信號安全功能](http://pubs.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html)。例如,在所有'exec'變體中,只有'execve'和'execle'在(異步信號捕獲)信號處理器的上下文中可以安全執行。現在,做這件事通常是明智的(面對像SIGSEGV那樣的「腐敗信號」)是另一回事。我會選擇(a)外部調試器或(b)檢查coredump驗屍。 – 2012-07-16 07:12:59