如何在GDB中多次重新运行程序?

sot*_*ona 9 debugging gdb

我有一个程序偶尔会失败,但有同样的错误.为了调试它,我想在GDB下运行它,直到它失败,设置断点并重新运行它.我该怎么办:

gdb --args /path/to/program <program args>
Run Code Online (Sandbox Code Playgroud)

但我无法在任何地方找到如何告诉GDB"运行此程序100次".

ks1*_*322 7

我能想到的最简单的解决方案是在无限循环中运行程序直到它失败或你按Ctrl+ C来打破循环.

(gdb) while 1
 >run
 >end
Run Code Online (Sandbox Code Playgroud)


Mar*_*ick 7

这个gdb脚本将运行程序100次,或直到它收到一个信号.$_siginfo如果程序因信号而停止,则无效,如果程序退出,则无效.据我所知,这个过程的任何停止,包括断点,观察点和单步,都会$_siginfo产生一些影响.

set $n = 100
while $n-- > 0
  printf "starting program\n"
  run
  if $_siginfo
    printf "Received signal %d, stopping\n", $_siginfo.si_signo
    loop_break
  else
    printf "program exited\n"
  end
end
Run Code Online (Sandbox Code Playgroud)