Отладчик Visual Studio ведет себя странно - PullRequest
0 голосов
/ 18 июня 2019

В VS 2017, при отладке модульного теста я столкнулся со странной проблемой с отладчиком. Может кто-нибудь сообщить мне, почему происходит следующее.

public string TestingPurposesMethod(string name)
{
    string returnVal = null;

    if (name != null)
    {
        if (name == "Kim")
        {
            returnVal = "KimReturn";
        }
        else if (name == "James")
        {
            returnVal = "JamesReturn";
        }
        else if (name == "Wonder")
        {
            returnVal = "WonderReturn";
        }
        else
        {
            returnVal = "None of these";
        }

        return returnVal;
    }

    return null;
}

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

шаг по каждой строке или коду показывает, что курсор или элемент управления проверяют каждое условие в цепочке if, else if, else, а также присваивают значения returnVal.

EDIT:

Посмотрите на этот скриншот ниже, значение в `name 'равно" James ", но отладчик идет внутрь оператора if для" Kim ", хотя расширение OzCode ясно показывает, что оценка выражения не удалась (красная строка в строке 150).

ScreenShot

1 Ответ

0 голосов
/ 19 июня 2019

Когда вы выбираете Debug Selected Tests в Test Explorer, в каком режиме вы находитесь? Debug mode или Release Mode? Я воспроизвел похожую проблему с Optimize code setting: enter image description here

Для решения этой проблемы:

1.Как сказал Ханс, это как-то связано с подавлением JIT-оптимизации, поэтому, конечно, мы можем перейти к Debug => Options и проверить его, тогда эта проблема исчезла (не рекомендуется, поскольку это устранит преимущество Optimized). Отпустите ...)

2. И по умолчанию опция не отмечена. На самом деле мы не предлагаем вам включить его все время. Щелкните правой кнопкой мыши проект в обозревателе решений => Свойства, чтобы открыть эту страницу:

enter image description here

По умолчанию для режима отладки оптимизированный код не отмечен, а для режима выпуска оптимизированный код отмечен. Таким образом, существует вероятность, что вы находитесь в release mode до debug the tests или в debug mode, но с отмеченным Optimize Code!

Поэтому я предлагаю отладить тесты в режиме отладки, убедившись, что Оптимизировать код для отладки не отмечено. Тогда эта проблема исчезнет.

И только когда # 2 не помогает, вы можете попробовать проверить Suppress JIT Optimization... (не рекомендуется)

Надеюсь, все вышеперечисленное поможет:)

...