如何使用gdb重复运行程序直到发生段错误?

68

我的程序存在分段错误的问题,但很少发生(20次或更多只有一次),需要在GDB中进行调试,我需要手动重新运行程序直到出现分段错误(半天的重复操作只有一次失败 :( )。

所以问题是,是否有办法告诉GDB重新运行程序直到出现某个分段错误?

2个回答

93
在程序退出时设置一个断点,触发run命令,并且别忘了set pagination off。有关设置命令的信息,请参阅gdb文档中的Breakpoint Command Lists部分。简而言之:
set pagination off
break _exit
commands
run
end

commands行之后,您将看到下面两行作为命令输入,以在达到断点时执行。


12
在退出函数处设置一个断点,命令为“break exit commands run end” :) - MKo
5
在gdb中,答案似乎是“关闭分页设置”。 - fijal
1
lldb 的等效物是什么? - montefuscolo
我在lldb中找到了这个,但它并不是一个直接的替代品:https://llvm.org/svn/llvm-project/lldb/trunk/utils/test/run-until-faulted.py。例如,按下Ctrl-C会完全退出。 - sourcedelica
4
如果子进程干净地退出,它将运行并退出,并在出现段错误时转到交互式lldb:"lldb -o run -b /path/to/binary -- args args args"因此,您可以将其包装在shell循环中以获得所需的效果。"while lldb -o run -b /path/to/binary -- args args args; do sleep 1; done" - Lawrence D'Anna
显示剩余2条评论

10
(gdb) set pagination off
(gdb) break exit
(gdb) commands
>run
>end
(gdb) run

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接