2011-09-19 4 views
-2

Je souhaite être en mesure d'identifier une exception sur un code Java en cours d'exécution sans attacher un débogueur. Pour un exemple simple, si je le code suivant:Débogage/identification des problèmes Java sans débogueur

int i = 0; 
    Random rand = new Random(); 
    while (true) 
    { 
     i++; 
     int number = rand.nextInt(1000); 
     if (number == 20) 
      throw new Exception("Error!!!"); 
    } 

Comment puis-je connaître la valeur de « i » au moment de l'exception jeter? (sans attacher de débogueurs ou ajouter des entrées de journal/d'impression). Ma motivation est que je veux être capable d'identifier un problème sur un site client sans attacher de débogueur au site de production.

si quelqu'un pose la même question en utilisant .Net ou C++ je pourrais obtenir la valeur de « i » en utilisant Windbg et les PDB pertinentes

Merci!

+5

J'ai un téléviseur et je veux regarder une série sans l'allumer. Souhaite moi bonne chance! –

+3

Hmm, pas de débogueurs ET pas de journalisation vous dites. Bonne chance pour trouver la valeur de 'i' dans la RAM: P – pablochan

+2

'i' sera probablement 0. Just sayin '. –

Répondre

3

Ajoutez les informations pertinentes à l'objet Exception.

if (number == 20) 
    throw new Exception("Error!!! i = " + i); 

Vous pouvez récupérer la valeur de i dans le bloc catch, en utilisant Exception.getMessage() (et une analyse syntaxique de la chaîne, dans ce cas, alternativement, juste throw new Exception("" + i)).

+0

+1 bien que je ne sache pas si cela ne viole pas les restrictions données (pas de journalisation). – pablochan

+0

Je ne suis pas sûr non plus, j'espère que Omri va clarifier cela. –

+0

Cela ne répond pas non plus à ma question. Ma motivation est que je veux être capable d'identifier un problème sur un site client sans attacher de débogueur au site de production. – Omri

1

Votre question n'est pas claire.

Si vous demandez réellement comment vous pouvez trouver des informations sur l'état d'exécution d'un programme sans attacher un débogueur ou modifier le programme pour ajouter la journalisation/traçage/tout ce qui vous donnera cette information .... alors le la réponse est "Vous ne pouvez pas le faire".

Dans cette situation, votre seule option est de tenter de raisonner sur le comportement du programme.


Dans votre exemple, le générateur de nombres aléatoires retourne les numéros qui sont (à toutes fins pratiques) imprévisibles, et donc ne se prêtent pas au raisonnement. Et ce serait normalement être la fin de celui-ci. Cependant, le commentaire de @Thomas Jungblut indique que cela n'est pas pertinent, et la réponse est ZERO ... parce que rien dans votre programme ne change la valeur de i après son initialisation.

Mais cela ne modifie pas vraiment la réponse « générale »:

  • Si vous ne pouvez pas tracer/debug, vous devez raisonner à ce sujet.
  • Si vous ne pouvez pas raisonner à ce sujet, vous êtes bloqué.
Questions connexes