Tiene el código fuente de una aplicación que se bloquea después del lanzamiento. Después de diez ejecuciones en el depurador, encontrará que el programa se bloquea en diferentes lugares cada vez. La aplicación es de un solo subproceso y utiliza solo la biblioteca estándar C. ¿Qué errores pueden hacer que la aplicación se bloquee? ¿Cómo revisas cada uno?
La pregunta depende en gran medida del tipo de aplicación que se diagnostique. Sin embargo, podemos proporcionar algunas razones comunes de fallas aleatorias.
- Variable "aleatoria": una aplicación puede utilizar algún valor "aleatorio" o una variable de componente que no tiene un significado preciso específico. Ejemplos: entrada del usuario, número aleatorio generado por el programa, hora del día, etc.
- Variable no inicializada: una aplicación puede usar una variable no inicializada, que en algunos lenguajes de programación puede tener cualquier valor por defecto. Por tanto, el código se puede ejecutar de forma diferente cada vez.
- Pérdida de memoria: el programa puede haber agotado todos los recursos. Otras razones son aleatorias y dependen de la cantidad de procesos que se ejecutan en un momento determinado. Esto también incluye un desbordamiento de pila o corrupción de datos en la pila.
- Causas externas: un programa puede depender de otra aplicación, máquina o recurso. Si hay muchas de estas conexiones, el programa puede "fallar" en cualquier momento.
Para encontrar el problema, debe estudiar la aplicación tanto como sea posible. ¿Quién lo lanza? ¿Qué están haciendo los usuarios? ¿Qué hace la propia aplicación?
Aunque la aplicación no se bloquea en una ubicación específica, es posible que el bloqueo en sí esté relacionado con componentes o escenarios específicos. Por ejemplo, una aplicación puede seguir funcionando al iniciarse, pero solo se bloquea después de cargar un archivo. O bien, la falla ocurre en el área de responsabilidad de los componentes de bajo nivel, por ejemplo, durante la E / S de archivos.
Puedes hacer pruebas selectivas. Cierre todas las demás aplicaciones. Supervise todos los recursos gratuitos con mucho cuidado. Si es posible deshabilitar partes del programa, hágalo. Ejecute el programa en otra máquina y vea si ocurre este error. Cuanto más podamos cambiar, más fácil será encontrar el problema.
Además, se pueden utilizar herramientas especiales para comprobar situaciones específicas. Por ejemplo, para investigar la causa de los errores de tipo 2, puede utilizar depuradores que comprueben las variables no inicializadas. Desafíos como estos te permiten demostrar no solo tu inteligencia, sino también tu estilo de trabajo. ¿Saltas constantemente de uno a otro y haces suposiciones al azar? ¿O aborda el problema con lógica? Me gustaría esperar lo último.
Análisis tomado de Cracking the Coding Interview por Gail L. McDowell (disponible en traducción ).
Comentarios