Предупреждение о прерывании Visual Studio
При отладке моего кода я часто бросаю контрольные точки, чтобы проверить значения локальных переменных, чтобы убедиться, что все на правильном пути.
В последнее время, когда я вношу изменения в свой код и перекомпилирую, все мои точки останова превращаются в контур круга (вместо полного красного круга), и это дает мне ошибку, которая читает:
В настоящий момент точка останова не будет удалена. Отсутствует исполняемый код. связанные с этой строкой. Возможные причины: условные оптимизация компиляции или компиляции.
Что странно в этой проблеме, так это то, что я могу просто удалить и добавить точку останова, и все будет работать нормально.
Я не использую никаких условных компиляций или оптимизаторов. Кто-нибудь знает, что это значит или как это исправить? Это становится довольно раздражающим, заменяя 10-12 точек останова при каждом компиляции.
Ответы
Ответ 1
Это может произойти по нескольким причинам.
- Код, используемый отладчиком, отличается от кода, выполняемого приложением
- Файл pdb, используемый отладчиком, отличается от кода, выполняемого приложением
- Был оптимизирован код, в котором выполняется приложение, и была удалена информация об отладке.
- Код, в котором у вас есть точки останова, еще не загружен в процесс (предполагая, что выше перечисленные выше не являются виновниками)
- Если вы прикрепляете отладчик, обратите внимание на то, к какой инфраструктуре он подключен (у меня были проблемы с ним, используя .net 4, когда код был всем .net 2.0)
- У вас есть сборка в GAC. Это может произойти, если вы сказали, что вы установили свою программу, чтобы вы могли ее отладить, но установщик поместил dll в GAC.
- Удалите ссылку и добавьте ее (спасибо forsvarir). Обычно это происходит, когда проект, на который делается ссылка, не находится в решении, а VS будет копировать dll из каталога bin другого проекта. Вы узнаете, что это проблема, когда вы пытаетесь повторно добавить ссылку и не можете найти проект:)
Очень сложно понять, что происходит здесь, но я бы предложил использовать средство просмотра журнала слияния, чтобы посмотреть, что загружается и где оно загружается, а затем вы можете посмотреть на DLL и посмотреть, не старый ли он код, и др.
Ответ 2
Проверьте настройки проекта
Убедитесь, что вы не проверяете параметр оптимизации кода и убедитесь, что отмечены символы отладки.
![debug]()
Обратите внимание, что при изменении конфигурации другие настройки могут также измениться, и вы можете не видеть. Убедитесь, что значения верны для конфигурации, которую вы пытаетесь скомпилировать.
Удалить выходные файлы
Физически удалить все сгенерированные DLL, PDB и EXE. Затем снова скомпилируйте, чтобы сгенерировать файлы. Иногда Visual Studio может "потеряться" и "забыть" перезаписать выходные файлы при создании вашего решения.
Перезагрузите компьютер
Обычно он решает 99% проблем. У меня уже были некоторые проблемы с Visual Studio и перезагрузка, или компьютер решил проблему.
Ответ 3
Я знаю, что это старый пост, но все еще достаточно своевременный, поскольку я искал любую другую причину, по которой я мог бы получить эту проблему.
При этом вы также можете проверить "Временные файлы ASP.NET" в каталогах c:\Windows\Microsoft.NET\[Frameworks], если вы создаете веб-приложение, так как эти файлы часто являются причиной в мой опыт.
Ответ 4
Использование предписывающей директивы #line также влияет на поведение точек останова, как я только что открыл.
Ответ 5
Добавление этого ответа в старый поток, если кто-то вроде меня отслеживает эту тайну в старом приложении ASP.Net. У меня был один код Webform, который не отвечал на контрольные точки с предупреждением отладчика "... no executable code...". Это делало мою голову, так как все остальные страницы работали нормально. Я сделал чистую, перестроил, очистил временные файлы ASP.Net, без радости.
Преступником с этим файлом было включение нескольких директив #ExternalSource, связанных с некоторыми объявлениями переменных-членов. После того, как они были удалены и проект перестроен, поведение точки останова было восстановлено. Эти строки ExternalSource появлялись в сгенерированном разделе кода. Не знаете, почему они были там.