【问题标题】:What does Visual Studio 2010 debugger do with the XmlException in XmlReader.Read? [duplicate]Visual Studio 2010 调试器如何处理 XmlReader.Read 中的 XmlException? [复制]
【发布时间】:2012-09-23 11:09:30
【问题描述】:

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

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

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

【问题讨论】:

  • 您正在使用 XMLReader 来读取非 xml 内容。为什么不使用 System.IO.StreamReader..?
  • @dj kraze:这只是一个例子。我在询问使用和不使用调试器的应用程序的不同行为。我一般没有阅读文件的问题:-)
  • Visual Studio 是否设置为中断所有异常?是否只是在 reader.Read() 内部抛出了异常,但它被处理了,返回 false?
  • @Liam:这不仅仅是一个“内部异常”,这就是应用程序在没有附加调试器的情况下失败的原因,这是预期的行为。在 Debug/Exceptions 窗口中更改中断设置不会改变这里的任何内容。 所做 修复奇怪行为的是调试设置:"Unwind the call stack on unhandled exceptions"。取消选中此选项会导致应用程序在调试模式下出现预期故障,但它仍然无法回答我的问题。
  • @Hans 它看起来不像是重复的,是吗?您提供的所有有问题的示例和参考资料都参考了 Windows 窗体和 Form.Load 事件。甚至症状也不同(在我的情况下,VS 显示未处理的异常,而在他们的情况下则没有)。虽然,我尝试过针对不同的平台。我的问题的行为没有改变。

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


【解决方案1】:

我想我理解你的困惑。当您调试和 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 

【讨论】:

    猜你喜欢
    • 2011-11-03
    • 1970-01-01
    • 1970-01-01
    • 2013-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多