Почему Visual Studio отображает некоторые из моих исключений в следующей строке вместо ошибочной строки? - PullRequest
4 голосов
/ 25 марта 2009

Обычное поведение VS заключается в отображении желтой ошибочной строки:

    int i = 1;
    switch (i)
    {
        default:
            throw new NotImplementedException(); //this will be yellow
    }

Однако довольно часто я был свидетелем того, что неправильная линия окрашена, как в этом примере:

        int i = 1;
        switch (i)
        {
            default:
                if (i==1)
                     throw new NotImplementedException();
                break;  i = 1; //this line is displayed in yellow, which makes no sense
        }

Хотя я понимаю некоторые различия между этими двумя фрагментами (в первой ситуации строка throw ...) является последней исполняемой строкой метода, поэтому для кода, следующего за этим, не генерируется IL, поэтому это последняя возможная строка для «отображения» исключения), мне интересно, пока VS не сможет отобразить исключение в правильной строке во втором фрагменте.

Кто-нибудь намекает на причину этого странного поведения? Несмотря на то, что я знал об этом предупреждении, время от времени я тратил несколько минут на отладку не той строки.

Ответы [ 2 ]

2 голосов
/ 25 марта 2009

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

Другой известный мне случай, когда это происходит, когда у вас есть зависимости DLL, которые не перестраиваются по той или иной причине (Visual Studio иногда обрезает свое дерево зависимостей DLL), он также выделяет неправильные строки при отладке. Это похоже на проблему редактирования и продолжения.

Еще одна вещь, о которой я могу подумать, это то, что очень редко я замечал, что Studio выделит строку, к которой вернется код ... после создания исключения и нажатия кнопки continue, код продолжит выполнение на строке x. Но я точно не знаю, как это воспроизвести.

1 голос
/ 25 марта 2009

Я думаю, что ключом является предложение "если". Я видел такое же поведение, просто переходя через код. Если вокруг одного оператора в блоке if нет «{}», текущий оператор может быть указан в виде строки после ожидаемой строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...