2012-04-11 45 views
0

我有一个dll库,可以帮助减少从项目复制的样板代码的数量。有一个定时器在dll中运行,以通过RPC维护与我们机器的连接。当我调试我的项目并打破RPC连接时,我的代码优雅地从dll库中抛出断开连接事件,并且我的主窗体捕获事件并进行适当处理。从DLL中未处理的异常 - 仅在发布版本中显示

现在,构建发布。当我断开RPC连接时,一个未处理的异常从库中抛出,显然没有被捕获到其他地方。

奇怪的部分是引发异常的代码在计时器中,调用都被包装在try/catch块中,并且catch块吞下异常并执行其他清理工作。

我不明白在调试模式下一切都很好,但在发布它不是。那部分对我来说没有意义。我试着查看异常对象并在其上设置处理属性,但它不可用。这是我看到的正常行为吗?

我刚刚开始在我的项目中使用众多库来保持我的解决方案更加精简并易于遵循。希望这不是我没有考虑过的图书馆的问题。

+0

您需要缩小问题范围。尝试添加一些日志功能,以便找出引发异常的位置。 – squelos 2012-04-11 14:55:46

回答

2

有一些类型的异常未在Try-Catch in Release模式中捕获,例如发生在不同线程中的异常。尝试在主窗体中处理Application.ThreadException事件。

您还可以处理Application.CurrentDomain.UnhandledException以确保捕获所有未处理的异常。

+0

确保您也连接到Application.CurrentDomain.UnhandledException事件,就像上面显示的链接中的示例一样。 – davisoa 2012-04-11 15:26:52

+0

我通常不会参加这些活动。我会给它一个镜头。如果这是一个与线程相关的异常,那么调试器是否控制线程上下文,这就是为什么当我单步执行代码时看不到它? – TWood 2012-04-11 17:31:35

+0

好吧,我为threadexception添加了一个处理程序,但我的问题仍未被它捕获,并且未处理的异常处理程序正常关闭了我的应用程序。为了解决这个问题,我必须将我的课程从我的dll中移出,然后返回到我的主项目中。然后,我每次发生错误时都能看到错误。 – TWood 2012-04-24 15:27:22

相关问题