o que pode levar o throw a redefinir uma pilha de chamadas (estou usando "throw", não "throw ex")
Eu sempre pensei a diferença entre "jogar" e "jogar ex"foi que o lançamento sozinho não estava redefinindo o rastreamento de pilha da exceção.
Infelizmente, esse não é o comportamento que estou experimentando; Aqui está uma amostra simples que reproduz meu problema:
using System;
using System.Text;
namespace testthrow2
{
class Program
{
static void Main(string[] args)
{
try
{
try
{
throw new Exception("line 14");
}
catch (Exception)
{
throw; // line 18
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
Console.ReadLine();
}
}
}
Eu esperaria que esse código imprima uma pilha de chamadas começando na linha 14; no entanto, a pilha de chamadas começa na linha 18. É claro que não é grande coisa na amostra, mas no meu aplicativo da vida real, perder as informações de erro inicial é bastante doloroso.
Estou perdendo algo óbvio? Existe outra maneira de alcançar o que eu quero (ou seja, lançar uma exceção sem perder as informações da pilha?)
Estou usando .net 3.5