我使用BackgroundWorker
对象及其DoAsync()
方法从一个简单的WinForms应用程序异步运行一些导入代码。我有一个问题,我不知道异常被抛出,线程过早死亡。我最终发现了这一点,现在知道在阅读Unhandled exceptions in BackgroundWorker之后抛出异常的时间。
但是,我在调试时仍然遇到问题。我该如何调试这段代码?我想我可以在不使用BackgrounWorker的测试应用程序中运行它,但有没有办法按原样调试它?如果我单步执行实际抛出异常的代码,那么当异常发生时我就会被逐步推出。从RunWorkerCompletedEventHandler
重新抛出异常自然也无济于事。
任何想法!?提前谢谢!
答案 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或者表现不佳的应用程序。