2010-02-04 52 views
1

我運行一個典型的生產國和消費過程,但它們通過在命令行中使用管道類似下面的執行:如何在這種情況下附加VC++調試器(或gdb)?

c:\>producer | consumer

producer只是數據打印出來stdout,並consumer從讀stdin

我的問題是我想調試consumer的過程。在VC++和gdb中最好的方法是什麼?

一種解決方案傾出到一個文件,並讀文件:

c:\>producer > temp.data 
c:\>consumer < temp.data 

然而,由兩個傳送的數據的量是非常大的。 temp.data將超過1TB!我可能會使用壓縮,但壓縮/解壓縮需要很長時間。所以,我想在網上做。

目前我的解決方法是:

  1. 做任何工作之前,把休眠功能(例如,睡10秒)在consumer的主要功能如stdin閱讀。
  2. 從控制檯調用producer | consumer。然後,consumer以10秒睡眠開始。
  3. 附加consumer在10秒內由VC++和gdb處理。
  4. 好吧,睡覺後,我現在可以調試消費者。

是的,此解決方法正在工作。但是,這很煩人。我想在這種情況下有更好的調試方法。我很欣賞它的任何想法。

+0

是生產者輸出靜態?即你可以做C:\>消費者

+0

好點。我更新了我的問題。 – minjang

+0

這是一個非常好的解決方法,不知道爲什麼你需要更好的解決方案? –

回答

2

兩種解決方案浮現在腦海

改變你的睡眠是

// this waits indefinitely without killing the CPU 
while(true) {SleepEx(100, FALSE);} 

一旦你手動附加調試者,你只是把一個破發點上的睡眠,那麼你可以手動跳出循環。

或更好(除非它的服務/進程沒有UI訪問權限)添加一個DebugBreak聲明,而不是睡眠。這將導致一個異常被拋出,並會提示你殺掉該進程或調試系統上啓動默認的調試器..

DebugBreak();