我正在Ubuntu Linux
上开展一个项目,当我使用GDB
调试应用程序并按CTRL + Z
进行调整时,我得到了SIGTSTP
和GDB
按预期中断。
但是当我在那之后使用cont
时,我仍然会SIGTSTP
,我会重复cont
很长一段时间,但接缝它只是行为相同,只是反复给我{ {1}}。
跟随两个调用堆栈或者重复:
SIGTSTP
那么有什么理由吗?感谢。
答案 0 :(得分:5)
gdb
通常(它可配置)安排在程序即将收到信号时停止程序并重新控制终端。
gdb
通常(它可以配置)在你恢复执行时将信号发送给程序。
可以使用info signals
命令查看设置。
(gdb) info signals
Signal Stop Print Pass to program Description
SIGINT Yes Yes No Interrupt
...
SIGTSTP Yes Yes Yes Stopped (user)
...
在这种情况下,
continue
将恢复该程序而不向其发送任何信号。continue
将伴随SIGTSTP信号恢复它,因此它会立即再次停止。如果您再次输入continue
,则应该恢复。有两种方法可以在不向其发送SIGTSTP信号的情况下恢复程序。
第一种是使用handle SIGTSTP nopass
命令,这将改变"传递给程序"标记为"否"。
第二种是使用signal
命令而不是continue
。从内置帮助:
(gdb) help signal
Continue program with the specified signal.
Usage: signal SIGNAL
The SIGNAL argument is processed the same as the handle command.
An argument of "0" means continue the program without sending it a signal.
This is useful in cases where the program stopped because of a signal,
and you want to resume the program while discarding the signal.
因此,signal 0
将在没有SIGTSTP信号传递给它的情况下恢复该程序。
答案 1 :(得分:0)
我通常使用Ctrl + C(SIGINT)来插入正在运行的进程并设置断点。
我认为这会有所帮助 http://web.mit.edu/gnu/doc/html/gdb_toc.html#SEC40