33 votos

¿"Funciona en mi máquina" - Cómo corregir bugs no reproducibles?

Muy de vez en cuando, a pesar de todos los esfuerzos de pruebas, me recibe un golpe con un informe de error de un cliente que simplemente no se pueden reproducir en la oficina.

"Works on my machine" syndrome]
(Disculpas a Jeff para los "préstamos" de la insignia)

Tengo un par de "herramientas" que puedo usar para tratar de localizar y corregir estos, pero siempre se siente un poco como estoy cuchillo y se bifurcan:-

  • Pidiendo más y más el contexto de la atención al cliente: (systeminfo)
  • Los archivos de registro de nuestra aplicación
  • Ad-hoc pruebas con el cliente para intentar cambiar el comportamiento
  • Proporcionar al cliente con una nueva compilación con diagnósticos adicionales
  • El pensamiento sobre el problema en el baño...
  • Visita al sitio (suponiendo que el cliente está en algún lugar cálido y soleado)

Existen procedimientos establecidos, u otras técnicas que nadie utiliza para resolver problemas como este?

27voto

1800 INFORMATION Puntos 55907

Uno de los atributos de la buena depuradores, creo yo, es que siempre tienen un montón de armas en su conjunto. Ellos nunca parecen llegar a "atrapado" por demasiado tiempo, y siempre hay algo más para tratar de probar. Algunas de las cosas que me han sabido hacer:

  1. pide volcados de memoria
  2. instalar un depurador remoto en un equipo cliente
  3. agregar código de seguimiento para que se basa
  4. añadir código de registro para fines de depuración
  5. agregar contadores de rendimiento
  6. agregar los parámetros de configuración de varios bits de código sospechoso así que puede activar y desactivar las características
  7. reescritura y refactorizar código sospechoso
  8. intentar reproducir el problema localmente en un sistema operativo diferente o máquina
  9. utilizar las herramientas de depuración, tales como el comprobador de aplicación
  10. el uso de la 3ª parte de la generación de carga de herramientas
  11. escribir las herramientas de simulación en la casa para la generación de la carga cuando el anterior error
  12. el uso de herramientas como Glowcode para analizar las pérdidas de memoria y problemas de rendimiento
  13. vuelva a instalar la máquina cliente desde cero
  14. obtener el registro de los vertederos y aplicar localmente
  15. el uso del registro y archivo de observador de herramientas

Finalmente, me parece que el error simplemente se da por vencido fuera de algún tipo de temor en mi persistencia. O el cliente se da cuenta de que probablemente se trate de una máquina o de lado de cliente de instalar o problema de configuración.

10voto

Kirill V. Lyadvinsky Puntos 47627

Iniciar extenso generalmente ayuda.

9voto

jpoh Puntos 2610

La forma más fácil es siempre a ver al cliente en acción (suponiendo que su fácilmente reproducible por el cliente). A menudo, los problemas surgen debido a problemas con el ordenador del cliente medio ambiente, los conflictos con otros programas, etc - estos son los detalles que usted no será capaz de atrapar en su dev rig. Así que una visita a un sitio que podría ser útil; pero si eso no es conveniente, herramientas como el RealVNC podría ayudar en lo que le permite ver al cliente 'hacer sus cosas'.

(mirando el cliente en la acción también permite la captura de ellos en cualquier WTF momentos que podrían haber)

Ahora, si el problema es intermitente, entonces las cosas se ponen un poco más complicadas. La mejor manera de conseguir alrededor de este problema sería de registro de información útil en lugares donde usted adivina que podrían producirse problemas y tal vez usar una herramienta como Splunk para el índice de los archivos de registro durante el análisis. Un diagnóstico de la compilación (es decir, con un registro extra) podría ser útil en este caso.

6voto

Calanus Puntos 6164

Estoy justo en el medio de la implementación de un sistema automatizado de informes de error de sistema que envía de nuevo a mí de la información (en la actualidad a través de correo electrónico, aunque se podría usar un webservice) desde cualquier excepción que se encontró la aplicación.

De que manera puedo conseguir (casi) toda la información que yo haría si yo estaba sentado en frente de VS2008 y realmente me ayuda a trabajar de lo que es el problema.

Los clientes son por lo general (sorta) impresionó que sé acerca de su problema tan pronto como se encuentre!

Además, si utiliza la Aplicación.ThreadException controlador de errores que puede enviar de vuelta la información sobre excepciones inesperadas demasiado!

3voto

sharptooth Puntos 93379

Utilizamos todos los métodos que usted menciona, progresivamente, comenzando con el más sencillo y el procedimiento para la más difícil.

Sin embargo se puede olvidar que a veces el hardware es la culpa. Por ejemplo, la memoria podría estar funcionando mal y algunos intensiva de cálculo código se comporta de forma extraña lanzar excepciones con extraños diagnósticos. De cource, funciona en su equipo, ya que no tienen un hardware defectuoso.

La experiencia es necesaria para identificar los errores y los insistir en que el cliente intenta instalar el programa en otra máquina o hardware de verificación. Una cosa que ayuda mucho es un buen tratamiento de errores - cuando el código se lanza una excepción que debe proporcionar los detalles, no sólo indican que algo está mal. Con buena indicación de error es más fácil identificar a los sospechosos problemas relacionados con el hardware defectuoso.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X