问题
我正在尝试拥有 gdb自动调试c我正在审查的程序,其中有一个很小但真实的机会(即:万分之一)由于已知错误而发生崩溃。我与另一位工程师争论,这个问题已经严重到需要解决,所以我需要真正导致崩溃发生,以证明花时间修复它是合理的。为了加快测试速度,我计划编写一个脚本,让应用程序在 GDB 中运行,如果需要的话可以运行几天,直到崩溃。
先前的研究
I've found out how to run simple applications through GDB until segfaulting via a separate answer on StackOverflow ,但我需要稍微扩展一下问题。所以,我知道我可以重复运行一个程序,直到它崩溃:
set pagination off
break exit
commands
run
end
问题
我需要做的是弄清楚如何发出某些命令。我的程序运行几秒钟后,它会要求用户输入(通过 stdin
)[0,100]
范围内的数字,然后按 ENTER 。我希望它在第一次迭代时输入 0
,ENTER,在第二次迭代时输入 1
,ENTER我意识到如果我向应用程序添加命令行参数,这会容易得多,但此时我不允许更改它,并且必须依赖它提供的交互操作模式。
问题
我如何创建一个命令来使用 GDB 自动生成这些击键/模式?我猜我可以编写某种 GDBINIT
脚本,但我主要以交互方式使用 GDB 来获取回溯、分析内存等,并且不太熟悉此类自动化任务。
谢谢。
最佳答案
因为您的程序从 stdin
读取输入,所以您的任务很简单。只需按如下方式创建输入文件:
1
2
3
...
然后,您的 gdb 命令序列更改其 run
阶段以包含输入文件(例如 input.txt
):
set pagination off
break exit
commands
run < input.txt
end
关于c - GDB:重新运行程序直到出现故障,一路上回答提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37731003/