К вашему сведению, я только что проверил это и трассировку стека сообщил 'throw;' не совсем корректная трассировка стека. Пример:
private void foo()
{
try
{
bar(3);
bar(2);
bar(1);
bar(0);
}
catch(DivideByZeroException)
{
//log message and rethrow...
throw;
}
}
private void bar(int b)
{
int a = 1;
int c = a/b; // Generate divide by zero exception.
}
Трассировка стека правильно указывает на источник исключения (сообщенный номер строки), но номер строки, сообщенный для foo (), является строкой броска; оператор, следовательно, вы не можете сказать, какой из вызовов bar () вызвал исключение.