#c# #.net #debugging #visual-studio-2005
#c# #.net #отладка #visual-studio-2005
Вопрос:
У меня есть компонент C # .NET, который вызывается из COM-файла ActiveX exe, находящегося вне процесса.
Я могу запустить отладчик в Visual Studio 2005, работающий на моем COM exe, который вызывает мой компонент .NET. Точки останова работают, но прерывание необработанного исключения «Набор ссылок на объект» — нет. Я пробовал следующее, но безрезультатно:
- проверили все исключения CLR в диалоговом окне VS Exceptions
- включено «Прерывание, когда исключения пересекают домен приложения или управляемые / собственные границы»
- включена отладка неуправляемого кода в моем проекте
- отключена отладка «Только моего кода»
Комментарии:
1. Когда вы проверяли все исключения CLR в диалоговом окне VS Exceptions, вы использовали столбец user-unhandled или столбец throwned? Это только предположение, но я подозреваю, что COM / Управляемый код взаимодействия будет обрабатывать исключения, чтобы превратить их в подходящие значения HRESULT.
2. Я проверил как необработанное пользователем, так и выброшенное. Я думаю, вы правы, Фрэнк — COM обрабатывает исключения. Я нашел это blogs.msdn.com/b/oldnewthing/archive/2011/01/20/10117963.aspx но не уверен, как установить IGlobalOptions
Ответ №1:
Что я обычно делаю, так это добавляю вызов System.Diagnostics.Debugger.Launch;
в точке входа моего управляемого кода. Это запустит отладчик, если программа еще не находится активно в режиме отладки. Имейте в виду, что вам нужно будет удалить эту строку после завершения отладки, поскольку вы не хотели бы сохранять вызов для запуска отладчика в релизной версии.
Комментарии:
1. Это сработало! Выяснилось, что я подключался к неправильному процессу. Я подключался к родительскому COM-компоненту, вызывающему мой управляемый код, и я должен был подключаться к самому COM ActiveX exe.
Ответ №2:
Вместо того, чтобы запускать свое программирование с F5
, вы можете запустить неуправляемую программу, а затем подключиться к ней:
Для Visual Studio 2005:
- Запустите (не отлаживайте) неуправляемый проект из Visual Studio с
Ctrl F5
- Откройте диалоговое окно «Присоединить к процессу»: Отладка -> Присоединить к процессу …
- Нажмите кнопку Прикрепить к: выбору: Выберите …
- Выберите: Отлаживать эти типы кода:
- Проверьте эти элементы: Управляемый, собственный
- Нажмите OK
- Выберите свой процесс из доступных процессов
- Нажмите Прикрепить
Это должно включить как управляемую, так и неуправляемую отладку в неуправляемом процессе. Теперь вы можете устанавливать точки останова или перехватывать исключения первого шанса в управляемом коде, предполагая, что у вас есть символы.