我见过这样的代码(实际上看到另一个人输入了代码):
catch (Exception ex)
{
string exception = ex.ToString();
}
这段代码不好吗?如果是这样,为什么?有一个合适的“捕获处理程序链”(例如上面更具体的一个,过滤到一般捕获所有异常,但在异常的字符串转换中,我猜你转换的数量远远超过可能需要的字符串(您真正需要的只是InnerMessage或其他字符串属性之一,具体取决于方案)。此代码还有什么问题吗?
我也看到开发人员在每一行代码上放置了断点。这有什么意义?为什么不把它放在顶部然后使用“run to cursor”(喜欢那个功能)?
最后,在Visual Studio中对所有异常使用break有什么好处?
答案 0 :(得分:3)
string exception = ex.ToString();
那不做任何事情。最好记录它或使用MessageBox.Show(...);。
每一行的断点......没多大意义 - 使用run to cursor或step over / step in。
打破所有例外:我实际上已经使用过了。我有一些异常失败,一些图书馆默默地“处理”了。打破所有帮助我追踪下来。此外,“Break on all”可以帮助您确保只获得预期的异常(还有助于不捕获通用的“异常”类,但仅捕获特定异常。
答案 1 :(得分:3)
这看起来像一个懒惰的程序员:
答案 2 :(得分:2)
您发布的代码的唯一值是允许在调试器中显示完整的异常。它不是必需的,因为调试器无论如何都会这样做,但是在调试器执行之前可能还有这段代码。
答案 3 :(得分:2)
这位开发人员可能不知道你可以捕获像这样的所有(托管)异常......
try
{
// do something
}
catch( Exception )
{
}
并没有遇到像这样的catch块的编译器警告......
catch( Exception ex )
{
// don't use ex
}
另外,他可能不知道$exception pseudo-register。
答案 4 :(得分:0)
我昨天刚刚使用了“中断所有例外”。
我正在追逐一个非常模糊的bug(事实上,代码工作得很好,这是最难找到的bug),而我的C#代码正在执行一个显然出现故障的IronPython脚本,我保留了收到ArgumentException
个消息显示在控制台中。
事实证明这个IronPython代码:
try:
value += x
except ValueError:
pass
导致在IronPython运行时内抛出并处理ArgumentException
。
此外,如果您打开了“中断所有异常”,VS实际上会在value += x
行中断,调用Python源,让您检查本地值等等。非常好。无论如何,现在当我看到控制台中出现这些异常消息时,我不再担心我会忽略一些会让我感到厌恶的东西。