代码之家  ›  专栏  ›  技术社区  ›  Roger Lipscombe

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

gdb
  •  1
  • Roger Lipscombe  · 技术社区  · 6 年前

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

    我的程序使用 linenoise 实施REPL;我假设这是对gdb隐藏Ctrl+C等。

    001C 在我的程序中是方块,而不是SIGUSR1。

    1 回复  |  直到 6 年前
        1
  •  2
  •   Employed Russian    6 年前

    按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做了些什么

    如果您的程序正在修改终端设置,那么您将很难从 终端。

    例如,假设程序集 no echo ,然后命中断点。我 认为 (gdb) 提示,但看不到正在GDB中键入的任何命令。

    似乎您最好从一个服务器上调试这个程序 终端。使用 gdb -p $PID