GDB:重新运行程序直到它出现故障,一路上回答提示

时间:2016-06-09 16:01:00

标签: c linux debugging gdb gdbinit

问题

我正在尝试让自动调试我正在审核的程序,其中有一个很小的,但真正的机会(即:10,000机会中的一个)由于已知错误而发生崩溃。我与另一位工程师争辩说,它已经足够严重,所以我需要实际导致崩溃,以证明花时间修复它。为了加快测试速度,我打算编写一个脚本让应用程序在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来获取回溯,分析内存等,并且我并不过分熟悉这些自动化任务。

谢谢。

1 个答案:

答案 0 :(得分:3)

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

1
2
3
...

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

set pagination off
break exit
commands
run < input.txt
end