2010-02-25 7 views
6

J'utilise Groovy dans une application Java Swing dans le cadre de mon projet de me forcer à nourrir les langages dynamiques jusqu'à ce que je les aime (ce qui arrive, en partie).Nettoyer les traces de pile dans Groovy en utilisant Eclipse?

Mes traces de la pile sont remplis avec des trucs comme Groovy

org.codehaus.groovy.runtime.callsite.ConstructorSite$ConstructorSiteNoUnwrapNoCoerce.callConstructor 

est-il un moyen d'obtenir Eclipse pour supprimer tous ces trucs codehaus (traces de la pile de filtre, au fond)?

Edit: Je peux le faire à partir de la ligne de commande avec grep (bien, not yet) il est donc pas si mal, mais à l'intérieur d'Eclipse serait génial aussi.

+0

Si vous empilez des traces de pile dans un enregistreur (comme java.util.Logger), vous pouvez les formater comme vous le souhaitez. Cependant, supprimer des trucs des traces de la pile semble être l'une de ces choses qui pourraient pousser une personne à maintenir votre code fou. Si vous déboguez, je resterais avec grep - alors dans la production votre code générera des traces de pile correctes tout le temps. – Quotidian

+0

@Quotidian, votre observation est en partie correcte. Ce sont des traces de pile de "développement" qui arrêteront le démarrage de l'application. D'un autre côté, je pense que n'importe qui développant dans groovy voudrait enlever ce truc, à moins qu'ils ne travaillent sur le code de codehaus. Juste pour dire "bonjour monde" il y a une tonne de code codehaus invoqué. Cela n'a aucun sens, du point de vue d'un utilisateur/programmeur. –

Répondre

9

Il existe un utilitaire dans Groovy qui fait exactement ce que vous voulez: StackTraceUtils. STU va nettoyer toutes les informations callsite de votre stacktrace, laissant les choses que vous êtes vraiment intéressé par

Edit:. En Java vous devrez encasulate l'exception dans un java.lang.RuntimeException selon les commentaires.

Exemple d'utilisation:

try { 
    1/0; 
} catch (Throwable t) { 
    throw new RuntimeException(org.codehaus.groovy.runtime.StackTraceUtils.sanitize(t)); //Modifies the Throwable and rethrows 
} 

StackTraceUtils est disponible dans la dernière version de Groovy et vient à l'origine de Grails. Je ne sais pas comment vous allez appliquer cela à tous vos projets stacktraces, mais je pense que Griffon et Grails le font aussi, il devrait y avoir quelques indices dans ces projets.

+0

De bonnes choses, MERCI! –

+0

Je vais marquer cela comme la meilleure réponse pour l'instant, mais si quelqu'un vient me dire comment faire Eclipse pour faire ça ... Mais pour moi ça a marché. –

+0

De rien. Vous devriez être capable de faire cela automatiquement pour tous les stacktraces non capturés en utilisant java.lang.Thread.UncaughtExceptionHandler qui vous permet d'enregistrer un gestionnaire d'exception pour les exceptions non interceptées mais je n'ai pas réussi à faire fonctionner ça. En savoir plus à ce sujet ici: http://dabblescribble.blogspot.com/2009/11/starting-out-in-griffon-3-logging.html – xlson

2

Je n'ai pas de réponse pour "Exécuter en tant qu'application Groovy", mais si vous exécutez GroovyTestcases en tant que tests jUnit dans Eclipse, il existe un bouton "filtrer les traces de pile" au-dessus de la trace de la pile.

+1

+1 nous nous rapprochons! –

Questions connexes