我已經嘗試了幾個關於如何在拋出異常時在堆棧跟蹤中保留正確行號的建議。最常見的只是抓住並拋出,但這不起作用。這裏有一些我已經嘗試過:catch/throw堆棧跟蹤丟失錯誤的行號
private void button1_Click(object sender, EventArgs e)
{
try
{
test();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
private void test()
{
try
{
int a = 1;
int b = 0;
int x = 0;
x = a/b;
}
catch
{
throw;
}
}
和catch塊的幾個變化。
catch (Exception)
{
throw;
}
catch (Exception e)
{
throw;
}
catch (Exception e)
{
throw e;
}
所有在罰球線和消息框行這些報告錯誤的 - 永遠不要對由0.1分。如果我的測試()函數內斷行,但它顯示正確的行號,但被拋出後不會。有效的唯一方法是在test()函數中沒有任何try/catch。但我當然希望能夠捕捉錯誤並重新拋出錯誤,並保持堆棧跟蹤正確。那麼這是如何完成的?
謝謝。
'throw new Exception(「See InnerException」,ex);'catcher可以查看被捕獲的異常的InnerException屬性以查看原始堆棧跟蹤等 –
http://stackoverflow.com/questions/22623/best-實踐捕捉和重新拋出淨例外 – hatchet
實際上更接近http://stackoverflow.com/questions/57383/in-c-how-can-i-rethrow-innerexception-without-losing-stack - 跟蹤......但是很驚訝'ExceptionDispatchInfo'只在這個@hatchet中被評論。 – TylerY86