Почему Visual Studio 2008 пропускает мои точки останова? - PullRequest
5 голосов
/ 18 марта 2009

Я использую Visual Studio 2008 с пакетом обновления 1 (SP1). Когда я отлаживаю приложение, оно пропускает мои точки останова.

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

Я попытался очистить решение и восстановить.

У меня есть несколько проектов в решении.

Ответы [ 13 ]

17 голосов
/ 18 марта 2009

Несовместимость файлов символов

Возможно, ваш файл символов (.pdb) не синхронизирован с вашим исходным кодом. Распространенным симптомом этого является:

  • Остановка в точке останова на строке кода
  • пошаговое выполнение кода
  • Видение остановки указателя отладки на пустой строке кода

При отладке вы никогда не должны видеть остановку указателя отладки в пустой строке, и это будет указывать на то, что у вас где-то есть несоответствие символа / источника.

Такое несоответствие может также привести к пропуску точек останова, как вы видите, но очистка решения обычно исправляет его (и, похоже, вы уже пробовали это).

Конфигурация сборки

Другой вариант (как предлагали другие) заключается в том, что вы не создаете Debug конфигурацию. Хотя можно отлаживать сборку Release, код значительно оптимизирован, что может сделать отладчик странным, например

  • При выполнении условия (то есть блока if) может появиться впечатление, что выполняются как if, так и else
  • Некоторые биты кода полностью оптимизированы, и вы не можете их взломать

Что вы пытаетесь сломать?

Еще одна важная вещь, которую стоит отметить, - это то, что точки останова не могут быть установлены на каждой строке кода. Например, если ваш код имеет только инициализацию переменной:

long numObjects;

точка останова, как правило, не будет установлена ​​должным образом (хотя обычно она перемещается на следующую строку «реального» кода). Однако, если ваша строка кода инициализирует переменную:

long numObjects = 5;

точка останова может быть установлена ​​.

6 голосов
/ 18 марта 2009

Попробуйте удалить файл .SUO для этого проекта, а затем пересобрать.

3 голосов
/ 18 марта 2009

Убедитесь, что вы создаете свое приложение с конфигурацией отладки.

1 голос
/ 08 мая 2013

У меня была та же проблема, и установка VS 2010 SP1 решила эту проблему. У меня был побочный эффект взлома Intellisense в SQL 2008, о котором вы можете прочитать здесь: Sql Server 2008 R2 Management Studio - нет Intellisense

1 голос
/ 15 декабря 2011

Кроме того, удаление запуска в режиме совместимости для исполняемого файла VS решает проблему.

1 голос
/ 10 декабря 2011

У меня была такая же проблема в VS 2008 и я попробовал все, потратив около 1 часа, но это не помогло.

Наконец-то попробовал запустить VS без прав администратора, а затем Clean Solution-> Rebuild Solution и работал нормально.

Не нравится VS на Win 7

1 голос
/ 15 февраля 2011

В дополнение к вышеупомянутым методам, я также столкнулся с другой парой обстоятельств, когда точки останова не достигаются:

  • Источник из другого дерева каталогов. Это может произойти, если вы переименовали каталог, так как пути жестко закодированы в файлы pdb. Это застало меня врасплох, когда у меня были каталоги trunk и branch, которые я обменивал и VS открывал файлы в другом каталоге.
  • Если исполняемый файл все еще работает в фоновом режиме, что иногда может произойти, если приложение не завершается корректно или каким-то образом mspdbsrv.exe все еще прикреплено к нему, поэтому проверьте список процессов. Перезапуск Visual Studio часто исправляет это.
1 голос
/ 14 января 2011

У меня была такая же проблема с MS Visual Studio 2008 SP1. Файлы PDB соответствовали исполняемым файлам, поэтому проблем не было.

Проблема была Visual Assist. Я отключил его в «Инструменты | Диспетчер надстроек», и после этого не было проблем с пропуском точек останова. Поэтому отключите все надстройки, которые есть в Visual Studio, и установите последнюю версию SP (сейчас это SP1).

1 голос
/ 20 октября 2009

У меня была эта проблема, и мне пришлось установить исправление. Подробнее см. http://social.msdn.microsoft.com/Forums/en-US/vsdebug/thread/f3fcb4fb-8a08-4fa0-8d58-9ed6f3eb1193

1 голос
/ 18 марта 2009

Предполагая, что загрузка символа не является проблемой, вы можете установить BP на сам метод и убедиться, что он действительно вызывается дважды (путем изучения стека вызовов).

...