Узнайте, где в коде пользователя возникло внутреннее исключение .Net - PullRequest
1 голос
/ 25 июля 2011

В настоящее время я работаю над существующим приложением Windows Forms (VB.net) и занят переработкой механизма обработки исключений.

В настоящее время многие методы в коде просто окружены блоком try / catch, который перехватывает общее исключение и затем вызывает служебный метод, который просто показывает пользователю окно сообщения, информирующее его об ошибке, и затем регистрирует ее. 1003 *

Таким образом, во многих случаях корректирующие действия не предпринимаются, а исключение просто регистрируется. Я знаю, что это, вероятно, не лучший способ, но именно так мы и должны сделать это в ближайшем будущем.

В любом случае, я хотел сделать это более общим способом, поэтому я подключил Application.ThreadException и AppDomain.UnhandledException.

Кажется, это работает хорошо, за исключением одного неудобства. Всякий раз, когда выдается ошибка из самой среды выполнения .net или стороннего элемента управления, трассировка стека начинается там, где генерируется исключение в методах framework или сторонних методах (очевидно!).

Но было бы удобнее, если бы у меня был простой способ выяснить, где именно эти исключения пересекают границу в моем коде. Мне нужен простой способ определения (в Application.ThreadException), где в моем собственном коде возникло исключение.

Мне известно, что эта информация содержится в свойстве Exception.StackTrace, но я хотел бы получить простой способ получить эту конкретную информацию, поскольку свойство stacktrace представляет собой одну огромную строку.

По сути, я хотел бы, чтобы класс, метод и номер строки, где исключение впервые всплыло в моем коде.

1 Ответ

0 голосов
/ 25 июля 2011

Вы должны попытаться использовать такой код:

[STAThread] static void Main() {
  try {
    Application.Run(new Form1());
  }
  catch (Exception e) {
    //do smth with exception
  }
}

Он будет перехватывать исключения, возникающие только в вашем коде, когда в то же время AppDomain.UnhandledException может быть более многословным.Это, безусловно, будет работать только для основного потока.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...