35
A
回答
41
首先,您可以运行该程序并通过pid进行调试。当然,这个解决方案并不涵盖所有情况。
另一种方法是使用进程间通信Linux的能力。简而言之,您将ret
的输出重定向到一个FIFO特殊文件(“命名管道”),然后通过调试器从该FIFO中读取。这是如何完成的。从bash中,运行:
mkfifo foo
这会在你的目录中一个特殊的文件,该文件将作为命名管道。当你写文本文件(使用相同的语法echo "Hello" >foo
),写程序将阻塞,直到有人从文件中读取数据(cat <foo
,例如)。在我们的例子中,gdb控制的进程将从这个文件中读取。
您创建了一个FIFO,从bash的运行后:
ret > foo & # ampersand because it may block as nobody is reading from foo
gdb blah
然后,在gdb提示符下运行
run <foo
,并得到预期的效果。需要注意的是,你不能从FIFO(以及从通常的管道)读取数据两次:当你读过的所有数据,将blah
进程死掉,你应该重复的命令写为foo(你可以做到这一点从另一个shell窗口)。
完成后,使用rm foo
删除fifo(或将其放入系统重新启动时将自动删除的目录中,例如/tmp
)。
9
GDB的run
命令使用bash
执行重定向。实现相当于ret | blah
的简单方法是使用bash的process substitution功能。
$ gdb blah
...
(gdb) run < <(ret)
说明:bash的替代<(ret)
喜欢的东西/dev/fd/123
,这是ret
标准输出的文件描述符。除了我们不必自己手动创建它,也不必担心ret
进程的生命周期,我们可以使用该fd与指定的FIFO相似。
相关问题
- 1. 使用gdb调试回调
- 2. GDB管道输入到调试文件,而无需使用一个文件
- 3. 的Gstreamer调试管道C++
- 4. 如何调试scrapy管道?
- 5. 使用GDB调试iPhone
- 6. 使用gdb调试qemu
- 7. 使用gdb调试llvm pass
- 8. 使用GDB调试Android
- 9. 如何使用GDB调试
- 10. 使用GDB调试模板
- 11. 用Eclipse CDT和GDB调试
- 12. 使用GDB进行调试
- 13. 使用gdb调试Java .jar
- 14. gdb调试奇怪
- 15. gdb print NSString调试
- 16. GDB远程调试
- 17. 用GDB调试编程调用函数
- 18. gdb/mi gdb服务器调试
- 19. 调试WCF中的命名管道
- 20. unix管道命令的调试器
- 21. 从IntelliJ调试管道代码?
- 22. 在Jenkins中调试Groovy脚本管道
- 23. GDB调试中的问题
- 24. GDB Vs LLDB调试器
- 25. GDB(DDD),调试问题
- 26. 调试子进程 - GDB/DDD
- 27. Visual Studio +远程gdb调试
- 28. Emacs + GDB + SCons +逐步调试
- 29. CUDA:使用-deviceemu和gdb进行调试
- 30. 使用gdb调试janus网关
这是不同于:http://stackoverflow.com/questions/4521015/how-to-pass-arguments-and-redirect-stdin-from-a-file-to-program-run-in-gdb – 2015-07-02 18:27:34