Fre*_*rik 10 c++ eclipse linux netbeans sigint
我正在使用C++在Linux上开发一个应用程序(服务/守护进程),它需要与一块硬件接口.如果我的程序在终止时没有干净地释放这些硬件的资源,那么我必须重新加载设备驱动程序,这个过程大约需要10分钟,并且由于显而易见的原因,在程序的每次测试之间必须等待10分钟很沮丧.
所以我已经使用该sigaction()函数来捕获一个SIGINT(一个ctrl-c),这样我的程序可以在我完成它时干净地关闭.从控制台运行程序时,这很好.但是,在Netbeans或Eclipse中调试时(我已经尝试过两者),事情不起作用.
kill -SIGINT <pid>,程序就会破坏,就像它遇到一个断点一样kill -SIGINT <pid>,则行为与上面相同kill在Netbeans中调试时发送.这次,没有出现对话框,信号处理程序永远不会被触发.我需要一些方法来在我调试时干净地关闭我的应用程序.有任何想法吗?
事实证明这个问题与Netbeans或Eclipse无关,而是与gdb无关.
gdb可以配置为以各种方式处理信号.如果您运行:
gdb
然后输入:
info signals
如果收到该信号,您将获得有关如何操作的信号和gdb操作列表:
Signal Stop Print Pass to program Description
SIGHUP Yes Yes Yes Hangup
SIGINT Yes Yes No Interrupt
SIGQUIT Yes Yes Yes Quit
SIGILL Yes Yes Yes Illegal instruction
SIGTRAP Yes Yes No Trace/breakpoint trap
Run Code Online (Sandbox Code Playgroud)
等等...
我的临时工作是使用SIGALRM,gdb默认不破坏并发送到进程.但是,您也可以通过创建.gdbinit文件来自定义默认gdb设置,您可以在其中设置这些设置
即使这篇文章很老,希望它可以帮助别人.
要防止Eclipse捕获Ctrl + C,可以使用.gbdinit文件配置gdb.您使用此内容创建.gdinit
#we want Ctrl+C to be no break, pass to application and printed by the debugger
handle SIGINT nostop
handle SIGINT pass
handle SIGINT print
Run Code Online (Sandbox Code Playgroud)
在eclipse配置中,您可以定义要在Debug配置中使用的.gdbinit文件的位置

| 归档时间: |
|
| 查看次数: |
9539 次 |
| 最近记录: |