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

Author: ollo, 2014-05-01

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.

 2
Author: RC Brand, 2017-05-23 11:58:48

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.php

Aviso. 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.

 2
Author: Stephen Kellett, 2018-04-11 18:22:49