Отладчик Visual Studio 2010 переходит через методы и не останавливается на точках останова - PullRequest
28 голосов
/ 10 января 2011

Мой отладчик Visual Studio 2010 иногда ведет себя очень странно ...

Иногда он не останавливается на точках останова, но когда он останавливается, и я хочу войти в метод, отладчик просто переступает через него. Также точки останова в этих перешагнутых методах игнорируются.

Когда происходит такое странное поведение, оно также не нарушает исключения, а просто игнорирует их.

Я пытался пересобрать свой проект, сбросить настройки Visual Studio и отключить настройки отладчика, такие как «Разрыв только в моем коде», но ничего не помогло.

Как мне решить эту проблему?

Ответы [ 12 ]

37 голосов
/ 10 января 2011

Вот несколько причин и обходных путей, по которым Visual Studio будет избегать использования определенного метода.

  • Только мой код включен. В некоторых случаях настройка «Просто мой код» не позволит вам войти в метод / свойство. Чтобы избежать этого, вы можете отключить «Просто мой код» на странице параметров отладчика (Сервис -> Параметры -> Отладчик -> Снимите флажок «Просто мой код»)
  • Символы не загружаются для целевого метода. Если целевой метод является частью другой библиотеки DLL, возможно, символы не загружены для этой библиотеки DLL и, следовательно, Visual Studio не сможет войти в нее по умолчанию. Чтобы принудительно загрузить символы, откройте представление «Модули» (отладчик -> Windows -> Модули), перейдите к библиотеке DLL, содержащей метод, щелкните правой кнопкой мыши и загрузите символы.
  • Метод явно помечен атрибутом отладчика, таким как DebuggerNonUserCode, который заставляет отладчик перешагнуть метод.
  • Метод на самом деле является свойством или оператором, и у вас включена настройка «Свойства перехода и свойства» (это значение по умолчанию). Это можно отключить в диалоговом окне параметров отладчика.
4 голосов
/ 15 апреля 2016

Еще одним источником путаницы являются методы итератора , которые используют оператор yield return , поскольку они переписываются компилятором C # таким образом, что вход в них (F11) является своего рода a " no-op ".

Вы должны дождаться, пока произойдет итерация, чтобы ворваться в код метода.

4 голосов
/ 29 июня 2012

В моем случае это было «Перешагнуть через свойства и операторы» в Сервис -> Параметры -> Отладчик.Просто пришлось снять галочку, и после этого все было хорошо, я мог вступить.

3 голосов
/ 11 января 2011

Я нашел решение проблемы, и оно действительно простое:

В конфигурации сборки моего решения флажок «Сборка» проекта, где методы перешагивают, не был отмечен. Я проверил, и теперь все работает.

2 голосов
/ 10 января 2011

Самая важная вещь, которую нужно проверить, - это если при попытке поместить новую точку останова в метод, в который она отказывается входить, если точка останова заполнена красным, как остальные, или наполовину заполнена, или имеет особый «вид». Если это так, наведите курсор на созданную вами точку останова, чтобы выяснить, почему она не работает.

Если точка останова выглядит нормально, но вы все равно не можете войти в метод, попробуйте очистить кэш теневой копии: http://weblogs.asp.net/mreynolds/archive/2003/08/11/23576.aspx

Еще одна попытка - убедиться, что вы действительно используете DLL, которую вы только что перестроили, добавив MessageBox.Show (или что-то похожее) к методу, на котором вы не можете остановиться, и убедитесь, что возьми ящик.

1 голос
/ 15 августа 2012

Я только что нашел другую причину проблемы и ее решение. Я создаю приложение Windows Forms с использованием C ++ в Visual Studio 2010. Я использую библиотеку FreeType и некоторый код, который зависит от нее, и по разным причинам этот код должен быть скомпилирован с выбранной опцией «Нет поддержки общего языка» (Свойства -> Свойства конфигурации -> Общие). Мне не удалось получить точки останова для этого не-CLR кода.

Исправление состоит в том, что основное приложение должно быть скомпилировано с «Common Language Runtime Support (/ clr)», а не «Pure MSIL Common Language Runtime Support) (/ clr: pure)». Это сразу решило проблему. Теперь я могу отлаживать и устанавливать контрольные точки не-CLR-кода, включая код FreeType C.

1 голос
/ 02 марта 2012

Я боролся с этим некоторое время. Ни один из приведенных ответов не помог мне. Я наконец заставил его работать следующим образом:

  1. Убедитесь, что проект находится в режиме отладки (все проекты)
  2. Из Windows перейдите в командную строку и обязательно запустите от имени администратора
  3. Перейдите к c:\windows\syswow64\ (или папке, в которой находится gacUtil.exe)
  4. Выполните следующую команду (ниже укажите путь, по которому находится ваша отладочная выходная версия DLL.

gacutil /i "C:\Users\John\Documents\Visual Studio 2008\Projects\Project1\Project1\bin\Debug\MyAppDLL.dll"

Вы должны получить «Сборка успешно добавлена ​​в кеш»

Теперь запустите ваш проект, и вы сможете войти в код DLL.

1 голос
/ 10 января 2011

WAG здесь, но я бы сказал, что вы ссылались на другой проект в своем решении, БРАУЗИНГ к dll (project / bin / debug / mydll.dll), а не добавив «Ссылку на проект».Если в вашем решении несколько проектов, удалите ВСЕ ссылки на каждый проект.Затем в диалоговом окне «Добавить ссылку» перейдите на вкладку «Добавить ссылку на проект» и выберите проект, на который вы хотите сослаться.

Ссылки на проекты всегда обновляются при новой сборке.Но если вы, скажем, зайдете в bin / release и добавите ссылку на dll в этом каталоге, когда вы переключитесь в режим отладки, добавите код и попытаетесь отладить его, старая версия dll загрузки будет загружена в домен приложения иVS не сможет достичь ни одной точки останова (вы заметите, что точки останова - пустые кружки, и всплывающая подсказка скажет что-то о том, что код не загружается).

0 голосов
/ 03 апреля 2017

Моя проблема была проста.У меня есть несколько проектов в решении, и мне просто нужно установить проект, с которым я работаю, как Установить как стартовый проект.

0 голосов
/ 29 декабря 2015

Попробуйте отключить опцию «Требовать, чтобы исходный файл был точно подобран» в tools-> options-> debugging-> general.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...