Visual Studio 2010调试器对XmlReader.Read中的XmlException有什么作用?



我运行此示例应用程序:

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"。

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

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

我想你现在意识到发生了什么。第一次尝试阅读器。读取()读取xml数据的文件,并将流中的索引移动到文件末尾。按 F5 后,再次运行此行和阅读器。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 

相关内容

  • 没有找到相关文章

最新更新