Naveguei com o iexplore e travou com a mensagem
C000041D
ou seja
Exceção não tratada em 0x7149B7C0 em iexplore.exe: 0xC000041D: uma exceção não tratada foi encontrada durante um retorno de chamada do usuário.
AFAIK 0x significa código hexadecimal, 714...é o contador do programa e C00...é o código de erro. O que posso fazer para investigar esse bug? Eu tenho o Visual Studio em execução que capturou o programa.
Responder1
Descobri que 0xC000041d = STATUS_FATAL_USER_CALLBACK_EXCEPTION
O que acontece é que o aplicativo sai com o código anormal 0xc000041d devido ao thread inicial criado pelo aplicativo.
Clique para ler mais e ver a fonte..
Responder2
0xC000041d
é umNTSTATUSconstante de código definida no Microsoftntstatus.harquivo de cabeçalho:
O nome da definição ( MessageId
) é STATUS_FATAL_USER_CALLBACK_EXCEPTION
e sua descrição é:
"An unhandled exception was encountered during a user callback."
NTSTATUScódigos são normalmente usados ao comunicar informações do sistema, por exemplo, entre o sistema Windows e drivers de dispositivo e, às vezes, entre o Windows e aplicativos:
- https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-dtyp/c8b512d5-70b1-4028-95f1-ec92d35cb51S
- https://www.osr.com/blog/2020/04/23/ntstatus-to-win32-error-code-mappings/
O significado doNTSTATUSo código também pode ser pesquisado usando a ferramenta de pesquisa de erros da Microsoft:
Como a descrição sugere, o Windows usa esse recurso específicoNTSTATUScódigo quando encontra uma exceção (uma condição anormal) ao chamar um modo de usuário (https://www.tutorialspoint.com/User-Mode-vs-Kernel-Mode) função de retorno de chamada (https://en.wikipedia.org/wiki/Callback_(programação_de_computador)).
Existem muitas situações que podem gerar esta mensagem. Portanto, pesquisar na internet apenasNTSTATUSo código 0xC000041d
possivelmente produzirá resultados não relacionados. Resultados mais relevantes podem aparecer ao incluir também o nome exato do arquivo do processo (neste caso iexplore.exe), o módulo defeituoso (veja abaixo) e/ou talvez até mesmo o endereço exato da memória (neste caso 0x7149B7C0
).
Pesquisar o endereço de memória completo pode ser um pouco complicado devido a compilações/versões de compilação ligeiramente diferentes do programa, modelos de execução variados (por exemplo, versões de 32 bits versus 64 bits do Windows) e porque os módulos (.dll, .exe , arquivos .sys etc. que juntos constituem o código do programa em execução) são carregados em endereços base variados. Corresponder apenas os últimos quatro caracteres B7C0
do endereço pode ser suficiente para indicar um problema relacionado.
Para realmente depurar o problema, o Visual Studio pode ser usado para visualizar a pilha de chamadas do thread que está causando a exceção:
https://stackoverflow.com/questions/945193/how-do-i-find-the-stack-trace-in-visual-studio
A pilha de chamadas mostra os diferentes módulos e métodos nesses módulos que estavam chamando uns aos outros no momento em que ocorreu a exceção. Os nomes dos módulos podem dar uma indicação do que o programa estava fazendo quando o problema ocorreu.
Se os símbolos (https://devblogs.microsoft.com/devops/understanding-symbol-files-and-visual-studios-symbol-settings/) estão disponíveis para os módulos que estão causando o problema - e talvez até mesmo para os arquivos de código-fonte desses módulos - a depuração se torna mais fácil.