【问题标题】:gdb: exit program without exiting gdbgdb:退出程序而不退出 gdb
【发布时间】:2012-03-12 14:32:03
【问题描述】:

我正在使用 gdb 调试程序。首先我load 我的可执行文件,然后我continue 运行该程序。我有时想中断程序的执行,所以我这样做了Ctrl + C

我的问题是这会关闭我的程序和 gdb。如何在不退出 gdb 的情况下退出程序?

【问题讨论】:

  • 这不应该发生; Ctrl-C 只是应该中断(不终止)你的程序,它绝对不应该终止gdb。你用的是什么环境?
  • 我正在使用 Cygwin。很奇怪。

标签: c gdb


【解决方案1】:

您是否尝试过在 gdb 中使用 kill

【讨论】:

  • 是的。但是在continue 之后我没有运行到 gdb 命令提示符,所以什么也没有发生。
  • @*foe 怎么说,Ctrl-C 应该只是中断您的程序,以便您再次拥有 gdb 控制台。但是,请尝试使用start 来启动您的程序。执行应在main 函数的开头停止。然后使用kill 杀死你的程序。
  • 当我尝试start 时,我得到“未加载符号表。使用“文件”命令。”
【解决方案2】:

使用 ctrl-c 中断应用程序。然后在 GDB 提示符下运行“signal SIGINT”,它会将此信号发送到您的应用程序,使其执行与您从命令行执行 ctrl-c 时通常执行的操作相同的操作。

【讨论】:

    【解决方案3】:

    看起来在 Windows 下,您必须使用 Ctrl-Break 而不是 Ctrl-C。看到这个page

    摘录:

    调用 SetConsoleMode 以关闭特殊功能的 MS-Windows 程序 'Ctrl-C' 键击的含义不能被 C-c 打断。 因此,MS-Windows 上的 gdb 支持 C- 作为 替代中断键序列,可用于中断 被调试者即使忽略 C-c。

    【讨论】:

    • 谢谢。这仍然退出 GDB。现在当它退出时,它会写“退出(核心转储)”
    • @Randomblue Oh blimey - 看起来不太开心。我不知道该建议什么,也许除了切换到 Microsoft 编译器(它们在 Windows SDK 中是免费的)。
    • @Randomblue 你从cmdsh 控制台运行这些东西吗?被调试的程序是 Cygwin 还是 Win32 原生的? (备案:是gdb Cygwin 还是 Win32?;))
    【解决方案4】:

    首先运行程序(不是从 gdb 内部),然后找到它的 pid。

    在另一个 shell 中,运行 gdb --pid=<your program's pid>。这会将 gdb 附加到正在运行的程序。它会停止程序的执行,所以发出c 继续。

    现在退出您的程序,您的 gdb 会话将保留在那里。

    【讨论】:

    • 我的程序正在远程主机上运行。 (ARM 芯片。)
    【解决方案5】:

    就像 Manlio 所说,在这种情况下你想要的是 kill,它会提示你一条消息,内容如下:

    Kill the program being debugged? (y or n)

    如果您输入help running,您将看到执行常见操作(例如停止当前程序的执行)所需知道的所有重要命令。这些应该是您正在运行的程序的所有命令,而不是 gdb。

    【讨论】: