在一行上放一个断点,程序可以工作。将断点移动到下一行并崩溃

时间:2012-11-05 18:56:05

标签: c# debugging runtime-error race-condition heisenbug

我有这段代码:

XmlDocument doc = new XmlDocument();
doc.Load("file.xml");

XmlNodeList nodes = doc.SelectNodes("//myElement");  // Line 4

for (int i = 0; i < 5; i++) // Line 6
{
    nodes[i].ParentNode.RemoveChild(nodes[i]);
}

doc.Save("output.xml");

如果我在第4行放置一个断点,程序运行正常。但是,如果我在超过该行的任何行(例如6)上放置断点,则会出现object reference not set to instance of object错误,因为节点中只有一个项目。

每次运行程序时程序都会崩溃而没有断点。如果我在第4行放置一个断点,节点的正确计数为85,一切正常。

即使我在第4行之前和之后Thread.Sleep(10000),程序仍会崩溃,因为它只找到1个节点。

有谁知道这是为什么?

1 个答案:

答案 0 :(得分:0)

将代码更改为此,现在它可以完美地运行,断点与否,100%的时间:

XDocument doc = XDocument.Load("file.xml");

List<XElement> nodes = doc.Descendants("myElement").ToList();

for (int i = 0; i < 5; i++)
{
    nodes[i].Remove();
}

doc.Save("output.xml");

不确定为什么SelectNodes给我带来了麻烦,但这个解决方案似乎解决了所有问题。