如何在没有断点的情况下停止GDB执行?
答案 0 :(得分:22)
只需使用常规中断 Ctrl - c 就可以了。 GDB只是将SIGINT
转发给调试过程然后就死了。 GDB将捕获非标准退出并在那里中断进程,因此您仍然可以检查所有线程,它们的堆栈和变量的当前值。这样可以正常工作,但使用断点会更好。我发现自己这样做的唯一一次是,如果我认为我已经进入某种无限循环。
答案 1 :(得分:12)
GUI应用程序不会对^ C做出反应,并且^会破坏控制台应用程序的运行方式。从那时起,大多数非平凡项目往往是GUI应用程序或主要用于GUI应用程序的库,您有两种选择:
从单独的终端向应用程序发送SIGSTOP。这很麻烦。
如果在GDB提示符下按^ C或^ Break,GDB将终止但应用程序仍将继续运行。然后,您可以再次运行GDB以使用-p
命令行开关连接到它。这会丢失调试器状态。
在这两种情况下,您可能会发现这有用: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似乎对我有效(但仅在某些情况下 - 我不确定原因)。