Как я могу отладить необработанное исключение в коде, вызываемом из BackgroundWorker? - PullRequest
4 голосов
/ 12 марта 2010

Я выполняю некоторый код импорта асинхронно из простого приложения WinForms, используя объект BackgroundWorker и его метод DoAsync(). У меня была проблема, когда я не знал, что генерируются исключения, а поток преждевременно умирает. В конце концов я обнаружил это и теперь знаю, когда возникает исключение после чтения Необработанные исключения в BackgroundWorker .

Однако у меня все еще есть проблема при отладке. Как мне отладить этот код? Я думаю, я мог бы запустить его в тестовом приложении, которое не использует BackgrounWorker, но есть ли способ отладить это как есть? Если я перебираю код, который на самом деле выдает исключение, меня просто исключают пошагово, когда возникает исключение. Повторное выбрасывание исключения из RunWorkerCompletedEventHandler, естественно, тоже мало чем поможет.

Есть идеи !? Заранее спасибо!

Ответы [ 2 ]

7 голосов
/ 13 марта 2010

Почему бы не использовать опцию «Break On Exceptions» в VS (Ctrl + Alt + E или Debug-> Exceptions и поставить флажок в столбце Thrown)?Это остановит выполнение вашей программы при возникновении любого исключения.

0 голосов
/ 13 марта 2010

Visual Studio позволит вам войти в код только при наличии исходного кода.Если у вас нет источника, то я предлагаю научиться использовать winDBG.У MS есть отличное учебное пособие:

http://blogs.msdn.com/tess/pages/net-debugging-demos-information-and-setup-instructions.aspx

У него есть кривая обучения, и оно занимает некоторое время, но я нашел, что оно того стоит.Я использовал этот инструмент для отладки МНОГО приложений, которые внезапно зависали, зависали в ЦП или просто плохо работали.

...