Как я могу отладить необработанное исключение в управляемом коде при вызове из COM?

#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
  • Выберите свой процесс из доступных процессов
  • Нажмите Прикрепить

Это должно включить как управляемую, так и неуправляемую отладку в неуправляемом процессе. Теперь вы можете устанавливать точки останова или перехватывать исключения первого шанса в управляемом коде, предполагая, что у вас есть символы.