manipulador de exceção vectored e manipulação de erro de tempo de execução Microsoft C

StackOverflow https://stackoverflow.com/questions/1328434

Pergunta

Eu tenho implementado recentemente alguma exceção vectored manipulação de erros de captura em nosso software. Isto é especialmente útil como acabamos convertido de vc6 para vs2005. Nós estamos encontrando alguns problemas com o uso da biblioteca STL (geralmente as pessoas fazendo coisas que não deveria). Estou tentando pegar esses erros com a minha manipulador de exceção vectored.

No entanto, este não parece ser pago, ao contrário, esses erros são internamente processado pelo Visual Studio C biblioteca Runtime Microsoft.

A minha pergunta é;

Existe uma maneira para desativar a verificação de erros de tempo de execução e obter as exceções passados ??para o VE manipulador?

Graças Rica

Foi útil?

Solução

http://msdn.microsoft.com /en-us/library/aa985973%28VS.80%29.aspx

#define _SECURE_SCL 1
#define _SECURE_SCL_THROWS 1

O acima me permite lançar exceções.

Outras dicas

Você pode desativar as verificações de tempo de execução adicionais. No entanto, nem todos os erros que este capturas irá resultar em um acidente que você pode interceptar.

Em uma nota: Estas verificações consomem frequentemente desempenho significativo e são, por padrão, não desligado nas compilações.

#define _SECURE_SCL 0

É melhor fazer isso através de configurações de projeto, como você poderia ter problemas vinculador desagradáveis ??se os difere de ajuste dentro ou entre arquivos.

Eu corri para este problema há um tempo atrás e ele me levou algum tempo para envolver minha cabeça em torno do que eles estão fazendo em seu tempo de execução. Eu recomendo a leitura "Migrando de versões anteriores do Visual C ++" no MSDN pelo menos duas vezes. Então leia "Extensões para a biblioteca C, parte I: Bounds de verificação de interfaces (ISO / IEC TR 24731-1) " . O último é o padrão que a maioria do parâmetro verificando o material é baseado em.

Depois de entender o que eles estão fazendo, apenas definir _CRT_SECURE_NO_DEPRECATE, _SECURE_SCL e _SECURE_SCL_THROWS em suas configurações do projeto. Em seguida, certifique-se de que você tem "Ativar Exceções C ++" set "Sim, com exceções SEH (/ EHA)" e "Basic Runtime Checks" conjunto de "Default" em seu projeto. Pelo menos, isso é o que está funcionando para nós agora. Ele fez um tempo para remover o código incorreto que tínhamos criado sob VC6 embora.

A coisa mais importante que você pode fazer é pôr de lado algumas semanas e realmente cavar em que as várias opções e macros fazer. Em seguida, descobrir o que funciona com o seu código. Nós não fazer isso cedo o suficiente e doeu muito, uma vez que tinha algum "mau constrói" fazê-lo fora da engenharia.

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