¿Cómo depurar un bloqueo que solo ocurre al cerrar la aplicación? (Delphi)

Entonces, después de algunos cambios recientes descubrimos que una de nuestras aplicaciones más antiguas a veces falla al apagarse. Esto se manifiesta en forma de mensajes de "Error de tiempo de ejecución 216" o en un mensaje de Informe de errores de Windows de que la aplicación ha dejado de funcionar. La aplicación ya está emitiendoOutputDebugString -messages a cada paso y AFAICT todo nuestro propio código se ejecuta correctamente hasta su finalización. Se llama a todos los destructores, así como a todas las secciones de finalización y destructores de clase, ninguno de los cuales genera excepciones.

Además, ni MadExcept ni el Modo de depuración completa de FastMM4 parecen tener nada de qué quejarse (aunque esa podría ser una conclusión falsa porque el bloqueo podría ocurrir incluso antes de que se ejecute el código de finalización de esos componentes).

¿Entonces, qué harías? ¿Dónde comenzarías?

Se supone que esta pregunta tiene que ver más con el enfoque general de esta clase de problemas que con la instancia específica que estoy enfrentando actualmente, por lo que deliberadamente omito detalles. No dude en preguntar si cree que podrían ser relevantes para la elección del enfoque de depuración, y los agregaré más adelante.

Respuestas a la pregunta(6)

Su respuesta a la pregunta