Comment puis-je déboguer des exceptions qui ne sont pas facilement reproductibles et ne se produisent que dans un environnement de production?

9

Je travaille sur un problème où l'exception ne se produit que dans notre environnement de production. Je n'ai pas accès à ces environnements et je ne sais pas ce que cette exception signifie. En regardant la description de l'erreur, je n'arrive pas à comprendre la cause.

javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure

Quelqu'un pourrait-il me conseiller sur la façon d'aborder ce genre de problème?

C4CodeE4Exe
la source
4
cela devrait-il être déplacé vers StackOverflow? Je pense que vous obtiendrez plus de réponses là-bas.
DXM
10
Un mot: journalisation.
quant_dev
1
@DXM - ce serait hors sujet pour Stack Overflow, car c'est trop général. L'OP vise des stratégies et des techniques plutôt qu'une solution spécifique. Si le code qui échouait était inclus, il pourrait peut-être fonctionner sur Stack Overflow.
ChrisF
D'après mon expérience, la plupart des problèmes comme celui-ci proviennent de problèmes de configuration de sécurité et peuvent être difficiles à comprendre. Comme d'autres l'ont mentionné, une bonne journalisation aidera à le révéler.
jfrankcarr

Réponses:

18

En général, une meilleure journalisation du débogage. Déterminez ce que vous voulez savoir, ajoutez-le au code et insérez-le dans les journaux afin de pouvoir le déterminer. Capturer plus de détails sur l'environnement à l'époque peut également aider - quelle demande, quand, etc.

En particulier, je rechercherais un modèle commun chez les clients qui atteignent cela - et si vous en trouviez un d'optimiser - mais ensuite allez capturer le trafic de la couche TCP.

La consultation des messages SSL échangés devrait vous donner une idée de ce qui ne va pas dans le protocole, ou du moins des propriétés communes de la demande. Une fois que vous l'avez, cela devrait être plus proche du débogage.

À titre indicatif, je suppose que cela vient de l'une des trois choses suivantes:

  1. Quelque chose qui n'est pas SSL a parlé au port SSL. (Les analyses de port sont courantes, mais HTTP vers le port HTTPS se produit également.)
  2. Le client ne partage pas un ensemble de chiffres acceptable avec le serveur.
  3. Le client offre un certificat et le serveur a un sifflement. (Peu fréquent, mais possible.)
Daniel Pittman
la source
1
peut-être que le serveur offre un certificat auto-signé ou signé par une autorité de certification que le client ne connaît pas / ne fait pas confiance
Carlos Campderrós
Je pense que j'ai vu le numéro 3 se produire lorsque l'une des parties a expiré les certificats.
FrustratedWithFormsDesigner
J'ai fait pas mal de débogage sur les systèmes de production. Je n'ai jamais réellement utilisé de débogueur, il a toujours été en train de se connecter ou d'écrire des valeurs clés dans une partie particulière de l'écran.
Loren Pechtel du
merci à tous pour vos conseils. Je suis sûr qu'il existe des moyens pragmatiques pour résoudre un bug de production.
C4CodeE4Exe
4

Je recommanderais d'utiliser une stratégie de journalisation avec un niveau de journal maximal configurable. Un utilitaire comme log4j ( http://logging.apache.org/log4j/ , http://en.wikipedia.org/wiki/Log4j ) pourrait faire le travail.

Le niveau de journal configurable (ou verbosité) est important pour pouvoir trouver la raison d'une erreur, éventuellement sans avoir à redéployer votre logiciel.

Si une telle stratégie ne suffit pas pour trouver l'erreur, essayez de trouver comment produire / lire les journaux produits par les applications avec lesquelles la vôtre communique.

Vous pouvez également implémenter un mécanisme pour obtenir automatiquement plus d'informations sur les erreurs par e-mail.

Plus généralement, vous pouvez lire certains articles sur l'instrumentation, qui est un sujet plus large qui inclut la journalisation et le traçage.

PL
la source