Как отследить периодический сбой, который происходит только под отладчиком, но не обнаруживается им?

У меня есть странный прерывистый сбой, который возникает только при некоторых обстоятельствах , и у меня возникают проблемы с решением, и я ищу совета SO о том, как

Ошибка

В случайных местах Windows показывает диалоговое окно «[Приложение] перестало работать». Это APPCRASH в ntdll.dll, код исключения 4000001f, смещение исключения 000a2562. Здесь возникает сложность: это происходит только при запуске приложения в отладчике. Однако отладчик не перехватывает это исключение, и в момент, когда Windows показывает это диалоговое окно, среда IDE не отвечает. Эта ошибка не возникает при нормальной работе, то есть вне отладчика IDE.

Screenshot of the Windows crash dialog

Я не могу воспроизвести ее вне отладчика, поэтому я не могу запустить программу и подключиться, когда она уже вылетела. Я не могу приостановить выполнение, когда Windows показывает это диалоговое окно, так как IDE не отвечает. Я могу вручную проследить по строкам кода, чтобы увидеть, где это происходит. Их несколько, и где это происходит, очевидно, случайно. Некоторое время это происходило при отображении окна (или новой формы), какое-то время при создании потока.

Изменить: Я отследил это до IDE: если я остановлюсь на точке останова и щелкните вкладку «Состояние потока», программа немедленно завершит работу с указанным выше диалоговым окном, даже если оно теоретически приостановлено. В этой ситуации IDE остается отзывчивой. Это действительно странно.

Дополнительная информация

Я только что переместил свою среду разработки на VMWare Fusion . Ошибка также возникает при запуске сборки с моего старого (родного Windows) компьютера на моем новом компьютере; это не произошло с тем же EXE-файлом на старом компьютере. Это заставляет меня задуматься, связано ли это с Fusion или чем-то еще в моей новой установке.

Я использую:

  • Windows 7 Pro x64 на WMWare Fusion 3.1.3 на OSX Lion 10.7.1, все полностью обновлено. Fusion работает в полноэкранном режиме на одном из моих экранов.
  • Коллега, работающий с Windows 7 изначально (не на виртуальной машине), не сталкивался с этой проблемой. На моем старом компьютере Vista тоже не было.
  • Embarcadero RAD Studio 2010, полностью обновленный (надеюсь, есть около пяти обновлений, и получить их все по порядку непросто). У меня установлен DDevExtensions 2.4.1 и последняя IDE. Fix Pack тоже: удаление обоих не имеет никакого эффекта.
  • Приложение написано в основном на C ++, с фрагментами Delphi. Он 32-битный.
  • Мы используем EurekaLog , но он также не перехватывает исключение. (Обычно исключение сначала перехватывается отладчиком, а затем EurekaLog.)
  • Запуск отладочной сборки (без EurekaLog, дополнительной отладочной информации и т. Д., Отладочные DCU, установленные в значение true) также воспроизводит его. Однако опция «Debug DCUs» на странице Delphi Linking в диалоговом окне настроек проекта C ++ Builder, похоже, не действует - я не могу войти в код VCL и найти строку, которая действительно вызывает ошибку.
  • Codeguard (который обнаруживает ошибки доступа к памяти, двойное освобождение, доступ к освобожденной памяти, переполнение буфера и т. Д.) Ничего не сообщает.

8
задан David 22 August 2011 в 23:09
поделиться