Отладчик Visual Studio ошибочен в этом коде C # [дубликат]

Я предпочитаю использовать селектор, и я применяю его в документе.

Это привязывается к документу и будет применяться к элементам, которые будут отображаться после загрузки страницы.

Например:

$(document).on("click", $(selector), function() {
    // Your code here
});
2
задан Altav1sta 1 March 2017 в 20:11
поделиться

1 ответ

Ваш код легко воспроизводит проблему в сборке «Debug» , используя Visual Studio 2015. Мне нужно было только добавить Program.Main(), с вызовом DoSomeWork().Wait();, установить точку останова в методе и пройти через него.

Что касается того, почему это происходит, это, несомненно, связано с тем, что была переписана комбинация метода async и создана отладочная база данных (.pdb). Подобно методам итератора, добавление async к методу заставляет компилятор изменить ваш метод на конечный автомат. Фактический генерируемый IL выглядит лишь немного похожим на оригинальный метод. То есть, если вы посмотрите на него, вы можете определить ключевые компоненты исходного кода, но теперь он находится в большом switch заявлении, который обрабатывает то, что происходит, когда метод возвращается в каждом операторе await введенный с завершением каждого ожидаемого выражения.

Когда оператор программы находится в throw, он действительно находится в неявном выражении return в методе. Дело в том, что база данных отладки для исполняемого файла не предоставляет программную инструкцию для этой строки.

При отладке есть подсказка, что это то, что происходит. Когда вы переходите через инструкцию if, вы заметите, что она идет прямо в инструкцию throw. Если блок оператора if был введен действительно , следующая строка оператора программы будет фактически открытой скобкой для блока, а не оператором программы.

Вы также можете добавить например a Console.WriteLine() в конце метода, и это даст отладчику достаточную информацию для синхронизации и не покажет вам неправильный номер строки.

Дополнительные сведения о том, как обрабатываются методы async компилятором, см. Является ли новая функция асинхронности C # реализована строго в компиляторе и предоставляемых там ссылках (включая серии статей Джона по этой теме).

5
ответ дан Community 18 August 2018 в 07:25
поделиться
  • 1
    Вы сказали «добавив async и хотя бы один await», но я воспроизвел, что даже без линии с await вообще – Altav1sta 1 March 2017 в 20:29
  • 2
    @ Altav1sta: хорошо, тогда, кажется, компилятор генерирует машину состояний для всех методов async. Я интерпретировал «это работает». в вашем сообщении означает, что отладчик сделал right вещь, а не ошибочную вещь. Наверное, это не то, что вы имели в виду. – Peter Duniho 1 March 2017 в 20:47
  • 3
    Да, извините за смущение. Я имел в виду , он работает одинаково , то есть я вхожу в тело if, но исключение действительно не выбрано – Altav1sta 1 March 2017 в 20:53
Другие вопросы по тегам:

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