Отладчик Visual Studio перескакивает через точки останова

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

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

14
задан My Other Me 8 January 2010 в 09:14
поделиться

9 ответов

-

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


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

27
ответ дан 1 December 2019 в 06:35
поделиться

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

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

9
ответ дан 1 December 2019 в 06:35
поделиться

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

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

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

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

4
ответ дан 1 December 2019 в 06:35
поделиться

Даже в сборке отладки оптимизация компилятора может объяснить это поведение. Под свойствами проекта «Build», убедитесь, что CheckBox 'Optimize Code' выключен. Я видел, как это включено по умолчанию после обновления определенных проектов от .NET 1.1.

2
ответ дан 1 December 2019 в 06:35
поделиться

F10 - это шаг в течение , F5 продолжается до следующей точки останова, F11 является шагом, который выполняет следующую строку кода, затем ждет. Это то, что вы, вероятно, ищете.

-1
ответ дан 1 December 2019 в 06:35
поделиться

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

3
ответ дан 1 December 2019 в 06:35
поделиться

Среда разработки Arduino написана на Java.

Но стандартный язык, на котором вы пишете программу для платформы Arduino, - это фактически C++.

Платформа Arduino основана на чипе Atmel AVR. Существует по крайней мере одна виртуальная машина Java для чипсов AVR . Есть и другие языки, доступные для AVR, такие как Forth и BASIC (хотя я мог найти только коммерческие версии, поэтому, если вы хотите их найти, найдите «AVR BASIC»).

Arduino использует виртуальный COM-порт для связи между хост-компьютером и ним. Виртуальный COM-порт эмулирует последовательную линию старого стиля, но выполняется с помощью USB. Для обмена данными с физическим устройством можно использовать Java communication API .

-121--1861456-

После игры с Reflector я пришел к выводу, что автор этой записи в блоге (и сам автор GLEE/MSAGL) использовал бета/альфа/версию программного обеспечения, которая имела поддержку изображений в качестве узлов.
MSAGL использует Bitmap для загрузки изображений, и быстрый анализ библиотеки GLEE показывает, что только сборка Microsoft.Glee.GraphViewerGdi зависит от System.Drawing.Bitmap . Кроме того, класс GraphAttr был бы наиболее вероятным занимать место для такой функции, и я не вижу там ничего, что могло бы быть даже удаленно (т.е. с использованием какого-то странного взлома;)), используемого для обработки изображений.
Кроме того, обратите внимание, что исходный фрагмент, предоставленный автором, не полностью соответствует API, отображаемому в версии, загружаемой с сайта MS (1.2.0.0).

-121--4460336-

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

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

    [System.Diagnostics.DebuggerStepThroughAttribute()]

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

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

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

2
ответ дан 1 December 2019 в 06:35
поделиться

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

.
0
ответ дан 1 December 2019 в 06:35
поделиться

Зайдите в Проект-> Свойства и снимите флажок «Оптимизировать код»

Это тот случай, если вы видите такой код, как DataSet ds = new DataSet (); попадает в отладчик, но код выглядит как строка Test = "Test"; пропускается.

0
ответ дан 1 December 2019 в 06:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: