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

15

我有一个程序,会偶尔失败,但错误信息总是一样。为了调试它,我想在GDB下运行它,直到它失败,设置断点并重新运行。

我该怎么做?

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

但是我找不到任何地方告诉GDB运行程序100次的方法。


2
main() 重命名为 my_program(),并添加一个 int main(),调用 my_program() 100 次?(我知道这可能会导致某些使用 atexit() 等进行操作的复杂程序出现问题,但它可能作为一种解决方法。) - DevSolar
3
编写一个Bash或DOS脚本,以使其运行100次。 - Gregg
1
我建议使用 gdb 脚本。例如参考这个问题:https://dev59.com/O2gv5IYBdhLWcg3wPObz - Aif
有终止条件吗?还是你想要程序正好运行100次? - Mark Plotnick
显示剩余2条评论
2个回答

15

我能想到的最简单的解决方案是在一个无限循环中运行程序,直到它失败或者你按下Ctrl+C来结束循环。

(gdb) while 1
 >run
 >end

15

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

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