В настоящее время я работаю над существующим приложением Windows Forms (VB.net) и занят переработкой механизма обработки исключений.
В настоящее время многие методы в коде просто окружены блоком try / catch, который перехватывает общее исключение и затем вызывает служебный метод, который просто показывает пользователю окно сообщения, информирующее его об ошибке, и затем регистрирует ее. 1003 *
Таким образом, во многих случаях корректирующие действия не предпринимаются, а исключение просто регистрируется. Я знаю, что это, вероятно, не лучший способ, но именно так мы и должны сделать это в ближайшем будущем.
В любом случае, я хотел сделать это более общим способом, поэтому я подключил Application.ThreadException и AppDomain.UnhandledException.
Кажется, это работает хорошо, за исключением одного неудобства. Всякий раз, когда выдается ошибка из самой среды выполнения .net или стороннего элемента управления, трассировка стека начинается там, где генерируется исключение в методах framework или сторонних методах (очевидно!).
Но было бы удобнее, если бы у меня был простой способ выяснить, где именно эти исключения пересекают границу в моем коде. Мне нужен простой способ определения (в Application.ThreadException), где в моем собственном коде возникло исключение.
Мне известно, что эта информация содержится в свойстве Exception.StackTrace, но я хотел бы получить простой способ получить эту конкретную информацию, поскольку свойство stacktrace представляет собой одну огромную строку.
По сути, я хотел бы, чтобы класс, метод и номер строки, где исключение впервые всплыло в моем коде.