Ha enviado, las afirmaciones están desactivadas, recibe un informe de bloqueo raro que indica que se produjo una violación de puntero nulo en su código. En un entorno de desarrollo, el problema habría sido atrapado por una afirmación.
Todo lo que tiene es un informe de bloqueo, por lo que reproducir el problema es casi imposible. Seguir la traza inversa no da ninguna pista de por qué ocurrió el accidente en primer lugar.
Opciones: - Agregar comprobación de puntero para evitar el bloqueo. Esto evitará el bloqueo, pero probablemente ni siquiera descubrirá por qué sucedió en primer lugar. - déjalo volar, espero que vuelva a suceder con un escenario de repro
Digamos que la aplicación no está diseñada para un misil guiado o un sistema de frenado automático ...
¿Cuál escogerías?
Respuestas:
Elegí el segundo enfoque. No tiene sentido ocultar el bloqueo si el puntero NULL fue inesperado en el punto donde se produjo el bloqueo. Este puntero NULL en la mayoría de los casos sería solo uno de los síntomas de que algo más está mal. Si lo ocultamos con un puntero NULL, es casi seguro que algo más se romperá. Siento que tienes una mejor oportunidad de atrapar el escenario si conoces el punto donde se bloquea cada vez en algún lugar al azar.
fuente
¿Con qué frecuencia ocurre el choque? ¿Sucede solo para uno de muchos clientes en algún caso oscuro? ¿Cuáles son las consecuencias (pérdida de datos, bloqueo del sistema)? Si ocurre cada 1 en un millón de casos y solo tienen que reiniciar la aplicación y no se pierden datos, entonces probablemente no necesite arreglarlo, déjelo así.
¿Qué tan costoso (dinero y tiempo) es agregar las afirmaciones y enviarlas a todos los clientes (si solo una parte de los clientes obtiene la nueva versión, el resto podría entrar en el problema nulo no verificado)? ¿Cuáles son las posibilidades de encontrar el problema? Si solo pone controles aleatorios en el código con la esperanza de detectar el error, entonces es una mala práctica ...
¿Se puede reproducir el problema en la máquina del cliente? ¿Puedes acceder a esa máquina? Esto puede ser realmente valioso
Revise sus informes de fallas y asegúrese de que la información provista sea útil y pueda ayudarlo a diagnosticar el problema
fuente
En un orden específico, se habría detectado y reparado, pero la traza actual nunca se ha detectado.
Debería poder ver qué salió mal con el volcado de memoria, ¿ha verificado los parámetros, etc.?
Los extras que se pueden hacer en función de la cantidad de tiempo que desea dedicar a esto:
Archive el volcado de memoria y refiérase a él en el código con un comentario en la línea que bloqueó,
esto permite que uno que examina un volcado de descarga muy similar sepa que ha sucedido antes ...
[tiempo empleado: corto]
Verificaciones adicionales, registro, ... Desea evitarlo y obtener más información la próxima vez.
[tiempo empleado: medio]
Compruebe que es imposible llamar a la aplicación de tal manera para que ocurra esta violación.
[tiempo empleado: largo]
fuente
En estos días, envío con afirmar () activado. No cuesta mucho y puede hacer la vida mucho más fácil en situaciones hostiles (es decir, los entornos de sus clientes a menudo son más hostiles que sus entornos de desarrollo o control de calidad).
fuente