Visual Studio Debugger пропускает точки останова - PullRequest
14 голосов
/ 08 января 2010

Моя Visual Studio 2008 IDE ведет себя очень странным образом при отладке модульного теста: у меня есть точка останова, и когда я ее достигаю, а затем пытаюсь выполнить F10, тест завершается. Если я установлю точки останова в каждой строке в тестируемом методе, я получу случайную, а не следующую в следующей строке. Я очистил и перестроил решение после перезагрузки чистой системы. Поведение сохраняется. Кто-нибудь еще испытал это и пришел к выводу.

В этом тесте использовался только основной поток выполнения (дополнительные потоки не создаются)

Ответы [ 13 ]

27 голосов
/ 28 января 2010

Было выпущено исправление VS2008 SP1, которое решает ряд проблем отладки. Статья базы знаний здесь , загрузка исправления здесь .


ОБНОВЛЕНИЕ: местоположение загрузки исправления было удалено, я не знаю альтернативного местоположения загрузки. Пожалуйста, отредактируйте этот пост, если найдете его.

9 голосов
/ 08 января 2010

Это происходит, если вы отлаживаете сборку релиза (поскольку строки оптимизированы).

Это также случалось со мной в прошлом, если я случайно отлаживал более старый exe-файл где-то еще (как установлено в конфигурации проекта) вместо самого последнего билда; ^)

4 голосов
/ 08 января 2010

У меня были похожие проблемы на VS 2003. Оказалось, что я использовал неправильные символы, поэтому они не могли быть привязаны к правильному источнику.

Убедитесь в следующем:

  1. То, что вы используете сборку Debug (или что любой вид оптимизации отключен)
  2. С этим выходным путем сборки все в порядке («Свойства проекта \ Linker \ Output File» соответствуют исполняемому файлу, который вы отлаживаете)
  3. что вы не ставите точки останова в объявлениях переменных: т.е. если вы ставите точку останова на «int some_variable;», вы никогда не достигнете ее, но вместо этого вы попадете на первое место после нее, где вы определяете \ инициализируете что-то или вызываете некоторые методы
  4. Вы не можете войти с помощью F10 (выполняет следующий оператор), но с помощью F11 (выполняет следующий оператор и следует за выполнением в вызовах методов)
  5. Убедитесь, что у вас нет фильтров на контрольных точках (т. Е. Число попаданий или условие)

p.s. попробуйте разместить DebugBreak (); функция в обоих методах (если этот код не выполняется внутри некоторого цикла, так что это может быть неприятно). Это должно привести к прекращению вашего процесса, когда выполнение достигнет любой из этих функций (так что вы можете продолжить отладку из этого конкретного места).

3 голосов
/ 28 января 2010

Это также происходит, когда у вас запущено несколько потоков.

2 голосов
/ 29 января 2010

Вы помещаете свои точки останова в код, который является частью сгенерированного класса?

Я столкнулся с этой проблемой на клиентском сайте справочной службы. Сгенерированные классы являются частичными классами с

    [System.Diagnostics.DebuggerStepThroughAttribute()]

атрибут применен. Даже когда моя точка останова была в другом файле, но все еще являлась частью атрибутного класса, точка останова будет пропущена.

Я удалил этот атрибут из сгенерированного файла Reference.cs, и отладчик работал как я ожидал.

Конечно, это не постоянное решение, потому что если файл Reference.cs будет восстановлен, атрибут возвращается.

2 голосов
/ 25 января 2010

Даже в сборке Debug оптимизация компилятора может объяснить это поведение. В свойствах проекта «Построить» убедитесь, что флажок «Оптимизировать код» отключен. Я видел, что это включено по умолчанию после обновления некоторых проектов из .Net 1.1.

0 голосов
/ 02 августа 2017

Мои модульные тесты тестировались под x86. Смена их на х64 сработала.

Меню

Test -> Test Settings -> Default Processor Architecture -> x64.

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

Я только что столкнулся с теми же проблемами и прошел все вышеизложенные предложения без удачи. Давай узнаем, что когда-то в прошлом кто-то изменил сигнатуру метода на «приватную», когда она должна быть «статической» или «публичной». Как только я изменил сигнатуру тестового метода обратно на «public», точки останова снова заработали.

0 голосов
/ 29 апреля 2015

Я столкнулся с этим в Visual Studio Community 2013. Поведение, кажется, было разработано. При запуске тестов выполнение не останавливается на точках останова. Если вы хотите, чтобы выполнение остановилось на точках останова, выберите TEST -> Debug, а не TEST -> Run.

0 голосов
/ 08 января 2014

Может быть, уже слишком поздно, чтобы ответить, я получил ту же проблему в VS2012, чтобы исправить это, пожалуйста, проверьте, если проверено меню Test> TestSettings> "LocalTestRun.TestRunConfig", если это отмечено, снимите флажок, и он перестанет пропускать код линий. Может быть то же самое для Vs2008 и работать.

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