2009-07-29 5 views
14

Мой отладчик C# работает неправильно. Иногда он пропускает точки останова и строку кодов. Я проверил диспетчер конфигурации. Я даже пытался добавить свои проекты в новые файлы решений. Может кто-нибудь, пожалуйста, помогите мне?Почему мой отладчик C# пропускает точки останова?

+0

Оптимизация отключена? Отладка или выпуск? – Guillaume

+1

Что такое «иногда»? –

+0

как я могу проверить оптимизацию ??? несколько раз означает каждый раз, когда я использую отладчик, он пропустит после прохождения некоторых строк. – 2009-07-29 10:02:41

ответ

8

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

+0

Как настроить оптимизацию компилятора – 2009-07-29 10:00:52

+0

Если вы используете Visual Studio: щелкните правой кнопкой мыши проект в проводнике решений, затем выберите вкладку «Создать». Там должен быть флажок «оптимизировать код». (По крайней мере, это относится к VS 2005 и 2008. Я не знаю о более ранних версиях). – Odrade

5

Вы уверены, что это правильно скомпилировано? Это звучит так, как будто вы отлаживаете предыдущую версию, что может произойти, если сборка завершилась неудачей (возможно, ошибка кода, возможно, файлы только для чтения).

+0

i m компилирует отдельные проекты в решении, но все та же проблема – 2009-07-29 10:00:09

1

Это звучит так, как будто ваш исходный код не синхронизирован с файлами PDB. Самое простое решение - очистить решение (которое удаляет все ваши DLL из папки bin). Перекомпилируйте, а затем повторите попытку.

Если все еще не удается, попробуйте закрыть решение и удалить папки «obj». И затем повторите попытку.

А также проверить, вы компиляции в режиме отладки - что-то я сделал часто («почему не так пошагового ?!») не становится точкой излома

+0

Я пробовал, но все та же проблема – 2009-07-29 09:59:35

23

Моя отладка Контрольный список:

  • Убедитесь, что ваше прикрепление к процессу, используя правильный тип кода - если ваш процесс имеет как неуправляемый и управляемый код, то Dont полагаться на «авто», чтобы работать для вас, явно указать, какой код вы пытаетесь отлаживать
  • Перейти к модулю les window (Debug -> Windows -> Modules, возможно, вам нужно включить его в меню «Настроить ...»
  • Проверьте, была ли загружена сборка, которую пыталась отладить, и какие символы были загружены - если они не были загружены, щелкните правой кнопкой мыши на этом модуле и выберите «символы загрузки»
  • Откройте файл кода и поместите свою точку останова - если он появляется с маленьким предупреждающим символом, тогда посмотрите и посмотрите, что он говорит,
  • Возможно, вам понадобится перейти к «tools -> options -> debugging -> general» и отключить «Включить только мой код (только управляемый)»
  • Возможно, вам также необходимо снять флажок «Требовать, чтобы исходные файлы соответствовали исходной версии», , если вы считаете, что ваши источники могут быть скользкими (будьте осторожны, так как это может привести к тому, что вы отлаживаете полностью неправильные источники, что может быть очень запутанным)

В некоторых случаях вы можете обнаружить, что ваш модуль не загружается в том месте, где вы прикрепите ваш отладчик (например, если у вас есть какой-то плагин в archetecutre, а сборки плагинов загружаются только при их первом использовании). В этих случаях все, что вы можете сделать, это попробовать и убедиться, что все готово для загрузки модуля.

+0

thanx для такого подробного ответа. Я пробовал все, но у меня был такой же знак. – 2009-07-29 10:46:46

+3

Отключение «Просто мой код ...» сделал это для меня. Благодарю. –

+0

Отличный список. Помог мне. – Arnej65

1

Если все методы пропущены, посмотрите на источник и посмотрите, присутствует ли атрибут System.Diagnostics.DebuggerStepThroughAttribute.

Несмотря на это имя, оно ПРЕДОТВРАЩАЕТ отладчик, пройдя через метод.

+0

Нет, он пропускает некоторое время с середины mathod и несколько раз завершает mathod. – 2009-07-29 11:14:22

+0

Блестящий! Я думал, что схожу с ума, когда пользовательский метод, добавленный в класс, созданный из XSD, не хотел отлаживать. Причина заключалась в том, что 'xsd.exe' украсил код, сгенерированный этим атрибутом. Точки останова, созданные до F5, иногда попадали, но не новые точки останова, и не всегда. – ajeh

1

Если по крайней мере иногда точка перерыва ударяется, это означает, что все настройки, скорее всего, в порядке.

Недопустимые удары могут быть вызваны некоторыми побочными эффектами, например: оценка свойств отладчиком (по крайней мере, VS пропускает контрольные точки во время оценки свойств для отладчика) или некоторые шпионские инструменты (но они обычно улавливаются отладчиком).

Если вы считаете, что это может быть так, выключите шпионские инструменты и disable the property evaluation by the debugger.

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

1

Это сработало для меня в VS 2017, откройте «Инструменты»> «Параметры», затем в окне «Параметры» перейдите в раздел «Отладка». Включить - «Включить базовый шаг .NET Framework»

1

Отключение «Project Properties/Build/Optimize code» сработало для меня.

Смежные вопросы