2010-01-14 5 views
4

Quelle est la meilleure façon d'implémenter une trace de pile d'exception?Exceptions stacktrace

J'ai trouvé une sorte de solution en utilisant uncaught_exception() mais il faut ajouter du code à chaque fonction.

J'ai besoin de travailler sur gcc sous linux et windows

+0

Quelle sorte de sortie voulez-vous voir? –

+0

Dupe: http://stackoverflow.com/questions/77005/how-to-generate-a-stacktrace-when-my-gcc-c-app-crashes –

+0

ce n'est pas la même question. Je ne veux pas de stacktrace quand mon application plante, je veux une stacktrace attachée à mes exceptions, un peu comme e.printStackTrace(); en Java –

Répondre

4

Je ne pense pas qu'il y ait un moyen multi-plateforme pour le faire. Sur Windows, regardez la méthode StackWalk; sur Linux, l'homme backtrace. Cela va obtenir l'information; c'est à vous de le formater.

4

Je ne suis pas sûr qu'une méthode multiplate-forme fiable pour dérouler la pile existe. Toutes les plates-formes/architectures sur lesquelles j'ai travaillé offrent un moyen de parcourir la pile lorsqu'une exception se produit et de faire correspondre les adresses aux noms de fonctions. Aucun d'entre eux n'est portable, mais le framework de reporting peut être écrit pour être portable avec le code de marche de la pile qui reste spécifique à la plate-forme (StackWalk sur Windows ou backtrace sur Linux). Vous pouvez jeter un oeil au projet libunwind. Je n'ai jamais utilisé ou regardé ceci moi-même, donc ce n'est peut-être pas ce que vous cherchez.

2

J'ai implémenté du code qui génère la trace de la pile en cours en tant que chaîne; Jetez un oeil à la fonction GetStackTrace() qui commence à la ligne 1220 de this file si vous êtes intéressé. La fonction fonctionne sous Linux, MacOS/X et Windows (notez que j'ai emprunté l'implémentation Windows de here, et qu'il faut une quantité incroyable de code pour implémenter cette fonctionnalité sous Windows .... bleah)