如何在没有断点的情况下停止gdb执行?
只需使用常规中断Ctrl- c将正常工作.GDB只是转发SIGINT
到调试过程然后死掉.GDB将捕获非标准退出并在那里中断进程,因此您仍然可以检查所有线程,它们的堆栈和变量的当前值.这样可以正常工作,但使用断点会更好.我发现自己这样做的唯一一次是,如果我认为我已经进入某种无限循环.
GUI应用程序不会对^ C和^做出反应,这会破坏控制台应用程序的运行方式.从那时起,大多数非平凡项目往往是GUI应用程序或主要用于GUI应用程序的库,您有两种选择:
从单独的终端发送SIGSTOP到应用程序.这很麻烦.
如果在GDB提示符下按^ C或^ Break,GDB将终止,但应用程序将继续运行.然后,您可以再次运行GDB以使用-p
命令行开关连接到它.这会丢失调试器状态.
在这两种情况下,您可能会发现这有用:您可以修改它以在shell脚本,makefile中使用或发送信号而不是附加GDB.tasklist | grep
ProcessName
| sed -e 's/
ProcessName
*\([0-9]*\).*/gdb
ModuleName
-pid=\1/' > rungdb.sh
info threads
将帮助您找出您想要查看的线程.然后用thread
ThreadNumber
它切换到它.
只需输入BREAK即可.
Break,在没有任何参数的情况下调用时,break在下一条要在所选堆栈帧中执行的指令处设置断点
启动shell,使用ps查找进程ID,并使用kill命令发送SIGSTOP或SIGINT(例如kill -INT pid).