Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 5902|Resposta: 1

[.NET Core] [Combate real]. Crashes e exceções de aplicações NET/C# geram automaticamente arquivos de despejo DMP

[Copiar link]
Postado em 2022-11-6 22:41:42 | | | |
Requisitos: Ao desenvolver aplicações usando .NET/C#, é impossível para qualquer desenvolvedor garantir uma execução estável e robusta do programa, o que pode estar relacionado à lógica do código do desenvolvedor ou ao ambiente de execução do usuárioNão há garantia 100% de que a aplicação que você desenvolver será livre de problemasNão é terrível ter um problema, mas o pior é que existe um problema que não consegue encontrar a causa e resolvê-lo.

Se a aplicação não for executada como esperado e ocorrer uma saída anormal, como um arquivo de dump DMP pode ser gerado automaticamente para solucionar o problema?
Um dump é um arquivo que contém um snapshot do processo quando foi criado e pode ser usado para verificar o estado da aplicação. Quando é difícil anexar um depurador a uma aplicação .NET, como um ambiente de produção ou CI, você pode usar dumps para depurar a aplicação. O uso de dumps captura o estado dos processos problemáticos, e o estado pode ser verificado diretamente sem parar a aplicação.

Coletar despejos

Você pode usar variáveis de ambiente para configurar sua aplicação para coletar dumps em caso de falha. Isso é útil se você quiser saber a causa da falha. Por exemplo, capturar dumps quando uma exceção é lançada ajuda a identificar problemas verificando o estado do app caso ele falhe.

A tabela a seguir mostra as variáveis de ambiente que você pode usar para configurar sua aplicação para coletar dumps em caso de falha.

variável de ambiente
ilustrar
Inadimplência
COMPlus_DbgEnableMiniDump ou DOTNET_DbgEnableMiniDumpSe estiver configurado para 1, ative a geração de despejo do núcleo.0
COMPlus_DbgMiniDumpType ou DOTNET_DbgMiniDumpTypeO tipo de despejo para coletar. Veja a tabela abaixo para detalhes2 (MiniDumpWithPrivateReadWriteMemory)
COMPlus_DbgMiniDumpName ou DOTNET_DbgMiniDumpNameEscreva o caminho do arquivo para o dump. Certifique-se de que o usuário que executa o processo dotnet tenha acesso de gravação ao diretório especificado./tmp/coredump.<pid>
COMPlus_CreateDumpDiagnostics ou DOTNET_CreateDumpDiagnosticsSe estiver configurado para 1, ative o registro de diagnóstico para o processo de dump.0
COMPlus_EnableCrashReport ou DOTNET_EnableCrashReport(Requer .NET 6 ou posterior) Se definido como 1, o tempo de execução gera um relatório de falha no formato JSON que inclui informações sobre as threads e os frames de pilha da aplicação falhada. O nome do relatório de falha é o caminho/nome de dump adicionado a .crashreport.json.
COMPlus_CreateDumpVerboseDiagnostics ou DOTNET_CreateDumpVerboseDiagnostics(Requer .NET 7 ou posterior) Se definido como 1, ative o registro detalhado de diagnóstico para o processo de dump.0
COMPlus_CreateDumpLogToFile ou DOTNET_CreateDumpLogToFile(.NET 7 ou posterior necessário) O caminho do arquivo para a mensagem de diagnóstico deve ser escrito. Se não estiver ativado, uma mensagem de diagnóstico é gravada no console da aplicação com falha.

Para essas variáveis de ambiente, o .NET 7 padroniza o prefixo DOTNET_ em vez de COMPlus_. No entanto, o prefixo COMPlus_ continuará funcionando corretamente. Se você forEm versões anteriores do runtime .NET, as variáveis de ambiente ainda deveriam usar o prefixo COMPlus_



Criar um novo teste de aplicação .NET Core 6

Use o VS 2022 para testar um novo teste de aplicativo .NET Core 6 com o seguinte código:

Inicie o programa usando o comando cmd, como mostrado na imagem abaixo:

COMPlus_EnableCrashReport=1
COMPlus_DbgEnableMiniDump=1
COMPlus_DbgMiniDumpName="C:\Users\itsvse_pc\AppData\Local\Temp\NET\test.dmp"
COMPlus_CreateDumpDiagnostics=1
Exceção não resolvida. System.Exception: itsvse.com
   no Programa. <Main>$(String[] args) em C:\Users\itsvse_pc\source\repos\WindowsFormsApp1\DumpDemo\Program.cs:linha 9
[createdump] Escrevendo minidump com heap para o arquivo C:\Users\itsvse_pc\AppData\Local\Temp\NET\test.dmp
[createdump] Despejo escrito com sucesso



Você pode ver que, após o programa travar de forma anormal, ele é bem-sucedido no diretório que especificamosO arquivo de .dmp dump é geradoQuanto a como analisar, é outra questão.

Configurações Universais da Plataforma Windows

No Windows, o Windows Error Reporting (WER) pode ser configurado para gerar dumps quando um aplicativo trava.

Esse método funciona para todos os programas, não apenas para . programas .NET, como C++, Go, etc.; E e. REDE. Versão NET Core

  • Abra regedit.exe
  • Abra o diretório HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Relatório de Erros\LocalDumps
  • Crie uma KEY DumpFolder do tipo REG_EXPAND_SZ para configurar o diretório onde os arquivos de dump são armazenados
  • Você também pode criar um KEY DumpCount do tipo REG_DWORD configurar a quantidade total de dumps




Claro, você também pode configurar isso usando comandos do PowerShell:

De acordo com a configuração acima, se o programa sair de forma anormal, ele criará um despejo do programa no diretório %LOCALAPPDATA%\CrashDumps.

Recursos:

O login do hiperlink está visível.
O login do hiperlink está visível.
O login do hiperlink está visível.




Anterior:Explicação detalhada das regras de armazenamento para imagens de anexos do Discuz, imagens de avatar e imagens de álbuns
Próximo:Operação Prática: Use o BundleTransformer para substituir System.Web.Optimization
 Senhorio| Postado em 2022-11-6 22:44:06 |
Enviar arquivos de dump:

Após o início do programa, determine se o diretório possui um arquivo de despejo gerado; se sim, envie o arquivo para a interface especificada e então exclua o arquivo.
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com