如何在没有断点的情况下停止在GDB中执行?

时间:2009-01-07 19:13:06

标签: gdb

如何在没有断点的情况下停止GDB执行?

5 个答案:

答案 0 :(得分:22)

只需使用常规中断 Ctrl - c 就可以了。 GDB只是将SIGINT转发给调试过程然后就死了。 GDB将捕获非标准退出并在那里中断进程,因此您仍然可以检查所有线程,它们的堆栈和变量的当前值。这样可以正常工作,但使用断点会更好。我发现自己这样做的唯一一次是,如果我认为我已经进入某种无限循环。

答案 1 :(得分:12)

GUI应用程序不会对^ C做出反应,并且^会破坏控制台应用程序的运行方式。从那时起,大多数非平凡项目往往是GUI应用程序或主要用于GUI应用程序的库,您有两种选择:

  1. 从单独的终端向应用程序发送SIGSTOP。这很麻烦。

  2. 如果在GDB提示符下按^ C或^ Break,GDB将终止但应用程序仍将继续运行。然后,您可以再次运行GDB以使用-p命令行开关连接到它。这会丢失调试器状态。

  3. 在这两种情况下,您可能会发现这有用:tasklist | grep ProcessName | sed -e 's/ ProcessName {{1 } {i> *\([0-9]*\).*/gdb ModuleName您可以修改它以在shell脚本,makefile中使用或发送信号而不是附加GDB。

    -pid=\1/' > rungdb.sh将帮助您找出想要查看的主题。然后使用info threads thread 切换到它。

答案 2 :(得分:7)

启动shell,使用ps查找进程ID,并使用kill命令发送SIGSTOP或SIGINT(例如kill -INT pid)。

答案 3 :(得分:6)

只需输入BREAK即可。

Break,在没有任何参数的情况下调用时,break在下一条要在所选堆栈帧中执行的指令设置断点

答案 4 :(得分:2)

Ctrl + Z似乎对我有效(但仅在某些情况下 - 我不确定原因)。