我运行此示例应用程序:
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”。
在这种情况下调试模式会发生什么?
答案 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