Подтвердить что ты не робот

Силовое исключение при отладке

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

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

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

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

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

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

EDIT: Другими словами, мне нужно ввести - вызывать исключение во время работы, не затрагивая текущий код!

Спасибо.

4b9b3361

Ответ 1

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

Ответ 2

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

Ответ 3

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

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

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

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

Ответ 4

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

Ответ 5

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

Ответ 6

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

Я нашел две ссылки, которые используют отладчик jdb командной строки. См. fooobar.com/info/244478/..., Как использовать вызов kill в JDB?

Я не мог найти информацию о подобном методе от отладчика Java Eclipse.