Возможный дубликат:
неверный stacktrace by rethrow
Общепризнано, что в .NET throw;
не reset выполняется трассировка стека, а throw ex;
.
Однако в этой простой программе я получаю разные номера строк:
void Main()
{
try
{
try
{
Wrapper(); // line 13
}
catch(Exception e)
{
Console.WriteLine(e.ToString());
throw; // line 18
}
}
catch(Exception e)
{
Console.WriteLine(e.ToString());
}
}
public void Wrapper()
{
Throw(); // line 28
}
public void Throw()
{
var x = (string)(object)1; // line 33
}
Вывод:
System.InvalidCastException: Невозможно наложить объект типа "System.Int32" на тип "System.String". в ConsoleApplication2.Program.Main(String [] args) в C:\long-path\Program.cs: строка 13
System.InvalidCastException: Невозможно наложить объект типа "System.Int32" на тип "System.String". в ConsoleApplication2.Program.Main(String [] args) в C:\long-path\Program.cs: строка 18
Примечание. Первая трассировка стека содержит строку 13, вторая содержит строку 18. Кроме того, ни одна строка 13, ни строка 18 не являются строками, в которых фактически происходит аккомпанемент.
Теперь мой вопрос: в каких обстоятельствах throw;
меняет трассировку стека и в каких обстоятельствах она не меняет трассировку стека?
Обратите внимание, что это уже было замечено, но не ответил в целом.
UPDATE:
Я запустил код выше в режиме отладки, и он дает следующее:
System.InvalidCastException: Невозможно наложить объект типа "System.Int32" на тип "System.String". в ConsoleApplication2.Program.Throw() в C:\long-path\Program.cs: строка 33 в ConsoleApplication2.Program.Wrapper() в C:\long-path\Program.cs: строка 28 в ConsoleApplication2.Program.Main(String [] args) в C:\long-path\Program.cs: строка 13
System.InvalidCastException: Невозможно наложить объект типа "System.Int32" на тип "System.String". в ConsoleApplication2.Program.Throw() в C:\long-path\Program.cs: строка 33 в ConsoleApplication2.Program.Wrapper() в C:\long-path\Program.cs: строка 28 в ConsoleApplication2.Program.Main(String [] args) в C:\long-path\Program.cs: строка 18
Обратите внимание: последний номер строки все еще изменяется