33 votes

"Fonctionne sur ma machine" - Comment corriger les bugs non reproductibles?

Très occasionnellement, malgré tous les tests d'efforts, je me fais frapper avec un rapport de bug à partir d'un client avec qui j'ai simplement ne peut pas reproduire dans le bureau.

"Works on my machine" syndrome]
(Mes excuses à Jeff pour le "emprunt" de l'insigne)

J'ai quelques "outils" que je peux pour essayer de le localiser et de corriger, mais il se sent toujours un peu comme je suis le couteau et la fourche elle:-

  • Demander plus et plus de contexte du client: (systeminfo)
  • Les fichiers journaux à partir de notre application
  • Ad-hoc tests avec le client pour tenter de modifier le comportement
  • Fournir le client avec une nouvelle version avec des diagnostics supplémentaires
  • La réflexion sur le problème dans la salle de bain...
  • Visite du Site (en supposant que le client est quelque part chaud et ensoleillé)

Existe-il des procédures, ou d'autres techniques que quiconque utilise pour résoudre les problèmes de ce genre?

27voto

1800 INFORMATION Points 55907

Un des attributs de la bonne débogueurs, je pense, c'est qu'ils ont toujours beaucoup d'armes dans leur boîte à outils. Ils ne semblent jamais "bloqué" pendant trop longtemps, et il y a toujours quelque chose d'autre pour eux d'essayer. Certaines des choses que j'ai été connu pour faire:

  1. demandez pour les vidages de mémoire
  2. installer un débogueur à distance sur un ordinateur client
  3. ajouter le traçage de code à construire
  4. ajouter un code d'enregistrement à des fins de débogage
  5. ajouter les compteurs de performance
  6. ajouter des paramètres de configuration pour les différents bits de suspect code afin que je puisse activer et désactiver les fonctionnalités
  7. réécriture et refactoriser le code suspect
  8. essayez de reproduire le problème en local sur un système d'exploitation différent ou à la machine
  9. utilisation des outils de débogage comme application verifier
  10. utiliser la 3ème partie de la charge des outils de génération d'
  11. écrire des outils de simulation pour la génération de la charge lorsque le ci-dessus a échoué
  12. utiliser des outils comme Glowcode pour analyser les fuites de mémoire et des problèmes de performances
  13. réinstaller l'ordinateur client à partir de zéro
  14. obtenez de registre de décharges et de les appliquer localement
  15. utiliser le registre et les fichiers de l'observateur outils

Finalement, j'ai trouver le bug donne juste sortir d'une sorte de crainte à ma persévérance. Ou le client se rend compte que c'est probablement une machine ou côté client d'installer ou de problème de configuration.

10voto

Kirill V. Lyadvinsky Points 47627

Une exploitation forestière intensive est généralement utile.

9voto

jpoh Points 2610

La façon la plus simple est toujours de voir le client en action (en supposant que son facilement reproductibles par le client). Souvent, les problèmes surviennent en raison de problèmes avec l'ordinateur du client de l'environnement, les conflits avec d'autres programmes, etc - ce sont des détails que vous ne serez pas en mesure de prendre sur vos dev plate-forme. Donc, une visite du site peut être utile; mais si ce n'est pas pratique, des outils comme RealVNC peut vous aider en vous permettant de voir le client "faire leur chose".

(regardant le client dans l'action vous permet également de les attraper dans toute WTF moments qu'ils ont)

Maintenant, si le problème est intermittent, les choses deviennent un peu plus compliquées. La meilleure façon de contourner ce problème serait de journal d'informations utiles dans les endroits où vous deviner des problèmes pourraient se produire et peut-être utiliser un outil comme Splunk pour indexer les fichiers journaux au cours de l'analyse. Un diagnostic de construire (c'est à dire avec journalisation supplémentaire) pourrait être utile dans ce cas.

6voto

Calanus Points 6164

Je suis juste au milieu de mettre en œuvre un système automatisé de rapport d'erreur système qui envoie de nouveau à moi de l'information (actuellement via e-mail même si vous pouvez utiliser un webservice) de toute exception rencontrées par l'application.

De cette façon je peux obtenir (presque) toutes les informations que je ferais si j'étais assis en face de VS2008 et ça m'aide vraiment à travailler sur ce qui est le problème.

Les clients sont aussi généralement (sorta) impressionnés que je sais au sujet de leur problème dès qu'elle arrive!

Aussi, si vous utilisez l'Application.ThreadException gestionnaire d'erreur, vous pouvez envoyer des info sur les exceptions inattendues trop!

3voto

sharptooth Points 93379

Nous utilisons toutes les méthodes que vous mentionnez progressivement, en commençant par le plus facile et de procéder à la plus difficile.

Cependant, vous oubliez que, parfois, le matériel est en faute. Par exemple, la mémoire pourrait être défectueux et calcul intensif code du comportement étrange de lancer des exceptions avec bizarre diagnostics. De cource, il fonctionne sur votre machine, car vous n'avez pas de matériel défectueux.

L'expérience est nécessaire pour identifier de telles erreurs et d'insister pour que le client tente d'installer le programme sur une autre machine ou matérielle vérifier. Une chose qui aide beaucoup est bon d'erreur de manipulation lors de votre code lance une exception, elle doit fournir des détails, non seulement indique que quelque chose est mauvais. Avec une bonne indication de l'erreur, il est plus facile d'identifier les suspects les questions liées à un matériel défectueux.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X