有没有办法从VS中调试器转储流

时间:2009-11-25 19:22:25

标签: c# visual-studio stream

我正在使用VS 2010,并在我当前的项目中使用C#中的大量流。我已经编写了一些流转储实用程序来写出某些类型的流用于调试目的,但是当我调试时需要查看我正在调试的流时,我似乎一直磕磕绊绊,但我没有放我的在那里转储电话。看起来我应该能够以某种方式使用VS转储流,或者告诉它在调试器中调用我的一个转储方法。有没有想做到这一点?

我正在使用的流有一些描述blob数据的文本,然后是blob的字节,所以查看描述很有用。我的转储方法通常只是将信息转储出来,然后跳过blob。

4 个答案:

答案 0 :(得分:12)

在立即窗口中输入:

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

答案 1 :(得分:4)

也许你可以写一个展示台? MSDN在此处解释:http://msdn.microsoft.com/en-us/library/e2zc529c.aspx

答案 2 :(得分:1)

您可以在调试时使用立即窗口调用转储功能:

MikeDsDumpFxn(whateverStreamIsActiveInThisContext)

如果你的函数返回一个字符串,它将在那里作为结果立即打印出来。

答案 3 :(得分: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)