2010-04-26 5 views
4

Je suis à la recherche d'un tel outil pour pouvoir vérifier rapidement si j'attrape toutes les exceptions que je génère moi-même.Outil d'analyse de code statique pour détecter les exceptions non interceptées dans un code C++ avant la compilation?

Merci!

+0

Ma solution est de ne pas lancer d'exceptions en premier lieu, en partie à cause de ce problème. Bonne chance, cependant. –

+0

le compilateur n'attraperait-il pas que si vous avez ajouté throws() après votre déclaration principale? – flownt

+1

@flownt: non, cela signifie qu'il se terminera au moment de l'exécution. – UncleBens

Répondre

-2

Pourquoi ne pas simplement attraper toutes les exceptions possibles:

int main() { 
    try { 
     // your stuff 
    } 
    catch(...) { 
     // your handler 
    } 
} 
+2

peut-être parce que cela ne dira pas d'où vient une exception, à-la _catch early_? – wilhelmtell

+0

@Wilhelm Eh bien, je crois en * attraper en retard *, et en laissant RAII prendre soin de tous les problèmes intervenant. –

+0

La réponse à votre question est probablement que Séverin a appris, par Java, à se fier au compilateur pour lui dire s'il a traité des cas d'erreur, en lui disant s'il a attrapé/déclaré toutes les exceptions convenablement définies qui sont déclarées/jetées dans un contexte donné. Si tel est le cas, alors une capture de niveau supérieur n'aide pas à cela, il a besoin soit d'une analyse statique de style Java des exceptions vérifiées, soit d'une formation en style de programmation C++. –

3

Je pense que vous courir après le vent ici, et les commentaires à la réponse de Neil B/devrait/vous mettre sur la bonne voie. JAMAIS, jamais attraper une exception juste pour le plaisir. Seulement attraper des exceptions où vous pouvez gérer . (exemple: réessayer une opération sur un serveur de sauvegarde)

Rappelez-vous que presque chaque ligne de C++ peut lancer un AV (index de tableau, déréférencement de pointeur, diviser par zéro, etc.), donc si vous avez l'approche d'attraper chacun d'entre eux, vous n'irez nulle part rapidement. Vous vous dirigez vers le monde du codage culte de la cargaison, où chaque pointeur est coché NULL avant utilisation.

+0

En fait, vous décrivez Undefined Behavior. Cela pourrait lancer, mais Undefined Behavior permet également d'autres résultats, y compris se terminer sur place. – MSalters

Questions connexes