Visual Studio 2010调试器对XmlReader.Read中的XmlException做了什么?

时间:2012-10-02 15:05:03

标签: c# .net visual-studio-2010 debugging xmlreader

我运行此示例应用程序:

class Program
{
    static void Main()
    {
        var reader = System.Xml.XmlReader.Create(@"C:\nonXml.txt");
        while (reader.Read()) { }
        System.Console.WriteLine("Ok");
        System.Console.ReadKey();
    }
}

nonXml.txt是一个包含非xml内容的单行文本文件。

当我在没有调试器的情况下运行应用程序时,reader.Read会抛出预期的XmlException并且应用程序退出时出错。当我使用调试器(Visual Studio中的 F5 )运行它时,调试器发出异常信号,但在按下 F5 (继续)后,应用程序意外地继续正常并写入“Ok”。

在这种情况下调试模式会发生什么?

1 个答案:

答案 0 :(得分:3)

我想我理解你的困惑。当您调试和Visual Studio处理异常时它会在错误行停止。在正常情况下,按F5再次运行相同的行,您将处于错误循环中。但在你的情况下,你只有一个例外,然后VS运行没有任何反应。

我想你现在意识到发生了什么。首先尝试使用reader.Read()读取xml数据的文件,并将流中的索引移动到文件末尾。按F5后再次运行此行,reader.Read()返回false,因为EOF。就是这样。

在正常运行(没有调试)中,您的应用程序会在第一个未捕获的错误时死亡,并且没有其他任何事情发生。

奖金样本作为证明(粘贴代替你的while循环):

try
{
    while (reader.Read()) { }
}
catch (Exception)
{
    Console.Out.WriteLine("We have excpetion, this is wrong file");
}

while (reader.Read()) { } // we have eof so we don't get exception only false