Трассировка стека catch/throw теряет номер строки с ошибкой ⇐ C#
Трассировка стека catch/throw теряет номер строки с ошибкой
Я попробовал несколько предложений о том, как сохранить правильный номер строки в трассировке стека при возникновении исключения. Самый распространенный вариант — просто поймать и бросить, но это не работает. Вот некоторые из них, которые я пробовал:
private void button1_Click(отправитель объекта, EventArgs e) { пытаться { тест(); } поймать (Исключение ex) { MessageBox.Show(ex.ToString()); } } частный тест на недействительность() { пытаться { интервал а = 1; интервал б = 0; интервал х = 0; х = а/б; } ловить { бросать; } } И несколько вариантов блока catch.
catch (Исключение) { бросать; } поймать (Исключение e) { бросать; } поймать (Исключение e) { бросить е; } Все эти сообщения сообщают об ошибке в строке throw и строке окна сообщения — никогда в строке, которая делится на 0. Если я ворвусь в функцию test(), она покажет правильную строку #, но после вызова это произойдет нет. Единственный способ, который сработал, — это не использовать try/catch в функции test(). Но, конечно, я хочу иметь возможность ловить ошибки и повторно выдавать их, сохраняя правильную трассировку стека. Так как же это делается?
Спасибо.
Я попробовал несколько предложений о том, как сохранить правильный номер строки в трассировке стека при возникновении исключения. Самый распространенный вариант — просто поймать и бросить, но это не работает. Вот некоторые из них, которые я пробовал:
private void button1_Click(отправитель объекта, EventArgs e) { пытаться { тест(); } поймать (Исключение ex) { MessageBox.Show(ex.ToString()); } } частный тест на недействительность() { пытаться { интервал а = 1; интервал б = 0; интервал х = 0; х = а/б; } ловить { бросать; } } И несколько вариантов блока catch.
catch (Исключение) { бросать; } поймать (Исключение e) { бросать; } поймать (Исключение e) { бросить е; } Все эти сообщения сообщают об ошибке в строке throw и строке окна сообщения — никогда в строке, которая делится на 0. Если я ворвусь в функцию test(), она покажет правильную строку #, но после вызова это произойдет нет. Единственный способ, который сработал, — это не использовать try/catch в функции test(). Но, конечно, я хочу иметь возможность ловить ошибки и повторно выдавать их, сохраняя правильную трассировку стека. Так как же это делается?
Спасибо.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение