DDN 关于 C# throw ex; 与 throw; 的问题
~每天一个历史遗留问题~
熟悉异常的 C++++ coder,都知道
对于 throw ex; 与 throw; 是有区别的,主要是 CLR 确定异常抛出的起点是有区别的,
如果你不清楚请参考:
《.NET 框架程序设计》Jeffery Richter 李建忠译 chater 18.12 异常堆栈踪迹 P442 的说明
或者见
throw;与throw ex;之间的区别
http://blog.csdn.net/Joy_Zhao/archive/2006/10/27/1352777.aspx
但是,下面的 Button1_Click 即使使用 throw; 也堆栈信息只能跟踪到 Line 14 ,始终无法跟踪到 Line 11,而 Button2_Click 直接到 Line 21
// .aspx.cs
protected void Button1_Click(object sender, EventArgs e)
{
try {
object o = null;
int i = (int)o; // Line 11 // Error, System.NullReferenceException
}
catch {
throw; // Line 14
}
}
protected void Button2_Click(object sender, EventArgs e)
{
object o = null;
int i = (int)o; // Line 21 // Error, System.NullReferenceException
}
// .aspx
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Throw1" />
<asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="Throw2" />
我做过很多测试了,对于用 try-catch-throw 捕获 CLR 运行时内部抛出的异常,即出现这种情况,始终无法跟踪到最原始的内部异常起点
何解 ?也许是我遗漏了某个知识点~
谢谢!