DebugSettings.LayoutCycleTracingLevel Propriedade
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Obtém ou define um valor que indica se o rastreamento do ciclo de layout é gravado no depurador nativo e o nível de detalhes que é registrado.
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
Valor da propriedade
Um valor da enumeração que indica se o rastreamento do ciclo de layout é gravado no depurador nativo e o nível de detalhes que é registrado. O padrão é None
.
Comentários
Quando uma falha de ciclo de layout parece iminente, esse nível de rastreamento é usado para determinar quanta informação de depuração é preservada em despejos de memória e se deseja gerar informações para o depurador nativo.
-
None
– As informações mínimas do ciclo de layout são preservadas em exceções em despejos de memória. Não há saída para o depurador nativo. -
Low
– As informações mínimas do ciclo de layout são preservadas em exceções em despejos de memória. As mesmas informações também são geradas para o depurador nativo. -
High
- Informações mais detalhadas do ciclo de layout são fornecidas que incluem todas asMeasure
chamadas eArrange
com seusavailableSize
valores efinalSize
. A saída é preservada em exceções em despejos de memória. As mesmas informações também são geradas para o depurador nativo.
Você também pode definir DebugSettings.LayoutCycleDebugBreakLevel para disparar um depurador nativo anexado para interromper durante eventos interessantes que levam a uma possível falha no ciclo de layout.
Layout XAML
O layout XAML é o processo em que os elementos recebem um tamanho e uma posição. Por exemplo, em um layout vertical StackPanel
, cada filho recebe uma posição de modo que se alinhe horizontalmente e apareça sequencialmente verticalmente.
A colocação de todos os elementos na árvore XAML é iterativa, em que o processo de layout pode causar uma alteração que dispara outra passagem de layout. Espera-se que esse processo converga, com um passe de layout final produzindo um resultado sem disparar novas passagens de layout. Se o processo não convergir (cada passagem de layout dispara outra passagem de layout), o processo é encerrado e o aplicativo falha com uma exceção de ciclo de layout.
Erros de ciclo de layout
Por padrão, os aplicativos XAML que experimentam uma falha no ciclo de layout fornecem informações mínimas para ajudá-lo a encontrar e corrigir o problema:
- O evento Application.UnhandledException é gerado e informa que a falha ocorreu devido a um problema de ciclo de layout.
- Algumas informações são salvas em exceções em stowed.
Você pode definir LayoutCycleTracingLevel
para enviar informações de rastreamento do ciclo de layout para a saída do depurador nativo, o que facilita o acesso do que o uso de exceções restritas e aumentar a verbosidade do log do ciclo de layout para fornecer mais informações.
Aqui está um exemplo de saída para uma falha de ciclo de layout envolvendo o controle Controle deslizante :
[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"
Essa saída de log mostra que o Width
(e o tamanho desejado resultante) do HorizontalDecreaseRect
elemento está alternando entre 866,400024 e 865,599976. Você pode usar essas informações para investigar mais, incluindo o uso de DebugSettings.LayoutCycleDebugBreakLevel para invadir o depurador para investigar variáveis, para encontrar quaisquer problemas no código de layout.
Essas são algumas das propriedades comuns listadas na saída de rastreamento:
- LayoutCycleCountdown: Especifica a contagem de aprovação de layout atual. A contagem de aprovação de layout começa no máximo de passes permitidos e conta até 0. Se o processo de layout não convergir até o final da passagem 0, ocorrerá uma exceção de ciclo de layout.
-
Classname: O nome da classe da
FrameworkElement
subclasse associada à mensagem. -
Nome: O
FrameworkElement.Name
doFrameworkElement
associado à mensagem, se houver. -
Instância: O endereço de memória da representação interna do
FrameworkElement
associado à mensagem. Isso é particularmente útil para filtrar para rastrear mensagens para instâncias individuais. -
TypeIndex: Representa o índice interno do
FrameworkElement
tipo de classe. Isso geralmente pode ser ignorado. - Setvalue: Quando uma propriedade que afeta o layout é definida, ela lista o nome da propriedade e também lista o novo valor para alguns tipos de valor.
-
Desiredsize: Quando o resultado da medição de um
FrameworkElement
é um tamanho diferente de quando foi medido anteriormente, isso mostra a alteração no tamanho desejado.