Принудительное исключение при отладке - PullRequest
22 голосов
/ 05 марта 2011

Можно ли вызвать исключение при отладке .

Позвольте мне привести вам пример: я отлаживаю некоторый код, где я загружаю страницу из Интернета. Когда интернет-соединение потеряно или сетевая карта не работает, должно быть сгенерировано исключение IOException, НО вместо этого выполнение блокируется (во второй строке)

URLConnection connection = requestURL.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));

Мне нужен способ принудительно вызвать исключение при отладке , когда код блокируется, чтобы я мог перейти к блоку catch.

Я использую NetBeans BTW.

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

РЕДАКТИРОВАТЬ : Другими словами, мне нужно ввести - вызвать исключение во время работы, не влияя на текущий код!

Спасибо.

Ответы [ 6 ]

21 голосов
/ 05 марта 2011

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

15 голосов
/ 29 ноября 2012

В перспективе отладки eclipse, в представлении Expressions, просто добавьте новое выражение: throw new Exception("test").Я полагаю, что NetBeans имеет нечто подобное.

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

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

Вы также можете использовать некоторыедополнительные системные свойства, которые выдают исключение только в тестовом режиме

Посмотрите на этот пост (Отказ от ответственности, я написал)

Надеюсь, это поможет

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

JDB имеет команду потока kill, в которой разработчик может указать идентификатор потока и исключение , которое будет использоваться для уничтожения потока.

Я нашел две ссылки, которые используют отладчик командной строки jdb. См. StackOverflow - возможно ли просмотреть / приостановить / уничтожить определенный поток из другой Java-программы, работающей на той же JVM? , Как использовать вызов kill в JDB?

Не удалось найти никакой информации о похожем методе в отладчике Eclipse Java.

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

Если ваш поток ожидает (заблокирован), вы не можете сделать с ним много.Вы должны были бы interrupt() ожидающая нить.JVM, кажется, имеет эту опцию , вам просто нужно найти ее в отладчике.

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

Почему бы просто не изменить код временно, чтобы он генерировал исключение? (throw new IOException(...)). Или отключитесь от Интернета и попробуйте запустить его.

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