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

如何使用gdb进入正在运行的程序?,gdb,Gdb,如果我在gdb下运行程序,如何在任意点中断?按Ctrl+C组合键将终止程序。Ctrl+Break不起任何作用 我不能输入gdb命令,因为我的程序本身处于REPL循环中,所以我输入的任何内容都将进入我的程序,而不是gdb 我的程序用来实现REPL;我假设这是对gdb隐藏Ctrl+C等 Ctrl+\会在我的程序中产生一个001C方形斑点,而不是SIGUSR1 按Ctrl+C组合键将终止程序 这不是默认的GDB行为 您是否设置了处理SIGINT nostop pass? 您可以使用以下方法检查当前信号

如果我在gdb下运行程序,如何在任意点中断?按Ctrl+C组合键将终止程序。Ctrl+Break不起任何作用

我不能输入gdb命令,因为我的程序本身处于REPL循环中,所以我输入的任何内容都将进入我的程序,而不是gdb

我的程序用来实现REPL;我假设这是对gdb隐藏Ctrl+C等

Ctrl+\会在我的程序中产生一个
001C
方形斑点,而不是SIGUSR1

按Ctrl+C组合键将终止程序

这不是默认的GDB行为

您是否设置了
处理SIGINT nostop pass
? 您可以使用以下方法检查当前信号配置:

(gdb) handle SIGINT
Signal        Stop  Print   Pass to program Description
SIGINT        Yes   Yes     No              Interrupt
更新:

我的程序使用linenoise进行控制台输入。我假设它对Ctrl+C做了些什么

如果您的程序正在修改终端设置,那么从同一终端调试它将非常困难

例如,假设程序设置了
no echo
,然后点击一个断点。我想您会得到一个
(gdb)
提示,但不会看到您正在gdb中键入的任何命令

看来您最好从另一个终端调试这个程序。使用
gdb-p$PID
从“外部”连接到它。

我的程序用于控制台输入。我假设它对Ctrl+C做了一些操作,这意味着gdb没有看到它…?但是请注意附加到进程。