Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在VisualStudio2003中检查来自调试器的XML流_C#_Xml_Stream_.net 1.1_Visual Studio 2003 - Fatal编程技术网

C# 如何在VisualStudio2003中检查来自调试器的XML流

C# 如何在VisualStudio2003中检查来自调试器的XML流,c#,xml,stream,.net-1.1,visual-studio-2003,C#,Xml,Stream,.net 1.1,Visual Studio 2003,我必须编辑XSLT样式表,但我是盲目的,因为XML输入只在一组流中快速存在。我可以调试代码,但不知道如何将流的内容输出到我可以查看的文本中(并在编辑它们时手动运行XSLT) 该代码是一个大型旧遗留系统的一部分,如果绝对必要,我可以在调试环境中对其进行修改,但它在连接到一组MSMQ的windows服务中运行。因此,出于各种原因,我希望能够使用调试器查看XML,而不必先更改代码 代码非常简化,如下所示:(C#-但请记住,在VS2003中它是.NET1.1。) 这是将XML作为流获取的函数,然后将其馈

我必须编辑XSLT样式表,但我是盲目的,因为XML输入只在一组流中快速存在。我可以调试代码,但不知道如何将流的内容输出到我可以查看的文本中(并在编辑它们时手动运行XSLT)

该代码是一个大型旧遗留系统的一部分,如果绝对必要,我可以在调试环境中对其进行修改,但它在连接到一组MSMQ的windows服务中运行。因此,出于各种原因,我希望能够使用调试器查看XML,而不必先更改代码

代码非常简化,如下所示:(C#-但请记住,在VS2003中它是.NET1.1。)

这是将XML作为流获取的函数,然后将其馈送到某种XSLT转换对象中。我曾尝试在“监视”窗口和“即时”窗口中查看writer和xmlStream对象,但无法完全理解如何查看实际的XML

private MemoryStream GetXml()
{
    MemoryStream xmlStream;
    xmlStream = new MemoryStream();
    XmlWriter writer = new XmlTextWriter(xmlStream, Encoding.UTF8);
    writer.WriteStartDocument();
    //etc etc...
    writer.WriteEndDocument();
    writer.Flush();
    xmlStream.Position = 0;
    return xmlStream; //Goes off to XSLT transform thingy!
}

非常感谢所有帮助。

好的,如果不修改代码,我就无法成功使用调试器。我在下面的代码段中添加了一个断点,它允许我在debugview中放置断点或使用断点

private MemoryStream GetXml()
{
    MemoryStream xmlStream;
    xmlStream = new MemoryStream();
    XmlWriter writer = new XmlTextWriter(xmlStream, Encoding.UTF8);
    writer.WriteStartDocument();
    //etc etc...
    writer.WriteEndDocument();
    writer.Flush();
    xmlStream.Position = 0;

    #if DEBUG
    string temp;
    StreamReader st=new StreamReader(xmlStream);
    temp=st.ReadToEnd();
    Debug.WriteLine(temp);
    #endif

    return xmlStream; //Goes off to XSLT transform thingy!
}

我仍然希望以某种方式在调试器中简单地查看xmlstream对象,即使它会中断执行流,但同时这是我管理过的最好的方法。

在MemoryStream就绪后,您只需将此表达式添加到您的监视窗口:

(new StreamReader(xmlStream)).ReadToEnd();
监视表达式不需要是简单的变量值。它们可能是复杂的表达式,但会产生副作用。正如您所注意到的,这将中断执行,因为流内容将被完全读取。如果需要重新开始执行,可以在中断后使用另一个表达式重新创建流


这种情况在使用流调试代码时经常出现,因此我避免将它们用于简单、自包含的任务。不幸的是,对于大型系统,事先知道是否应该使代码流面向并不总是容易的,因为这在很大程度上取决于如何使用它。我认为在很多情况下使用流是一种过早的优化。然而,

对于任何来自谷歌的人(如我所做的),请记住,如果已经从流指针读取,则可能需要将流指针重置为开始。可以使用
xmlStream.Position=0
xmlStream.Seek(0,SeekOrigin.Begin)。由于监视的表达式在执行此操作后不会自动更新,因此我建议从立即窗口执行这两个命令。