Я пробовал несколько советов о том, как сохранить правильный номер строки в трассировке стека при выбросе исключения. Наиболее распространенным является просто ловить и бросать, но это не работает. Вот несколько, которые я пробовал:уловка/выброс трассировки стека линии номер ошибки
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 (Exception)
{
throw;
}
catch (Exception e)
{
throw;
}
catch (Exception e)
{
throw e;
}
Все эти ошибки отчета о броске и окно сообщения линии - никогда на линии, которая делит на 0. Если я нарушу внутри функции теста(), он показывает правильную строка #, но после бросается нет. Единственный способ, с которым работал, - не иметь попыток/улов в функции test(). Но, конечно, я хочу, чтобы улавливать ошибки и повторно бросать их и правильно отслеживать трассировку стека. Итак, как это делается?
спасибо.
'throw new Exception (" See InnerException ", ex);' улавливатель может посмотреть на свойство InnerException пойманного исключения, чтобы увидеть исходную стеклу и т. Д. –
http://stackoverflow.com/questions/22623/best- практики-для-ловить-и-re-throw-net-exceptions – hatchet
Фактически ближе к http://stackoverflow.com/questions/57383/in-c-how-can-i-rethrow-innerexception-without-losing-stack -trace ... но удивленный 'ExceptionDispatchInfo' только упоминается комментарием в том, что один @hatchet. – TylerY86