Código de excepção do Windows 7: 0xc00409
eu tenho uma aplicação de C++ windows que foi feita por outro programador, que eu tive que remover uma linha de código. Depois de reconstruir o aplicativo com o visual studio 2013, ele cai com isso no log do evento:
Faulting application name: WaveStream.exe, version: 0.0.0.0, time stamp: 0x536122da
Faulting module name: WaveStream.exe, version: 0.0.0.0, time stamp: 0x536122da
Exception code: 0xc0000409
Fault offset: 0x0000bd7f
Faulting process id: 0x8b8
Faulting application start time: 0x01cf6490aee4f557
Faulting application path: C:\Program Files (x86)\PS Audio\WaveStream.exe
Faulting module path: C:\Program Files (x86)\PS Audio\WaveStream.exe
Report Id: efe00d42-d083-11e3-a513-bc305baf9e1e
a aplicação usa o QT 4.7.4, e compila sem erros. Eu sou um programador de sistemas embutido e tenho muito pouca experiência de programação do windows. O que posso fazer para descobrir porque está a cair?
Dennis
2 answers
Tente criar uma lixeira para a aplicação. Ver esta questão do StackOverflow e a documentação MSDN sobre como fazer isso. Assim que tiver o ficheiro de despejo de estoiros, abra-o no depurador Visual Studio e poderá ver a excepção e a pilha de chamadas para a excepção, o que deverá ajudar.
A pista para o problema está no código de excepção: 0xc0000409
0xc0000409 significa STATUS_STACK_BUFFER_OVERRUN.
Em outras palavras, algo em seu programa está escrevendo além da estrutura atual da pilha, corrompendo os dados na pilha. O programa detectou isso e ao invés de deixá-lo continuar, lançou uma exceção. Como depuras isto? Existem algumas opções:1) repete isto no depurador e vê-lo despenhar-se, treinar o que falhou.
2) se tiver um estojo de emergência disto, carregue isso no depurador, carregue em F5 e execute o que falhou.
3) Se não tiver um estoiro de estoiros, Poderá à mesma tentar descobrir a causa do estoiro, se souber o endereço absoluto do estoiro (e souber que o módulo carrega sempre num endereço fixo), ou se souber a posição do estoiro desde o início do módulo de falha.
A informação do estoiro acima diz-lhe o desloca-se para o módulo de falha do estoiro. Isso é relatado no campo de deslocamento de falha. No seu exemplo, isto é um desvio de 0x0000bd7f.
Se tiver o dll/exe original e corresponder ao PDB, basta carregá-lo em DbgHelpBrowser, vá ao menu Query, escolha "Encontrar o símbolo com o endereço relativo DLL..." depois, introduza a posição no campo e carregue em "...". A visualização irá mover-se para lhe mostrar o símbolo correspondente mais próximo, realce o símbolo e exibir qualquer informação sobre parâmetros, números de linha e código fonte.
É uma ferramenta grátis. Podes trazê-lo aqui.: https://www.softwareverify.com/cpp-dbghelp-browser.phpAviso. Eu escrevi esta ferramenta para fazer apenas este trabalho para o nosso uso em casa. Disponibilizámo-la recentemente para todos os outros. Encontrei esta pergunta enquanto tentava entender o que significava o código de exceção 0xc0000409.