2013-08-01 25 views
0

我正在使用一個垃圾回收器,無論出於什麼原因,它都會在初始化期間生成並捕獲SIGSEGV。GDB傳遞第一個信號

當然,默認情況下GDB會捕獲信號。我做的第一件事是handle SIGSEGV pass nostop noprint將信號傳遞給下級並繼續進行。

但是,由於分段錯誤在開發過程中並不罕見,因此我非常希望GDB能夠捕獲它們,而不必停止低端,重新初始化處理程序,並在每次開始調試時繼續執行。

這將很容易完成使用信號掛鉤,但我沒有找到任何文件。

總之:有沒有辦法只通過信號的第一次出現?

回答

3

正因爲如此,gdb的新版本纔有「捕獲信號」。現在,您可以:

handle SIGSEGV nostop noprint pass 
catch signal SIGSEGV 
commands 
    handle SIGSEGV stop print nopass 
    # .. your breakpoint number here 
    disable 1 
    cont 
end 

這仍然是不完全完美的(如果你碰巧「下一步」在第一SEGV它干擾),但它是相當不錯的。

+0

謝謝你的迴應! – Rimio