2017-10-21 95 views
0

比方说,你有一个大型数据图的.NET程序崩溃转储。您可以通过静态变量MyGraph.Root访问图表的根。您需要根据某些数据属性,在观察窗口中检查根目录下多个级别的项目。 item.Name == "Foobar"调试.NET程序崩溃转储:如何在大型数据图中查找项目?

你如何在Visual Studio中做到这一点?或在windbg?

如果您的项目具有唯一的类型,请在windbg中使用!dumpheap -type并搜索该类型。 Visual Studio AFAIK没有类似的东西。但是如果所有项目都属于同一类型呢?

可以为Visual Studio调试器编写自定义数据查看器,该查看器应该能够在图表中找到对象,但是如何将找到的对象传回给普通的监视窗口以检查其属性?我还没有找到任何可以允许的API。

另一个复杂因素:在我的现实生活中,图形是WPF窗口的可视化树,其中子项不能直接作为父项的属性访问。需要使用System.Windows.Media.VisualTreeHelper.GetChild(window, n)来检索窗口的第n个孩子。

任何想法表示赞赏。

回答

1

NetExt其中有!wfrom命令。

您没有提供很多细节,但它应该类似于

!wfrom -type *.MyGraphNode where (_name == "Foobar") select $addr() 

你的问题

,孩子们并不像父的性能直接访问

在这里无关紧要,因为.NET可以访问堆中的所有对象。

这个问题更多的是另一个方向:如果你有很多图,并且你想确保对象属于一个特定的图,那么NetExt需要额外的指令。

+0

谢谢!仍然不允许用于项目选择的自定义代码,但它正在接近。有关NetExt where子句的语法的参考吗?喜欢,我该如何访问数组项目和什么?我只在github自述文件中看到一些示例,但没有列出可用的完整列表。 –

+0

@IvanKrivyakov:我不知道比Github上的更完整的文档。您可能想在那里提出问题。 –

相关问题