Domanda

Recentemente ho implementato alcuni vectored gestione per catturare gli errori nel nostro software eccezione. Ciò è particolarmente utile come abbiamo appena convertito da VC6 a VS2005. Stiamo incontrando qualche problema con l'utilizzo della libreria STL (generalmente persone che fanno cose che non dovrebbero). Sto cercando di catturare questi errori con il mio gestore di eccezioni Vectored.

Tuttavia, questo non sembra ottenere chiamato, invece questi errori sono internamente elaborati dal Microsoft Visual Studio libreria di runtime C.

La mia domanda è;

C'è un modo per disattivare il controllo degli errori di runtime e ottenere le eccezioni passati al gestore VE?

Grazie Ricco

È stato utile?

Soluzione

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

#define _SECURE_SCL 1
#define _SECURE_SCL_THROWS 1

È possibile che questo mi permette di generare eccezioni.

Altri suggerimenti

È possibile disattivare gli ulteriori controlli in fase di esecuzione. Tuttavia, non tutti gli errori di questa catture si tradurrà in un incidente, che si può intercettare.

Su un sidenote: Questi controlli spesso consumano prestazioni significative e sono, per impostazione predefinita, non è spento nella build di rilascio.

#define _SECURE_SCL 0

E 'meglio farlo tramite le impostazioni di progetto, come si potrebbe ottenere problemi di linker brutto se l'impostazione è diversa all'interno o tra i file.

Mi sono imbattuto in questo problema qualche tempo fa e mi c'è voluto del tempo per avvolgere la mia testa intorno a quello che stanno facendo nella loro fase di esecuzione. Mi raccomando di leggere "Migrazione da versioni precedenti di Visual C ++" su MSDN almeno due volte. Poi leggi "Estensioni per il C Library, Parte I: interfacce (ISO / IEC TR 24.731-1) " Bounds-checking. Quest'ultimo è il standard che la maggior parte del parametro di controllo si basa su roba.

Una volta capito che cosa sono fino a, basta definire _CRT_SECURE_NO_DEPRECATE, _SECURE_SCL, e _SECURE_SCL_THROWS nelle impostazioni di progetto. Quindi assicurarsi di avere "Attiva eccezioni C ++" su "Sì, con eccezioni SEH (/ EHA)" e "Controlli Basic Runtime" impostato su "default" nel progetto. Almeno, questo è ciò che sta lavorando per noi in questo momento. Lo ha fatto prendere un po 'di tempo per rimuovere il codice errato che avevamo creato sotto VC6 però.

La cosa più importante che si può fare è mettere da parte un paio di settimane e davvero scavare in quello che le varie opzioni e le macro fanno. Poi capire che cosa funziona con il vostro codice. Non abbiamo fatto abbastanza così presto ed è molto male una volta abbiamo avuto qualche "cattivo costruisce" fatta fuori di ingegneria.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top