在后台运行 GDB

在后台运行 GDB

我正在开发一个程序,其中有 2 个 ncurses 窗口,一个显示使用 fork+exec 实现的自定义 shell,另一个我想显示有关在我的 shell 上运行的命令的一些信息。为此,我尝试使用 GDB。

我的想法是在后台运行 GDB,设置一些断点并将一些信息打印到文件中,我的 ncurses 应用程序读取、格式化和显示该文件。

问题是我无法在没有提示的情况下运行 GDB,因为如果输入不是来自终端,它会自动退出。我正在使用以下脚本:

./bin/pE_application &
pid=$(ps -C pE_application -o pid=)
gdb --command=examine_memory.gdb --pid="$pid" > "$GDB_TMP" 2>&1 &
pE_jid=$(jobs | grep pE_application | grep -oE "^\[[0-9]\]" | sed 's/\[//g' | sed 's/\]//g')
fg "%""$pE_jid"

其中 pE_application 是我的 ncurses 应用程序。 Exam_Memory.gdb 是一个启动脚本,它尝试为我的 run_shell 函数设置断点,以便我可以在启动时转储信息:

set follow-fork-mode parent

info functions

break run_shell
        command 1
        p 'pE_application.c'::unparsed_cmd
        continue
end

我尝试过使用批处理模式,但 GDB 将在 init 脚本运行后退出。如果没有批处理模式,GDB 将退出,因为输出不是来自终端,输出文件将如下所示:

*some info*
...
Quit anyway? (y or n) [answered Y; input not from terminal]

或者由于 tty stop 信号而无法运行。我试图找出是否有任何方法可以在没有 I/O 的情况下在后台运行 GDB,只需保持带有断点和命令的启动脚本即可。

谢谢

相关内容