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

标签 c linux debugging gdb gdbinit

问题


我正在尝试拥有 自动调试我正在审查的程序,其中有一个很小但真实的机会(即:万分之一)由于已知错误而发生崩溃。我与另一位工程师争论,这个问题已经严重到需要解决,所以我需要真正导致崩溃发生,以证明花时间修复它是合理的。为了加快测试速度,我计划编写一个脚本,让应用程序在 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/

相关文章:

linux - Tomcat:无法从局域网上的其他计算机连接

linux - Bash 脚本 : Unwanted Output

linux - 如何使用 apt 按依赖项数量查找/列出包?

objective-c - Xcode - 调试单元测试目标

visual-studio-2010 - VS2010调试刚刚停止,未知错误: 0x80072ee6

c++ - 是否存在 fseek/ftell 给出错误文件大小的情况?

c - 全缓冲流在未满时被刷新

google-app-engine - 去 App Engine 调试

c++ - 文件签名验证

使用cmake编译并链接两个文件?