2009-11-25 36 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) 
相关问题