在可执行文件上重复运行GDB(并在崩溃/错误时停止)

the*_*lse 15 c++ gdb

我试图找出一种方法来重复运行GDB可执行文件,并最好停止错误.

我在手册中找不到办法做到这一点!

谢谢

BoB*_*ish 16

我试过(在Bash中):

while true ; do gdb -ex run a.out -ex quit ; done ;
Run Code Online (Sandbox Code Playgroud)

不幸的是,结果是相当棘手,但它确实自动运行,当程序崩溃时(我用一个导致SIGABRT的旧程序测试),gdb问"程序正在运行.无论如何退出?"(y或者n)",所以只要点击n.


Gor*_*ley 6

我遇到了同样的问题,并提出了我认为停止BoBTFish建议的无限循环的一种相当不错的方法.

while true您可以使用虚拟文件的存在来控制循环,而不是循环,例如:

touch loopfile; while [ -f loopfile ] ; do gdb -ex run a.out -ex quit ; done ;
Run Code Online (Sandbox Code Playgroud)

当您想要停止无限调试会话时,您可以在同一目录中打开一个新终端rm loopfile,或者您可以通过中断control-cloopfile从内部删除来退出同一终端gdb:

^CQuit
A debugging session is active.

    Inferior 1 [process 11136] will be killed.

Quit anyway? (y or n) n
Not confirmed.
(gdb) shell rm loopfile 
(gdb) quit
A debugging session is active.

    Inferior 1 [process 11136] will be killed.

Quit anyway? (y or n) y
Run Code Online (Sandbox Code Playgroud)

希望这对未来的某些人有用,它似乎是调试间歇性问题的一种很好的(如果是hackish)方式.