我正在尝试让gdb自动调试我正在审核的c程序,其中有一个很小的,但真正的机会(即: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来获取回溯,分析内存等,并且我并不过分熟悉这些自动化任务。
谢谢。
答案 0 :(得分:3)
因为程序从stdin
读取输入,所以您的任务很简单。只需按如下方式创建输入文件:
1
2
3
...
然后,您的gdb命令序列将其run
阶段更改为包含输入文件(例如input.txt
):
set pagination off
break exit
commands
run < input.txt
end