Итак, после некоторых недавних изменений мы обнаружили, что одно из наших самых старых приложений иногда падает при завершении работы. Это проявляется либо в форме сообщений «Runtime error 216», либо в сообщении Windows Error Reporting о том, что приложение перестало работать. Приложение уже отправляет OutputDebugString
-мессий на каждом шагу, и AFAICT весь наш собственный код выполняется правильно до завершения. Все деструкторы вызываются так же, как и все разделы финализации и деструкторы классов, ни один из которых не вызывает никаких исключений.
Кроме того, ни в madExcept, ни в режиме Full Debug FastMM4, похоже, не на что жаловаться (хотя это может быть ложным выводом, потому что сбой может произойти даже до запуска собственного кода завершения этих компонентов).
Итак, что бы вы сделали? С чего бы начать?
Предполагается, что этот вопрос больше относится к общему подходу к этому классу проблем, чем к конкретному случаю, с которым я сейчас сталкиваюсь, поэтому я намеренно опускаю детали. Не стесняйтесь спрашивать, считаете ли вы, что они могут иметь отношение к выбору подхода к отладке, и я добавлю их позже.