Почему stacktrace изменяется, когда вы используете throw в C#?
Возможный дубликат:
неверная трассировка стека при повторном броске
Привет,
до сих пор думал что занимаюсь
int a = 10/0;
создаст то же исключение, что и
try
{
int a = 10/0;
}
catch
{
throw;
}
но это не так. Если вы используете вторую, то трассировка стека будет содержать строку броска в качестве точки, где было сгенерировано исключение. В этом примере это не проблема, но когда у вас есть реальный метод, вы не знаете, где возникло исключение.
Это информация MSDN:
Если исключение вызывается повторно путем указания исключения в операторе throw, трассировка стека перезапускается в текущем методе, и список вызовов метода между исходным методом, вызвавшим исключение, и текущим методом теряется. Чтобы сохранить исходную информацию трассировки стека с исключением, используйте оператор throw без указания исключения.
Это действительно ожидаемое поведение или это ошибка.Net или что? Как я могу сохранить НАСТОЯЩУЮ трассировку стека? Я мог бы создать новое исключение, поместив ex в качестве InnerException, но это:
- Некрасиво.
- Longer.
- Делает вам выбор для исключения.