2009-11-25 64 views
5
我使用VS 2010和我在C#中有很多流在我的當前項目工作

。我已經寫了一些流轉儲工具,用於編寫某些類型的數據流進行調試,但我似乎讓整個次絆倒,當我調試,需要尋找到我調試過流,但我沒有把我的在那裏轉儲呼叫。看來我應該能夠以某種方式轉儲流只是使用VS或者也許告訴它在調試器中的流上調用我的轉儲方法之一。有沒有這樣做?有沒有辦法來轉儲從調試器流VS

我與工作流有一些文字描述數據的斑點,然後BLOB的字節,所以在看說明是非常有用的。我的轉儲方法通常只是將該信息轉儲出來,然後跳過blob。

回答

1

你可以只使用即時窗口打電話給你的轉儲功能,而調試:

MikeDsDumpFxn(whateverStreamIsActiveInThisContext) 

如果你的函數返回一個字符串,它會在那裏打印的結果直接窗口。

9

鍵入以下到即時窗口:

System.Diagnostics.Debug.WriteLine((new System.IO.StreamReader(stream)).ReadToEnd()); 
+1

您可能需要'System.Diagnostics.Debug.WriteLine((新就是System.IO.StreamReader(流))ReadToEnd的());' – KCD 2012-10-28 21:47:24

+2

注意,這將消耗通話,所以你應該知道,你可能不會能夠繼續當前的調試會話。 – 2014-06-19 15:53:17

0

如果你有流中的二進制數據,你可以嘗試在immediate window使用下面的線將其傾倒到一個文件:

var lastPos = stream.Position; 
stream.Seek(0, SeekOrigin.Begin) 
File.WriteAllBytes("filepath.bin", new BinaryReader(stream).ReadBytes((int)stream.Length)) 
stream.Seek(lastPos, SeekOrigin.Begin) 

的顯然必須尋求防止改變河流在傾倒時的位置的副作用(在最後一行中恢復)。

如果流不具有Length屬性,您可以使用一個類似的解決方案to the one done here

var lastPos = stream.Position;  
var ms = new MemoryStream(); 
stream.Seek(0, SeekOrigin.Begin) 
stream.CopyTo(ms) 
File.WriteAllBytes("filepath.bin", ms.ToArray()) 
stream.Seek(lastPos, SeekOrigin.Begin) 
相關問題