2012-04-17 88 views
-1

我使用所有托管代码在Windows 7 32位计算机上的Visual Studio 10中编写了一个简单的控制台应用程序。它工作在调试模式很好,但是当我把它部署到另一台机器并运行它,我得到的消息,Try-Catch不会捕获异常

[my assembly] has encountered a problem and needs to close. We are sorry for the inconvenience. 

...然后它会产生一个神秘的错误报告,我无法想象找到有用的。事情是这样的:异常发生在一个try-catch语句内,该语句旨在正常处理错误;但是,这个例外似乎没有被发现。

这怎么可能?我该如何解决它?

+2

你在做什么?您可能会在Catch子句中生成另一个错误。 – Servy 2012-04-17 16:28:46

+2

你可以1)分享错误2)检查事件日志,看看有什么错误,并分享? – 2012-04-17 16:28:52

+0

包装所有代码的try catch以查找引发异常的位置。 – 2012-04-17 16:30:01

回答

2

要么异常是从一个diferent发生在代码中引发,否则你不要在catch分支

的“神秘”的错误消息列出特定类型的异常(或其父类型之一)实际上是设计用来帮助你发现:出了什么问题(异常的类型),它发生在哪里(堆栈跟踪)。你应该学会阅读/“decypher”它

+0

它应该是一个评论。 – Pankaj 2012-04-17 16:31:14

+0

...或者出于某种原因,你会得到一个不可捕捉的异常,比如StackOverflowException。 – 2012-04-17 16:31:14

+0

@PankajGarg - 你能解释一下为什么吗?随着OP提供的详细程度,我认为这是一个合理的答案 – Attila 2012-04-17 16:32:33

1

就像阿提拉说,它可能是从另一个地方抛出。您应该将其类型设置为Exception,因为它是一般的,如果错误在您认为是的情况下被抛出,那么它肯定会在该捕获中结束。一旦理解了问题,您可以将类型调整为更具体的内容。

而不是优雅地处理它,首先尝试将错误消息打印到控制台,以查看问题可能是什么。

如果没有被捕获,它不会被从try里面抛出,请确保所有有问题的代码都被包装好。

+0

一般而言'异常'捕捉是不被接受的,因为它可以捕捉像内存不足异常这样的异常,你不能对它做太多的处理 – Attila 2012-04-17 16:40:51

+0

是的你是对的。我的想法是确保它被捕获,然后打印出错误以解决问题,然后相应地更改异常类型以捕获并处理特定问题。 – PaulG 2012-04-17 16:45:13