Метод отладки, вызываемый из BeginInvoke (...) - Блокирует отладчик - PullRequest
1 голос
/ 30 марта 2011

Я использую BeginInvoke для запуска делегата, но проблема в том, что я не могу отладить метод, вызванный через BeginInvoke.Когда в методе устанавливается точка останова, среда IDE приостанавливается (обычно), затем после достижения точки останова и попытки продолжения (F10 или F11) отладчик зависает.

Ответы [ 2 ]

3 голосов
/ 30 марта 2011

Наиболее вероятной причиной зависания является неявное свойство или .ToString оценка, которая вызывает тупик в CLR и, следовательно, отладчике.Попробуйте отключить это и повторить сценарий

  • Инструменты -> Параметры -> Отладчик
  • Снимите флажок «Включить неявную оценку свойств»

Когда отладчик неявно илиявно оценивает функции, которые он делает так в угнанном потоке в CLR.Этот поток не является потоком, в котором вы в данный момент отлаживаете, и все другие потоки приостановлены во время этой операции.Следовательно, если какой-либо из методов ToString или свойства выполняет операцию, чувствительную к потоку, он может очень легко вызвать взаимоблокировку.

Отладчик эффективно выполняет методы в окне отладчика синхронно из потока пользовательского интерфейса и, следовательно, блокирует Visual Studioтакже.

0 голосов
/ 24 января 2014

Я нашел решение JaredPar полезным, но есть другой сценарий, в котором оно полезно. В VS2005 с .Net 3.5 мы обнаружили, что отладчик не зависает, он просто не остановится внутри метода делегата. Фактически, свидетельства показали, что метод делегата никогда не вызывался. После того, как мы сняли флажок Включить неявную оценку свойства , отладка метода стала возможной, и метод завершился успешно.

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