我有一个程序,会偶尔失败,但错误信息总是一样。为了调试它,我想在GDB下运行它,直到它失败,设置断点并重新运行。
我该怎么做?
gdb --args /path/to/program <program args>
但是我找不到任何地方告诉GDB运行程序100次的方法。
我能想到的最简单的解决方案是在一个无限循环中运行程序,直到它失败或者你按下Ctrl+C来结束循环。
(gdb) while 1
>run
>end
这个 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
main()
重命名为my_program()
,并添加一个int main()
,调用my_program()
100 次?(我知道这可能会导致某些使用atexit()
等进行操作的复杂程序出现问题,但它可能作为一种解决方法。) - DevSolar