Как игнорировать определенный тип необработанного исключения в Eclipse? - PullRequest
9 голосов
/ 01 марта 2011

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

Есть ли способ заставить Eclipse IDE игнорировать определенный тип необработанного исключения?

Я пробовал "Step Filtering"но (я думаю), поскольку пользовательское необработанное исключение отсутствует в трассировке стека, оно не отфильтровывается из отладчика.Это моя первая попытка пошаговой фильтрации, так что я могу использовать ее неправильно.Вот пример трассировки стека.

Daemon Thread [Thread-13] (Suspended (exception CustomThirdPartyException)) 
    ThreadPoolExecutor$Worker.run() line: not available [local variables unavailable]   
    Thread.run() line: not available

EDIT:

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

Решение mazaneicha, казалось, было на правильном пути, но я не мог заставить его работать именно так, как я хотел.Это может быть связано с ошибкой пользователя с моей стороны.

У jluzwick и mazaneicha были возможные обходные пути к этой проблеме, но у Константина Комиссарчика был «правильный» ответ в том, что это следует отодвинуть назад создателям библиотеки, чтобы исправить,Иногда техническое решение не является правильным.

Ответы [ 5 ]

12 голосов
/ 02 сентября 2011

Старый поток, но я решил добавить к нему немного.

По крайней мере в Eclipse Indigo: в представлении Debug Perspective-> Breakpoints:

  1. Укажитеточка останова для Исключений (и, возможно, подклассов), на которых вы хотите сделать паузу.Это можно сделать, нажав «Добавить точку исключения Java».Значок J и восклицательный знак.
  2. Щелкните правой кнопкой мыши точку останова и выберите «Свойства точки останова»
  3. Перейдите к пункту «Фильтрация»
  4. Укажите класс или пакеты, которые вы используете.хочу игнорировать.Это добавит их в список.Просто снимите флажок, чтобы обозначить его исключительность (не останавливайтесь в указанном месте)

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

2 голосов
/ 01 марта 2011

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

1 голос
/ 01 марта 2011

В перспективе «Отладка», в представлении «Точки останова» щелкните «Точки останова Java Exception» (значок с маленькой буквой J и восклицательным знаком J!). В появившемся окне «Добавить точку исключения Java» вы можете найти раздражающее исключение и снять флажок «Приостановить при исключении Uncaught».

1 голос
/ 01 марта 2011

Вы пробовали это?

Перейдите в Окно-> Настройки-> Java-> Отладка

В разделе «Приостановить выполнение» снимите флажок «Приостановить выполнение при невыполненных исключениях»

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

0 голосов
/ 18 мая 2013

Похоже, вам нужна простая попытка, поймайте.

 MyException e = new MyException;
 try {
       throw new e;
 } catch (MyException e) {
       e.printStackTrace();
 } 

Это позволит сгенерировать исключение, но проигнорирует и продолжит программу.Если вы хотите, чтобы он был записан в файл, используйте 'PrintWriter.println (e.printStackTrace ());'

Надеюсь, вы получили то, что вам нужно, и удачного кодирования!

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