Отладка Вызванная функция в .NET - PullRequest
5 голосов
/ 16 мая 2011

Я вызываю функцию в .NET с помощью Reflection (Method.Invoke). Если в этом методе возникает ошибка и возникает исключение, отладчик не показывает фактический код, а останавливается при вызове Invoke (). Я могу получить информацию об исключениях из InnerException, но это очень неудобно по сравнению с обычной отладкой с доступным стеком вызовов и так далее. Можно ли отлаживать методы, вызываемые с помощью Method.Invoke, как обычные вызовы функций?

Ответы [ 3 ]

7 голосов
/ 16 мая 2011

Что вам нравится, так это функция «Просто мой код».По умолчанию отладчик ограничивает отладку кодом, созданным разработчиком.Это уменьшает много шума, который может присутствовать при отладке запуска WPF или WinForms.

Чтобы такие элементы, как помощник по исключениям, запускались для всего кода, необходимо отключить Just My Code.

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

Если все остальное терпит неудачу, вы также можете поместить что-то вроде этого в метод, который вызывается:

#if DEBUG
    System.Diagnostics.Debugger.Break();
#endif

Это будет в основном "программно" вызывать точку останова там.

Вы можететакже сделайте его немного лучше, выполнив:

  if(Debugger.IsAttached)
    Debugger.Break();

, чтобы он сломался, только если вы действительно запускаете его в отладчике.


Редактировать:

Во-вторых, если у вас есть код для его редактирования, вы, вероятно, можете просто вставить обычную точку останова через VisualStudio.Я думаю, мой ответ не имеет смысла ... извините :)

0 голосов
/ 24 мая 2011

Мой обходной путь - создать таймер и вызвать метод внутри Tick():

Код GUI -> вызов функции через Method.Invoke -> функция устанавливает таймер -> в тике есть тело функции

К сожалению, это не очень красиво (и в некоторых случаях не подходит)

...