Episódio
Exceção Armazenada C000027B
Uma exceção de armazenamento é um tipo de exceção feita por aplicativos UWP. Ele foi introduzido no Windows 8.0 como parte da API do WinRT (agora conhecida como UWP).
O Código de Exceção é 0xC000027B.
O primeiro parâmetro de exceção (0) é o endereço inicial de uma matriz de ponteiros para estruturas que começam com uma estrutura STOWED_EXCEPTION_INFORMATION_HEADER . Desde o Windows 8.1, STOWED_EXCEPTION_INFORMATION_V2 tem sido a versão em uso.
O segundo parâmetro de exceção (1) é o número de ponteiros na matriz.
A exceção de armazenamento foi substituída/aprimorada pela exceção de ponto de falha (0xC000027C). Como as exceções da POF, o código de exceção é gerado pelo WinRT Framework. Ele não requer que os aplicativos sejam recompilados para que possam ser usados.
Uma exceção de armazenamento é gerada quando uma operação assíncrona falha. Quando a exceção é relatada do thread de trabalho por meio de uma chamada RoOriginateException ou RoOriginateLanguageException, um Stack Backtrace (matriz de ponteiros de instrução) é coletado do thread atual por meio de uma chamada de função CaptureStackBackTrace. O Stack Backtrace e HRESULT da exceção é encapsulado em um objeto IRestrictedErrorInfo e roteado através das camadas de projeção de linguagem do WinRT para o chamador.
Se a exceção não for tratada pelo chamador, a exceção armazenada será lançada fatalmente. Como o lançamento é adiado, o contexto atual do despejo associado tem pouco valor. O thread do problema original regularmente não existe mais e, se existir, concluiu a operação (o que significa que a memória de pilha do thread foi substituída). Isso significa que os parâmetros de função e as variáveis locais não estão disponíveis.
Siga estas etapas ao depurar esses problemas com as Ferramentas de Depuração para Windows:
- .exr -1
- Visualize o código, o endereço da matriz de exceção armazenada e a contagem através dos parâmetros
- !pde.dse
- Lista as exceções armazenadas
- Cada HRESULT é descrito (mesma saída que !pde.err)
- Cada Backtrace é exibido como uma pilha de chamadas
- Cada exceção aninhada (opcionalmente) é exibida (por exemplo, !sos.pe saída de uma exceção CLR)
Recursos Adicionais:
- Inside - Exceção de ponto de falha
- Interior - .exr
- Por dentro - SDK do Windows
- Ferramentas de Desfragmentação - Extensão do Depurador PDE (via link OneDrive)
- Ferramentas de Desfragmentação - #136 - Depurando Despejos de Falha do Modo de Usuário Parte 2
- Ferramentas de Desfragmentação - #167 - Depurando Dumps de Falha do Modo de Usuário Redux
- Documentação da Microsoft - Ferramentas de depuração para Windows
- NTDebugging Blog - Parte 1 + Parte 2
- MSDN - RoOriginateException
- MSDN - RoOriginateLanguageException
- MSDN - Interface IRestrictedErrorInfo
Uma exceção de armazenamento é um tipo de exceção feita por aplicativos UWP. Ele foi introduzido no Windows 8.0 como parte da API do WinRT (agora conhecida como UWP).
O Código de Exceção é 0xC000027B.
O primeiro parâmetro de exceção (0) é o endereço inicial de uma matriz de ponteiros para estruturas que começam com uma estrutura STOWED_EXCEPTION_INFORMATION_HEADER . Desde o Windows 8.1, STOWED_EXCEPTION_INFORMATION_V2 tem sido a versão em uso.
O segundo parâmetro de exceção (1) é o número de ponteiros na matriz.
A exceção de armazenamento foi substituída/aprimorada pela exceção de ponto de falha (0xC000027C). Como as exceções da POF, o código de exceção é gerado pelo WinRT Framework. Ele não requer que os aplicativos sejam recompilados para que possam ser usados.
Uma exceção de armazenamento é gerada quando uma operação assíncrona falha. Quando a exceção é relatada do thread de trabalho por meio de uma chamada RoOriginateException ou RoOriginateLanguageException, um Stack Backtrace (matriz de ponteiros de instrução) é coletado do thread atual por meio de uma chamada de função CaptureStackBackTrace. O Stack Backtrace e HRESULT da exceção é encapsulado em um objeto IRestrictedErrorInfo e roteado através das camadas de projeção de linguagem do WinRT para o chamador.
Se a exceção não for tratada pelo chamador, a exceção armazenada será lançada fatalmente. Como o lançamento é adiado, o contexto atual do despejo associado tem pouco valor. O thread do problema original regularmente não existe mais e, se existir, concluiu a operação (o que significa que a memória de pilha do thread foi substituída). Isso significa que os parâmetros de função e as variáveis locais não estão disponíveis.
Siga estas etapas ao depurar esses problemas com as Ferramentas de Depuração para Windows:
- .exr -1
- Visualize o código, o endereço da matriz de exceção armazenada e a contagem através dos parâmetros
- !pde.dse
- Lista as exceções armazenadas
- Cada HRESULT é descrito (mesma saída que !pde.err)
- Cada Backtrace é exibido como uma pilha de chamadas
- Cada exceção aninhada (opcionalmente) é exibida (por exemplo, !sos.pe saída de uma exceção CLR)
Recursos Adicionais:
- Inside - Exceção de ponto de falha
- Interior - .exr
- Por dentro - SDK do Windows
- Ferramentas de Desfragmentação - Extensão do Depurador PDE (via link OneDrive)
- Ferramentas de Desfragmentação - #136 - Depurando Despejos de Falha do Modo de Usuário Parte 2
- Ferramentas de Desfragmentação - #167 - Depurando Dumps de Falha do Modo de Usuário Redux
- Documentação da Microsoft - Ferramentas de depuração para Windows
- NTDebugging Blog - Parte 1 + Parte 2
- MSDN - RoOriginateException
- MSDN - RoOriginateLanguageException
- MSDN - Interface IRestrictedErrorInfo