我正在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