Tag: 处理

什么可以导致重置一个callstack(我正在使用“throw”,而不是“throw ex”)

我一直认为“throw”和“throw ex”之间的区别在于,单独抛出并没有重置exception的堆栈跟踪。 不幸的是,这不是我正在经历的行为; 这是一个简单的样本再现我的问题: using System; using System.Text; namespace testthrow2 { class Program { static void Main(string[] args) { try { try { throw new Exception(“line 14”); } catch (Exception) { throw; // line 18 } } catch (Exception ex) { Console.WriteLine(ex.ToString()); } Console.ReadLine(); } } } 我希望这段代码能够从第14行开始打印一个callstack; 然而,callstack从第18行开始。当然,它在样本中没什么大不了的,但在我的实际应用程序中,丢失初始错误信息非常痛苦。 我错过了一些明显的东西吗 有没有其他方法来实现我想要的(即重新抛出exception而不丢失堆栈信息?) 我正在使用.net 3.5

在exception处理中显示行号

如何显示哪个行号导致错误,这是否可能与.NET编译其.exes的方式有关? 如果没有,Exception.Message是否有自动方式显示被淘汰的子? try { int x = textbox1.Text; } catch(Exception ex) { MessageBox.Show(ex.Message); }

捕获非特定exception(例如System.Exception)是不好的做法? 为什么?

我目前正在进行代码审查,以下代码让我跳了起来。 我看到这个代码存在多个问题。 你是否同意我的观点? 如果是这样,我如何向我的同事解释这是错误的(顽固型……)? 捕获一般exception(Exception ex) 使用“if(ex is something)”而不是另一个catch块 我们吃SoapException,HttpException和WebException。 但是如果Web服务失败了,那就没什么可做的了。 码: try { // Call to a WebService } catch (Exception ex) { if (ex is SoapException || ex is HttpException || ex is WebException) { // Log Error and eat it. } else { throw; } }