Pergunta

Eu estou tentando gerar uma compilação de lançamento para uma aplicação C ++ que eu escrevi. A multa aplicativo é executado (debug e release) quando você executá-lo a partir de dentro VS2008; mas quando você executar o arquivo executável ele trava quase a cada momento.

Agora, há um truque para que eu possa executar este aplicativo como um aplicativo independente, sem ter que percorrer todo o código e encontrar o erro que está causando isso?

Agradecemos antecipadamente.

Foi útil?

Solução

Em suma, não.

você terá que encontrar o erro, se ele funciona dentro do VS, então eu arriscaria um palpite de que é um problema de tempo, possivelmente você está substituindo dados de segmento compartilhados, isso seria menos provável (embora ainda possível ver) dentro do VS como sendo executado em um ambiente de depuração, o que atrasa um pouco mais baixo.

Se você quer ajuda para encontrar o seu erro, em seguida, dizer-nos mais. Caso contrário, construir o seu lançamento com símbolos de depuração (PDBs), instale DrWatson como o depurador de sistema e executá-lo independente. Quando ele trava DrWatson criará um arquivo minidump, coloque isso em WinDbg (meu favorito) e você será capaz de ver exatamente onde seu bug é (ainda vou te dizer que o despejo contém uma exceção e mostrar-lhe-lo por padrão . Você precisa adicionar o seu caminho de código fonte e caminho para os seus símbolos em WinDbg para obtê-lo de fazer isso corretamente).

Em seguida, você também vai saber como diagnosticar falhas quando o aplicativo é executado no local também.

Outras dicas

Você está colocando recursos externos? Se você é verificação de que seus caminhos relativos estão corretas no programa C ++.

Uma possibilidade é que o seu programa usa dados heap não inicializadas . O lançamento de um programa do depurador permite que a pilha de depuração NT, o que faz com que o alocador de heap para preencher novos blocos de memória com um padrão de preenchimento, e também permite uma verificação heap. O lançamento do mesmo programa de fora as folhas depurador pilha NT depuração desativado, mas se o programa foi ligado contra a versão de depuração do tempo de execução C, então a pilha CRT depuração ainda será habilitado.

A muito menos provável possibilidade é que seu programa requer SeDebugPrivilege a ser definida em seu processo de token . O depurador permite esse privilégio em seu token processo, que tem o efeito colateral que todos os programas lançados a partir do depurador herdar esse privilégio. Se suas tentativas de programa para usar OpenProcess() / ReadProcessMemory() / WriteProcessMemory() e não lidar com erros corretamente, é concebível que ele poderia falhar.

Existem algumas possibilidades. Além do que já foi mencionado, a execução de um aplicativo do Visual Studio será executado no mesmo contexto de segurança como a instância do Visual Studio. Assim, se, por exemplo, você está trabalhando no Vista, você pode estar batendo uma violação de segurança não tratada, se você está tentando acessar arquivos protegidos, ou o registro.

O que se você construir uma versão de depuração e executá-lo autônomo? Será que ela falhar? Se assim for, você pode geralmente invadir o depurador de lá e ter uma pilha de chamadas para ver o que o mau funcionamento é.

A partir dos detalhes que você deu, parece que pode haver um problema de biblioteca. Você está executando o programa no mesmo computador? Se não, então você também vai ter que implantar as bibliotecas apropriadas para a sua aplicação. Se você estiver executando no mesmo computador, mas fora do ambiente de dev, garantir que a sua aplicação pode ver as bibliotecas apropriadas.

A melhor maneira que eu encontrei para depuração no lançamento é para criar um despejo de memória quando um acidente acontece e o despejo, em seguida, permite-me símbolos de carga de depuração no meu computador dev e descobrir o que está acontecendo. Mais informações aqui: http://www.debuginfo.com/articles/effminidumps.html

Você também pode ir para file => aberto no Visual Studio e abrir o .exe, para que você não está começando-lo sob o depurador per se. Não tenho certeza se ele vai ajudar.

http://blogs.msdn.com/saraford/archive/2008 / 08/21 / se-você-sabe-you-can-depuração um executável-que-ISN-ta-parte-de-um-visual-studio-projeto-sem-usando-tools-anexar a processo -296.aspx

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top