我正在运行一个典型的生产者和消费者流程,但它们是通过在命令行中使用管道来执行的,如下所示:
c:\>producer | consumer
producer
只是将数据打印到stdout
,consumer
从stdin
读取。
我的问题是我想调试consumer
进程。在VC ++和gdb中最好的方法是什么?
一种解决方案是转储到文件中并读取文件:
c:\>producer > temp.data
c:\>consumer < temp.data
但是,两者传达的数据量非常大。 temp.data
超过1TB!我可以使用压缩,但是压缩/解压缩需要花费大量时间。所以,我想在网上做。
目前我的解决方法是:
consumer
阅读之前),在stdin
的主要功能中设置睡眠功能(例如,睡10秒)。producer | consumer
。然后,consumer
以10秒睡眠开始。consumer
进程。是的,此解决方法正常运行。但是,这很烦人。我想在这种情况下有一种更好的调试方法。我很感激任何想法。
答案 0 :(得分:2)
想到两个解决方案
将睡眠改为
// this waits indefinitely without killing the CPU
while(true) {SleepEx(100, FALSE);}
手动连接debugee后,只需在睡眠中设置一个断点,然后就可以手动跳出循环。
或更好(除非它的服务/进程没有UI访问权限)添加DebugBreak语句,而不是Sleep。这将导致抛出异常,系统将提示您终止进程或调试在系统上启动默认调试器。
DebugBreak();