Visual Studio - некоторые точки останова не нарушаются

У меня есть решение в Visual Studio 2010 с 9 проектами, которое находится под управлением исходным кодом с помощью Source Safe. Я недавно смахнул свой жесткий диск и обновился до Win7 x64 с WinXP x86 (давно пора!). Когда я проверил решение на «новой» машине, некоторые части теперь работают некорректно, поэтому я пытаюсь отладить его.

Пожалуй, стоит отметить, что раньше я работал с VS2008. Когда я обновился, я сначала открыл проект в VS2008, чтобы убедиться, что он работает, и заметил, что есть проблемы, которые мне нужно отладить. Я установил несколько точек останова, и пара сработала, а пара - нет. Я не мог сразу понять, почему некоторые из них не ломаются, поэтому решил продолжить и обновить проект до VS2010, надеясь, что все пройдет само. Это не так.

Основной проект вызывает общедоступную подпрограмму в общедоступном модуле в проекте, который является библиотекой, на которую ссылается любой другой проект. У меня есть точка останова в основной форме Form_Load, которая успешно прерывается, как только начинается выполнение кода. Form_Load вызывает вышеупомянутую общедоступную подпрограмму, которая также имеет точку останова. Но эта точка останова НЕ ломается. Другими словами, отладчик остановится на вызове ProjectStartupActions(), но не остановится на определении Public Sub ProjectStartupActions() или любой строке в нем.

Если я «Перейти к определению» при подвызове в Form_Load, он переходит в правильное место, где у меня есть точка останова, поэтому я уверен, что правильно установил точку останова.

Мой проект >> Отладка >> Конфигурация установлена ​​на «Активный (отладка)», а платформа - «Активна (любой ЦП)» для всех проектов. Чтобы еще раз подтвердить, что он должен работать в отладке, а не в выпуске, если я открою окно проводника в папке «Отладка» для проекта библиотеки и очищу проект, папка опустеет. Когда я перестраиваю или запускаю, все файлы заменяются.

Спасибо за любую помощь.

Ах да, также я внес изменения в код Public Sub ProjectStartupActions(). Я добавил MsgBox("Hello") в первую строку в подпункте, но он никогда не всплывает.


person jwatts1980    schedule 18.01.2011    source источник
comment
Найдите в окне «Вывод» сообщение о «первом шансе исключения». Установите целевую платформу на x86, чтобы отладить ее.   -  person Hans Passant    schedule 18.01.2011
comment
Я открыл окно вывода, очистил проект, затем перестроил и запустил. В списке не было исключения «первого шанса». Кроме того, не могли бы вы прояснить, почему мне нужно настроить таргетинг на x86 специально для отладки? Я попробую ваше предложение, но у меня нет проблем с остановкой на точке останова в основном проекте с текущими настройками.   -  person jwatts1980    schedule 18.01.2011
comment
Я установил платформу на x86, и она остановилась на точке останова. Он также выскочил из окна msgbox. :) Потрясающий. Почему это не работает для любого процессора? Кроме того, я новичок в SO, как мне отметить ваш комментарий как ответ?   -  person jwatts1980    schedule 19.01.2011


Ответы (2)


Установите цель на x86, чтобы отладить его. - Ханс Пассан

Это сработало! Спасибо!! Я использовал Configuration Manager, чтобы изменить цель всего решения на x86.

Но почему это сработало? Почему опция "Any CPU" не работает в основном проекте, но не в библиотеке?

person jwatts1980    schedule 18.01.2011
comment
Мне тоже любопытно, почему это работает, и что, черт возьми, случилось с этим проектом, чтобы сделать это необходимым ... - person Didaxis; 04.10.2012

Ах да, также я внес изменения в код Public Sub ProjectStartupActions(). Я добавил MsgBox("Hello") в первую строку подпрограммы, но она никогда не всплывает.

Похоже, что зависимости вашего проекта неверны. Убедитесь, что проект основной формы зависит от библиотеки project, в которой есть функция ProjectStartupActions() (и не зависит от какой-либо уже созданной сборки библиотеки).

Это должно сделать так, чтобы VS при необходимости перестроил сборку библиотеки и ссылался на только что созданную сборку.

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

person Michael Burr    schedule 18.01.2011
comment
Я открыл «Мой проект» ›› Ссылки на основной проект. Целевым расположением библиотеки была папка отладки библиотеки. Тем не менее, я удалил ссылку, и сохранил. Очевидно, я не мог работать, потому что было много ошибок. Я нажал «Добавить», выбрал вкладку «Проекты» и повторно добавил проект библиотеки. Затем я перепроверил его как импортированное пространство имен. Ошибки исчезли, поэтому я очистил решение, перестроил и запустил его. Точка останова все еще не сломалась. Я сделал и другие мелочи, например, переместил точку останова или удалил ее и запустил, а затем повторно добавил. - person jwatts1980; 18.01.2011
comment
Я пробовал что-то еще, что не сработало. После того, как я прошел через процесс, описанный в моем комментарии, я подумал, что где-то должна быть DLL для библиотеки, которую использует проект. Я поискал DLL в папке решения и нашел несколько в некоторых папках Release, которые были артефактами из более ранних сборок Release. Я пошел дальше и полностью очистил все папки Release для каждого проекта. Затем я снова очистил раствор. Восстановил его снова. Потом снова запустил. Опять провал. - person jwatts1980; 18.01.2011
comment
Когда вы находитесь в отладчике, посмотрите в окно модулей, чтобы увидеть, откуда загружается сборка библиотеки. Это может дать вам подсказку либо о файле, который необходимо удалить, либо о параметре конфигурации проекта, который необходимо изменить. - person Michael Burr; 19.01.2011