本文可協助您解決使用「值變更時中斷」時所發生的常見錯誤。
診斷「無法設定數據斷點」錯誤
重要
.NET Core 3.0、.NET 5.0.3 和更新版本支援 Managed 數據斷點。 您可以在這裡下載最新版本。
當您使用Managed數據斷點時,可能會發生下列錯誤。 本文說明這些錯誤發生的原因,並提供可能的解決方案或因應措施來解決這些錯誤。
目標進程所使用的 .NET 版本不支持數據斷點。 數據斷點需要 .NET Core 3.x 或 .NET 5.0.3+,在 x86 或 x64 上執行。
受控資料中斷點的支援開始於 .NET Core 3.0。 .NET Framework、3.0 下的 .NET Core 版本或 5.0.3 下的 .NET 版本目前不支援。
解決方案:若要解決此錯誤,請將項目升級至 .NET Core 3.x 或 .NET 5+。
在Managed堆積上找不到值,而且無法追蹤。
在堆疊上宣告的變數。
不支援為堆疊上建立的變數設定數據斷點,因為這些變數在函式結束時將會無效。
因應措施:在使用變數的行上設定中斷點。
未從下拉功能表展開的變數上「當值變更時中斷」。
調試程式在內部需要知道包含您要追蹤之欄位的物件。垃圾收集行程可能會在堆積中移動您的物件,因此調試程式必須知道保留您想要追蹤之變數的物件。
因應措施:如果您在想要設定數據斷點的物件內的方法,請遵循下列步驟:
a. 流覽至框架,其中包含您感興趣的物件方法。
b. 開啟 [局部變數]、[自動變數] 或 [監看式] 視窗。
c. 尋找物件並展開它以顯示其欄位。
d. 以滑鼠右鍵按下您要設定資料斷點的欄位,然後從操作功能表選取 [當值變更 時中斷]。
靜態欄位或靜態屬性不支援數據斷點。
目前不支持靜態欄位和屬性。 如果您對此功能感興趣,請提供 意見反應。
無法追蹤結構欄位和屬性。
目前不支持結構的欄位和屬性。 如果您對此功能感興趣,請提供 意見反應。
屬性值已變更,且無法再追蹤。
屬性可能會變更它在運行時間期間計算的方式。 如果發生這種情況,屬性相依的變數數目會增加,而且可能超過硬體限制。 如需詳細資訊,請參閱下列錯誤「屬性相依於硬體可追蹤的記憶體多」 。
屬性相依於記憶體超過硬體可追蹤的記憶體。
每個架構都有一組位元組和硬體數據斷點,其可支援該斷點,以及您想要設定數據斷點的屬性已超過該限制。 請參閱數據斷點硬體限制數據表,以瞭解您所使用的架構有多少硬體支援的數據斷點和位元組。
因應措施:在屬性內可能變更的值上設定資料中斷點。
使用舊版 C# 運算式評估工具時,不支持數據斷點。
只有非舊版 C# 運算式評估工具才支援數據斷點。
解決方案:若要停用舊版 C# 運算式評估工具,請遵循下列步驟:
- 移至 Visual Studio 中的 [ 偵錯] 功能表。
- 選取選項。
- 流覽至 [偵錯>一般]。
- 取消核取 [ 使用舊版 C# 和 VB 運算式評估工具 ] 選項。
類別 X 具有自定義調試程序檢視,可封鎖僅對它特定的數據使用數據斷點。
只有目標進程所建立的記憶體支援數據斷點(已偵錯的應用程式)。 設定數據斷點的記憶體已標示為可能由 DebuggerTypeProxy 屬性所建立的物件所擁有,或不屬於目標進程的其他專案所擁有。
因應措施:展開 原始檢視 ,而不是 物件的DebuggerTypeProxy 檢視,然後設定數據斷點。 這可確保數據斷點不在 屬性所建立之物件的記憶體上
DebuggerTypeProxy。
資料中斷點硬體限制
程序執行所在的架構(平台組態)有有限的硬體數據斷點可用。 下表指出每個架構有多少暫存器可供使用。
| 架構 | 硬體支援的數據斷點數目 | 位元組大小上限 |
|---|---|---|
| x86 | 4 | 4 |
| x64 | 4 | 8 |
| ARM | 1 | 4 |
| ARM64 | 2 | 8 |
提供意見反應
如需此功能的任何問題或建議,請透過 [說明>傳送意見>反應] 回報 IDE 或 開發人員社群 中的問題,讓我們知道。