Не удается подключиться к процессу в .net 4.0 - PullRequest
6 голосов
/ 28 марта 2011

** сообщение отредактировано, более подробная информация ниже

Я только что посмотрел два отличных видео о расширенной отладке Dotnet (от Брайана Расмуссена) и пытаюсь повторить некоторые шаги, но просто не знаю, как поступить с этой ошибкой:

An attempt to set a processes DebugPort or ExceptionPort was made,
but a port already exists in the process.

Я нашел несколько ответов в Google, и я в целом понимаю, что говорит ошибка, но я просто не понимаю один странный факт: когда я компилирую свое простое приложение <.NET 4.0, я могу присоединиться, как показано в фильме, пытаясь сделать то же самое после компиляции таргетинга .NET 4.0 отключает меня от присоединения. </p>

В одном из ответов Google говорится: «Попробуйте подключиться с помощью windbg, используя неинвазивный режим», но ... Брайан не использует ни один из таких флажков. Это просто работает на его видео.

Какая разница? Где подвох? Это Windows 7 против Vista? Может быть, какие-то другие параметры компиляции имеют значение?

Я использую MS VS 2k10 с MS SDK с Windbg x86, загруженным из msdn, и символы, правильно настроенные для http-сервера. Система MS Vista x86.

Ресурсы (точное время> = 8:15): http://channel9.msdn.com/posts/MDCC-TechTalk-Advanced-NET-Debugging-part-2

Edit: Ошибка отображается при подключении к процессу, который был запущен из VS. При попытке подключиться к процессу, который был запущен / вне VS, windbg не показывает никакого контента.

Edit2: У Windbg были некоторые проблемы с освежением в моей системе. Используя несколько раз пункт меню «Windows \ [Undock | Dock all]», я смог увидеть содержимое присоединенного процесса, который отсутствовал.

Итак, единственный вопрос сейчас: В чем разница при присоединении к процессу, запущенному из VS, когда он компилируется один раз с использованием target <4.0 и снова = 4.0? Почему при таргетинге 4.0 windbg не может подключиться к процессу в неинвазивном режиме. Что изменилось в VS 2k10? </p>

1 Ответ

8 голосов
/ 28 марта 2011

Я так понимаю, вы отлаживаете в Visual Studio (F5), а затем пытаетесь подключиться.У вас может быть только один активный отладчик за раз, поэтому вы получаете эту ошибку.Если вы хотите запустить процесс из VS, запустите его без отладки (Ctrl-F5).Если вы сделаете это, вы сможете подключиться из WinDbg.

РЕДАКТИРОВАТЬ : Извините, я упустил момент, когда различные версии .NET ведут себя по-разному в этом отношении, поэтому позвольте мне попытаться ответить на ваши вопросы снова.Причина, по которой это «просто работает» в видео, заключается в том, что я использую команду run без отладки при каждом запуске из VS.Так что если вы просто хотите следовать примерам в видео, все, что вам нужно сделать, это запустить без отладки.

Я начал использовать WinDbg / SOS на CLR2 и x86.Запуск процесса x86 .NET из VS тогда вызвал бы ошибку, поэтому я привык просто запускать без отладки.

Однако, как вы обнаружили, существуют сценарии, в которых вы можете подключиться к процессу, который отлаживается VS.Я могу воспроизвести сценарии, которые вы описываете, но я также могу подключиться к процессу x64, .NET 2, начавшемуся с отладки из VS2008, но я не могу подключиться к тому же процессу, если платформа установлена ​​на x86.

Очевидно, есть тонкие различия, о которых я не знал, и, похоже, это не связано исключительно с версией .NET, поскольку я могу подключиться к процессу x64 .NET2, даже если онпод контролем отладчика VS.

Я обновлю свой ответ, если найду дополнительные сведения.

...