2009-08-28 6 views

Répondre

10

Vous pouvez placer un bloc try-catch autour de chaque appel de méthode unique.

Ou jetez un oeil à la trace de la pile d'exception. Leur est décrit quelle ligne de code a jeté l'exception.

getStackTrace()[0].getMethodName() 

EDIT:

Throwable

StackTraceElement

+0

grâce, il est très utile – dirtybit

2

comme ceci:

try { 
    function1(); 
} catch (Exception e){ 
    // function1 error 
} 

try { 
    function2(); 
} catch (Exception e){ 
    // function2 error 
} 

try { 
    function3(); 
} catch (Exception e){ 
    // function3 error 
} 
1

Je devine que quelque chose de votre code rend les solutions évidentes délicate, peut-être les sites d'appel de méthode sont un niveau ou deux vers le bas, ou pas au même niveau? Qu'est-ce qui vous empêche exactement de garder un compteur? Dans tous les cas, vous devez soit compter les invocations, utiliser plusieurs blocs try, soit définir votre propre exception contenant les informations manquantes (et l'ancienne exception, car il s'agit d'une sous-classe), puis la relancer.

Peut-être que vous pourriez sous-classer l'objet avec la méthode de lancement d'exception, afin d'encapsuler l'appel de méthode et d'implémenter le compteur?

+0

définir une nouvelle exception fondée sur un confusable est bonne idée merci – dirtybit

0

Je pense qu'introspecter la trace de la pile pour gérer les erreurs vous fera très mal plus tard. Si vous avez besoin d'actions séparées pour des lignes séparées, placez-les dans des blocs try-catch individuels.

Vous pouvez également simplement avoir un état de conservation de variable simple, de sorte que vous pouvez vérifier la valeur, pour déterminer la distance que vous avez. Je pense que cela fonctionnera beaucoup mieux.

int state = 0; 
try { 
    step1(); 
    state = 1; 
    step2(); 
    state = 2; 
.... 
} catch (Exception e) { 
    if (state == 2) .... 

}


Edit: Downvoters, s'il vous plaît notez que je commencé à dire que c'est une mauvaise idée ;-)

Questions connexes