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

ana*_*and 32 gdb

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

luk*_*uke 24

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

  • `^ c`对我不起作用,因为我的应用程序抓住了它并优雅地死掉了。还有其他建议吗? (2认同)

小智 12

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

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

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

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

info threads将帮助您找出您想要查看的线程.然后用threadThreadNumber它切换到它.


Chr*_*ein 7

只需输入BREAK即可.

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

  • 在gdb的上下文中,运行,停止,步进。这正是我需要的“停止”方式,gdb文档中对此进行了解释。+1 (2认同)

zvr*_*rba 7

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

  • `kill -STOP $(pidof 进程名)` (2认同)