如何在从BackgroundWorker调用的代码中调试未处理的异常?

时间:2010-03-12 20:48:13

标签: c# .net debugging asynchronous backgroundworker

我使用BackgroundWorker对象及其DoAsync()方法从一个简单的WinForms应用程序异步运行一些导入代码。我有一个问题,我不知道异常被抛出,线程过早死亡。我最终发现了这一点,现在知道在阅读Unhandled exceptions in BackgroundWorker之后抛出异常的时间。

但是,我在调试时仍然遇到问题。我该如何调试这段代码?我想我可以在不使用BackgrounWorker的测试应用程序中运行它,但有没有办法按原样调试它?如果我单步执行实际抛出异常的代码,那么当异常发生时我就会被逐步推出。从RunWorkerCompletedEventHandler重新抛出异常自然也无济于事。

任何想法!?提前谢谢!

2 个答案:

答案 0 :(得分:7)

为什么不使用VS的“Break On Exceptions”选项(Ctrl + Alt + E或Debug-> Exceptions并在Thrown列中放置复选框)?这将在抛出任何异常时停止程序执行。

答案 1 :(得分:0)

如果您拥有源代码,Visual Studio将只允许您进入代码。如果您没有源代码,那么我建议学习如何使用winDBG。 MS在这里有一个很好的教程:

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

它有一个学习曲线,需要一些时间,但我发现它是值得的。我已经使用这个工具来调试很多突然崩溃,挂起CPU或者表现不佳的应用程序。