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

Debugging 如何在GDB中多次重新运行程序?,debugging,gdb,Debugging,Gdb,我有一个程序偶尔会失败,但也有同样的错误。为了调试它,我想在GDB下运行它,直到它失败,设置断点并重新运行它。 我该怎么做: gdb --args /path/to/program <program args> gdb--args/path/to/program 但我在任何地方都找不到如何告诉GDB“运行这个程序100次”例如。我能想到的最简单的解决方案是在无限while循环中运行程序,直到它失败,或者按Ctrl+C来中断循环 (gdb) while 1 >run &g

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

gdb --args /path/to/program <program args>
gdb--args/path/to/program

但我在任何地方都找不到如何告诉GDB“运行这个程序100次”例如。

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

(gdb) while 1
 >run
 >end

这个gdb脚本将运行程序100次,或者直到它收到信号为止<代码>$\u siginfo如果程序因信号而停止,则为非无效;如果程序退出,则为无效。据我所知,进程的任何停止,包括断点、观察点和单步执行,都会将
$\u 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

main()
重命名为
myu程序()
并添加一个调用
myu程序()
100次的
intmain()
?(我知道对于一些使用
atexit()
等执行操作的复杂程序来说,这可能会中断,但它可能会作为一种解决方法。)编写一个bash或dos脚本来运行它100次。@Gregg这似乎是我建议使用gdb脚本的唯一解决方案。例如,请看这个问题:是否存在终止条件,或者是否希望将程序精确地运行100次?简短而简单的解决方案:)