2017-10-21 86 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上的更完整的文檔。您可能想在那裏提出問題。 –