Supposons qu'il y ait trois appels de fonctions consécutifs dans un bloc try
et que tous lancent le même type d'exception. Comment puis-je savoir quel appel de fonction a jeté l'exception interceptée lors de la manipulation?Comment identifier quel appel de fonction a déclenché une exception particulière dans un bloc try?
Comment identifier quel appel de fonction a déclenché une exception particulière dans un bloc try?
Répondre
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:
- ancienne méthode: avoir trois blocs try/catch
- nouvelle méthode (depuis 1.4): Throwable.getStackTrace()[0]
comme ceci:
try {
function1();
} catch (Exception e){
// function1 error
}
try {
function2();
} catch (Exception e){
// function2 error
}
try {
function3();
} catch (Exception e){
// function3 error
}
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?
définir une nouvelle exception fondée sur un confusable est bonne idée merci – dirtybit
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 ;-)
- 1. Try Catch bloc
- 2. Puis-je savoir quel domaine a fait une requête qui a déclenché un HttpModule?
- 3. Comment identifier quel contrôle a généré l'événement Click?
- 4. Création de plusieurs NSURLConnections. Comment identifier quel appel asynchrone
- 5. Comment localiser une exception particulière dans une pile d'exception
- 6. Débogage une exception dans un bloc catch vide
- 7. Throw Exception VS Return Erreur dans un Try, Catch, Enfin
- 8. Quel objet a été cliqué lorsqu'un événement a été déclenché?
- 9. Jquery: un appel déclenché par plusieurs événements
- 10. Pouvez-vous vraiment avoir une fonction/méthode sans corps mais juste un bloc try/catch?
- 11. Comment puis-je savoir quelle procédure a déclenché une exception dans Delphi?
- 12. Comment puis-je détecter une exception ThreadAbortException dans un bloc finally? (.NET)
- 13. Étendre pour un appel de bloc seulement
- 14. Comment faire pour attraper une exception dans un bloc using avec .NET 2.0?
- 15. Obtenir un identifiant pour un élément de formulaire après que sa classe a déclenché une fonction de changement de jquery
- 16. Comment puis-je déterminer quel bouton de la souris a déclenché l'événement click dans WPF?
- 17. DataReader dans le bloc try provoquant une erreur de référence null potentiel
- 18. Comment puis-je déterminer quel déclencheur a déclenché mon panneau de mise à jour?
- 19. Quelle exception vérification du type nécessaire à LINQ intérieur bloc try/catch pendant l'exécution CRUD OPÉRATION
- 20. Try-Catch et comment lancer le travail dans le bloc catch
- 21. L'attribut "complete" dans Model a-t-il une signification particulière?
- 22. Comment identifier une dépendance manquante
- 23. Comment éviter de définir une variable dans une instruction try
- 24. appel de fonction n'a pas pu être évalué a expiré
- 25. Comment appeler une fonction particulière en fonction de la variable transmise?
- 26. try .. catch ne fonctionne pas dans Application_Start
- 27. Refactoriser cette fonction IF imbriquée qui est enveloppée dans un try/catch
- 28. Comment identifier si un index Lucene.Net existe dans un dossier?
- 29. comment vérifier si une valeur particulière a été sélectionnée dans la zone de sélection
- 30. Comment puis-je déterminer quel framework a été utilisé pour créer une application de bureau Windows particulière?
grâce, il est très utile – dirtybit