Как заставить API разрешить мне обрабатывать исключение вместо печати трассировки стека? - PullRequest
2 голосов
/ 23 марта 2011

Допустим, я использую сторонний jar, например, HTML-парсер.
Программист, написавший эту библиотеку, решил сделать printStackTrace();
для обработки исключений. Мало только предупреждения. Я хочу справиться с ними
я по-другому в моей программе.

Есть ли способ передать это без того фляги, которая выбрасывает stackTrace?

Ответы [ 3 ]

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

Вы можете сохранить ссылки на начальные err и out PrintStream с, а затем использовать System.setErr() и / или System.setOut(), установив их в другой PrintStream по вашему выбору.

0 голосов
/ 23 марта 2011

Вы можете перенаправить System.err для отслеживания следов стека.

Вы можете декомпилировать .jar и перекомпилировать, чтобы сделать что-то еще, кроме печати трассировки стека. Это, наверное, лучший подход.

Другой вариант - изменить байт-код на лету, чтобы переписать класс во время выполнения, который печатает трассировку стека. В зависимости от того, как структурирован код, который печатает трассировку стека, вы можете использовать AspectJ или cgilib, чтобы сделать это проще.

0 голосов
/ 23 марта 2011

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

Вы можете попытаться уменьшить симптомы, некоторые языки, такие как C, позволят вам перенаправить поток stderr куда-нибудь еще, избегая печати stackTrace, и, если исключение будет переброшено, вы можете потенциально перехватить его в своем коде.

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