如果我在gdb下运行程序,如何在任意点中断?按Ctrl + C会终止程序。 Ctrl + Break不执行任何操作。
我无法输入gdb命令,因为我的程序本身位于REPL循环中,因此我输入的任何内容都将进入我的程序,而不是gdb。
我的程序使用linenoise来实现REPL;我认为这是从gdb隐藏Ctrl + C等。
Ctrl + \导致程序中出现001C
方形斑点,而不是SIGUSR1。
答案 0 :(得分:1)
按Ctrl + C会终止程序。
这不是默认的GDB行为。
您设置了handle SIGINT nostop pass
吗?
您可以使用以下方法检查当前信号的配置:
(gdb) handle SIGINT
Signal Stop Print Pass to program Description
SIGINT Yes Yes No Interrupt
更新:
我的程序将linenoise用于控制台输入。我认为它已经完成了Ctrl + C
如果您的程序正在修改终端设置,那么从 same 终端对其进行调试将非常麻烦。
例如,假设程序设置了no echo
,然后命中了一个断点。我认为,您会收到一个(gdb)
提示符,但是看不到您在GDB中键入的任何命令。
似乎最好从不同终端调试此程序。使用gdb -p $PID
从“外部”附加到它。