2

问题


我正在尝试让自动调试我正在查看的10,000程序,其中由于已知错误而发生崩溃的可能性很小,但确实有可能(即:有机会)。我与另一位工程师争辩说它足够严重,可以解决,所以我需要实际导致崩溃发生,以证明花时间修复它是合理的。为了加快测试速度,我计划编写一个脚本,让应用程序在 GDB 中运行数天(如果需要),直到它崩溃。


先前的研究


我已经发现了如何通过 GDB 运行简单的应用程序,直到通过 StackOverflow 上的单独答案出现段错误,但我需要稍微扩展一下这个问题。所以,我知道我可以反复运行一个程序,直到它通过以下方式崩溃:


set pagination off
break exit
commands
run
end

问题


我需要做的是弄清楚如何发出某些命令。在我的程序运行几秒钟后,它会要求用户输入(通过stdin)范围内的数字[0,100],然后点击ENTER。我希望它在第一次迭代时输入0, ,在第二次迭代中等等。我意识到如果我向应用程序添加命令行参数会容易得多,但我不允许在这个时候,就必须依靠它提供的交互操作方式了。ENTER1ENTER


问题


我将如何创建一个命令来使用 GDB 自动生成这些击键/模式?我猜我可以编写某种GDBINIT脚本,但我主要以交互方式使用 GDB 来获取回溯、分析内存等,并且不太熟悉这些自动化任务。

谢谢你。

4

1 回答 1

3

因为您的程序从 读取其输入stdin,所以您的任务很简单。只需按如下方式创建输入文件:

1
2
3
...

然后,您的 gdb 命令序列将其run阶段更改为包含输入文件(例如input.txt):

set pagination off
break exit
commands
run < input.txt
end
于 2016-06-09T16:12:14.843 回答