如何使用gdb进入正在运行的程序?

时间:2018-10-24 13:42:57

标签: gdb

如果我在gdb下运行程序,如何在任意点中断?按Ctrl + C会终止程序。 Ctrl + Break不执行任何操作。

我无法输入gdb命令,因为我的程序本身位于REPL循环中,因此我输入的任何内容都将进入我的程序,而不是gdb。

我的程序使用linenoise来实现REPL;我认为这是从gdb隐藏Ctrl + C等。

Ctrl + \导致程序中出现001C方形斑点,而不是SIGUSR1。

1 个答案:

答案 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从“外部”附加到它。