Я пишу COM-объект C++ в Visual Studio 2008, который является вспомогательным объектом браузера Internet Explorer. В последнее время при работе в IE в IE часто появлялось диалоговое окно с названием «Библиотека времени выполнения Microsoft Visual C++» с сообщением об ошибке «Ошибка выполнения!». и продолжая говорить, что «приложение запросило среду выполнения необычным образом. Пожалуйста, свяжитесь со службой поддержки приложения для получения дополнительной информации». В отличие от обычного, в этом диалоговом окне есть только кнопка ОК, но нет кнопки отладки, поэтому IE затем завершается, и у меня не остается даже трассировки стека или даже намек на то, какая часть моего кода могла быть настолько ошибочной. Я не уверен, что где в моем коде дает сбой.
Как устранить проблему «Ошибка выполнения»? Каковы возможные причины ошибки выполнения? (Возможно, ошибки, связанные с памятью?) Какие проблемы я должен проверять в своем коде, чтобы попытаться устранить такого рода сбой? Мне нужны идеи о том, как решить эту проблему, это немного неуловимо.





Когда вы увидите это диалоговое окно, запустите VS2008 с вашим проектом COM-объекта. Затем используйте меню Debug-> Attach to process, чтобы присоединить отладчик к процессу IE, в который загружен ваш COM-объект. Затем войдите в процесс (Debug-> break all), и вы получите трассировку стека.
Он взрывается из-за необработанного исключения. Это дает вам возможность остановить отладчик при первом исключении, прямо в момент его возникновения. Откройте ваш проект, сделайте iexplorer.exe программой запуска. Debug + Exceptions, проверьте флажок Thrown для неуправляемых исключений. Сделайте сбой, чтобы получить точку останова.