我正在C++的Linux上開發一個應用程序(一個服務/守護程序,真的),它需要與一個硬件接口。如果我的程序在終止時沒有徹底釋放這些硬件資源,那麼我必須重新加載設備驅動程序,這個過程大約需要10分鐘,而且顯而易見的原因是,每次程序測試之間必須等待10分鐘令人沮喪。調試時的信號
所以我用sigaction()
函數來捕獲一個SIGINT(一個ctrl-c),這樣當我完成它時,我的程序可以乾淨地關閉。從控制檯運行程序時,這可以正常工作。但是,在NetBeans或Eclipse中進行調試時(我已經嘗試了這兩種方法),事情不起作用。
- 在Eclipse中,如果我打CTRL-C在它提供的控制檯,它似乎並沒有註冊一個SIGINT想過
- 在Eclipse中,如果我在調試模式下運行該程序,然後使用
kill -SIGINT <pid>
,該程序只是打破,如果它打到一個斷點 - Netbeans似乎意識到一個信號已發送,當我在控制檯中按ctrl-c,並彈出一個對話框詢問我是否要轉發它到應用程序。單擊「前進並繼續」似乎會中斷程序,並且信號不會被應用程序接收。它也說我可以配置這個東西在調試 - > Dbx配置,一個不存在的菜單項
- 在Netbeans中,如果我在調試模式下運行程序,然後使用
kill -SIGINT <pid>
,行爲與上述相同 - 然後我添加了一個SIGQUIT處理程序,並嘗試通過
kill
在Netbeans中進行調試時發送該程序。這一次,沒有對話框出現,信號處理程序從不跳閘。
我需要一些乾淨地關閉我的應用程序,而我調試。有任何想法嗎?
那麼,是否可以合理地使gdb處理SIGINT? 「.gdbinit」的內容是什麼? – 2012-11-01 02:12:11