C#. Странное поведение при перебрасывании исключения

Во время исследования журнала исключений я столкнулся со странным поведением для callstack исключения при использовании throw; за повторное выбрасывание пойманного исключения.

Например

string callstack1, callstack2;
try
{
    try
    {
        // some code throwing exception 
    }
    catch (Exception ex1)
    {
        // deal with exception
        callstack1 = ex1.StackTrace;
        throw;
    }
}
catch (Exception ex2)
{
    // handle exception
    callstack2 = ex2.StackTrace;
}

В этом примере я ожидал того же значения для callstack1 а также callstack2 переменные. Но сохраненная информация стека вызовов указала мне на throw; инструкция внутри catch блок. Можно ожидать поведения, если я использую throw ex1;Но я не

Я использовал один и тот же простой код для проверки этого поведения на двух удаленных компьютерах, но я получил разные результаты. Первый работает как положено (тот же стек вызовов для оригинального и повторного исключения). Второй отображает совершенно другой callstack для исключения re-throw, поэтому нет никакой возможности получить оригинальную трассировку стека.

Кто-нибудь сталкивался с этой проблемой раньше?

И главный вопрос - как сохранить исходный callstack при повторном вызове исключения?

Заранее спасибо!

0 ответов

Другие вопросы по тегам