GDB:重新运行程序,直到出现故障,并在运行过程中回答提示 问题

GDB:重新运行程序,直到出现故障,并在运行过程中回答提示 问题,gdb,c,linux,debugging,gdbinit,Gdb,C,Linux,Debugging,Gdbinit,我试图自动调试我正在审查的一个程序,其中有一个小的,但真正的机会(即:10000机会中的一个)由于已知的错误而发生崩溃。我和另一位工程师争辩说,这已经够严重的了,需要解决,所以我需要实际导致崩溃发生,以证明花时间修复它是合理的。为了加快测试速度,我计划编写一个脚本,让应用程序在GDB中运行几天(如果需要的话),直到崩溃 前期研究 ,但我需要将问题扩展一点。因此,我知道我可以通过以下方式反复运行程序,直到程序崩溃: 问题 我需要做的是找出如何发出某些命令。在我的程序运行几秒钟后,它会要求

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


前期研究
,但我需要将问题扩展一点。因此,我知道我可以通过以下方式反复运行程序,直到程序崩溃:



问题
我需要做的是找出如何发出某些命令。在我的程序运行几秒钟后,它会要求用户(通过
stdin
)输入
[0100]
范围内的数字,然后按enter键。我希望它输入
0
,在第一次迭代时输入,
1
,在第二次迭代时输入,等等。我意识到如果我向应用程序添加命令行参数,这会容易得多,但此时不允许更改它,必须依赖它提供的交互操作模式


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


谢谢。

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

1
2
3
...
然后,您的gdb命令序列更改其
run
阶段以包括输入文件(比如
input.txt
):

关闭分页
紧急出口
命令
运行
请感谢:)如果程序只是从stdin中读取,为什么不将文件重定向到它呢?谢谢。最后一个问题:是否有可能对输入进行有条件的更改?ie:如果某一行文本出现在程序的控制台输出中,是开始使用不同的输入数据集,还是直接跳到
100
作为输入值?另外,我能告诉它继续重复使用input.txt吗?那要困难得多。在这里,您必须有一个智能脚本与程序通信,以提供输入并再次读取输出。这帮了大忙!
1
2
3
...
set pagination off
break exit
commands
run < input.txt
end