4

我运行这个示例应用程序:

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的并且应用程序退出并出现错误。当我使用调试器(F5在 Visual Studio 中)运行它时,调试器会发出异常信号,但在按下F5(继续)后,应用程序意外地正常继续并写入“Ok”。

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

4

1 回答 1

3

我想我理解你的困惑。当您调试和 Visual Studio 处理异常时,它会在错误行处停止。在正常情况下,按 F5 再次运行同一行并且您处于错误循环中。但是在您的情况下,您只有一个异常,然后 VS 运行时什么也没发生。

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

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

奖金样本作为证明(粘贴而不是您的 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 
于 2012-10-03T20:49:07.433 回答