DebugSettings.LayoutCycleTracingLevel 屬性
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
取得或設定值,這個值表示配置循環追蹤是否寫入原生調試程式,以及所記錄的詳細數據層級。
public:
property LayoutCycleTracingLevel LayoutCycleTracingLevel { LayoutCycleTracingLevel get(); void set(LayoutCycleTracingLevel value); };
LayoutCycleTracingLevel LayoutCycleTracingLevel();
void LayoutCycleTracingLevel(LayoutCycleTracingLevel value);
public LayoutCycleTracingLevel LayoutCycleTracingLevel { get; set; }
var layoutCycleTracingLevel = debugSettings.layoutCycleTracingLevel;
debugSettings.layoutCycleTracingLevel = layoutCycleTracingLevel;
Public Property LayoutCycleTracingLevel As LayoutCycleTracingLevel
屬性值
列舉值,指出配置循環追蹤是否寫入原生調試程式,以及所記錄的詳細數據層級。 預設值為 None
。
備註
當配置週期當機時,此追蹤層級可用來判斷損毀傾印中保留多少偵錯資訊,以及是否要將任何信息輸出至原生調試程式。
-
None
- 在損毀傾印的 Stowed 例外 狀況中,會保留最小版面配置周期資訊。 原生調試程式沒有輸出。 -
Low
- 在損毀傾印的 Stowed 例外 狀況中,會保留最小版面配置周期資訊。 相同的資訊也會輸出至原生調試程式。 -
High
- 提供更詳細的版面配置周期資訊,其中包含其 和值的所有Measure
和Arrange
finalSize
呼叫availableSize
。 輸出會保留在損毀傾印的 stowed 例外 狀況中。 相同的資訊也會輸出至原生調試程式。
您也可以設定 DebugSettings.LayoutCycleDebugBreakLevel 來觸發附加的原生調試程式,以在有趣的事件期間中斷,導致潛在的配置週期損毀。
XAML 版面配置
XAML 版面配置是指定元素大小和位置的程式。 例如,在垂直 StackPanel
版面配置中,每個子系都會獲得一個位置,以便水準對齊並依序顯示。
在 XAML 樹狀結構中配置所有元素是反覆的,其中配置程式可能會導致觸發另一個版面配置傳遞的變更。 此程式預期會交集,最終版面配置傳遞會產生結果,而不會觸發任何新的版面配置傳遞。 如果進程無法交集 (每個版面配置傳遞都會觸發另一個版面配置傳遞) ,進程就會終止,且應用程式因版面配置週期例外狀況而損毀。
版面配置周期錯誤
根據預設,遇到版面配置循環當機的 XAML 應用程式會提供最少的資訊,以協助您找出並修正問題:
- 會引發Application.UnhandledException事件,並通知您當機是因為版面配置周期問題所造成。
- 某些信息會儲存在 Stowed 例外狀況中。
您可以將 設定 LayoutCycleTracingLevel
為將版面配置迴圈追蹤資訊傳送至原生調試程序輸出,這可讓您比使用存根例外狀況更容易存取,以及增加配置週期記錄的詳細資訊,以提供詳細資訊。
以下是涉及 Slider 控制件之版面配置週期損毀的一些範例輸出:
[LayoutCycleTracing] "SetValue(Width=866.400024)","LayoutCycleCountdown: 7","ClassName: Microsoft.UI.Xaml.Shapes.Rectangle","Name: HorizontalDecreaseRect","Instance: 0x000001C67FB0EE70","TypeIndex: 701"
[LayoutCycleTracing] "DesiredSize changed, old: 865.599976x0.000000 new: 866.400024x0.000000","LayoutCycleCountdown: 6","ClassName: Microsoft.UI.Xaml.Shapes.Rectangle","Name: HorizontalDecreaseRect","Instance: 0x000001C67FB0EE70","TypeIndex: 701"
[LayoutCycleTracing] "SetValue(Width=865.599976)","LayoutCycleCountdown: 4","ClassName: Microsoft.UI.Xaml.Shapes.Rectangle","Name: HorizontalDecreaseRect","Instance: 0x000001C67FB0EE70","TypeIndex: 701"
[LayoutCycleTracing] "DesiredSize changed, old: 866.400024x0.000000 new: 865.599976x0.000000","LayoutCycleCountdown: 3","ClassName: Microsoft.UI.Xaml.Shapes.Rectangle","Name: HorizontalDecreaseRect","Instance: 0x000001C67FB0EE70","TypeIndex: 701"
[LayoutCycleTracing] "SetValue(Width=866.400024)","LayoutCycleCountdown: 1","ClassName: Microsoft.UI.Xaml.Shapes.Rectangle","Name: HorizontalDecreaseRect","Instance: 0x000001C67FB0EE70","TypeIndex: 701"
[LayoutCycleTracing] "DesiredSize changed, old: 865.599976x0.000000 new: 866.400024x0.000000","LayoutCycleCountdown: 0","ClassName: Microsoft.UI.Xaml.Shapes.Rectangle","Name: HorizontalDecreaseRect","Instance: 0x000001C67FB0EE70","TypeIndex: 701"
此記錄輸出顯示元素 Width
(和產生的所需大小) HorizontalDecreaseRect
在866.400024和865.599976之間切換。 您可以使用這項資訊進一步調查,包括使用 DebugSettings.LayoutCycleDebugBreakLevel 來中斷調試程式以調查變數,以找出配置程式代碼中的任何問題。
以下是追蹤輸出中所列的一些常見屬性:
- LayoutCycleCountdown: 指定目前的版面配置傳遞計數。 版面配置傳遞計數從允許的傳遞上限開始,並計算為 0。 如果版面配置程式未交集於傳遞 0 的結尾,則會發生版面配置迴圈例外狀況。
-
ClassName: 與訊息相關聯之子類別的
FrameworkElement
類別名稱。 -
名字:
FrameworkElement.Name
FrameworkElement
如果有任何,則為與訊息相關聯的 。 -
實例: 與訊息相關聯之 之內部表示的
FrameworkElement
記憶體位址。 這特別適合用來篩選,以便追蹤個別實例的訊息。 -
TypeIndex: 表示類別型別的內部索引
FrameworkElement
。 這通常可以忽略。 - SetValue: 當影響配置的屬性設定時,這會列出屬性的名稱,也會列出某些實值類型的新值。
-
DesiredSize: 當測量
FrameworkElement
的結果與先前測量的大小不同時,這會顯示所需的大小變更。