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