Ответ 1
Я бы нашел переменную, которую ждут, и в окне выражения в eclipse вызовет уведомление об этой переменной, тогда я бы null
вынул эту переменную, чтобы синхронизированный блок выбрал NullPointerException
.
Можно ли заставить исключение вызывать при отладке.
Позвольте мне привести пример: я отлаживаю некоторый код, где я загружаю страницу из Интернета. Когда интернет-соединение потеряно или сетевая карта не работает, должно быть выбрано исключение IOException, но вместо этого выполнение блокируется (во второй строке)
URLConnection connection = requestURL.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
Мне нужен способ заставить бросать исключение при отладке, когда код блокируется, поэтому я могу перейти к блоку catch.
Я использую netbeans BTW.
Отладка= добавлена вручную, когда поток выполнения приостановлен.
EDIT: Другими словами, мне нужно ввести - вызывать исключение во время работы, не затрагивая текущий код!
Спасибо.
Я бы нашел переменную, которую ждут, и в окне выражения в eclipse вызовет уведомление об этой переменной, тогда я бы null
вынул эту переменную, чтобы синхронизированный блок выбрал NullPointerException
.
В перспективе eclipse Debug в представлении "Выражения" просто добавьте новое выражение: throw new Exception("test")
. Я полагаю, что NetBeans имеет нечто подобное.
Я думаю, что вам нужно сделать перенос этого кода в FutureTask с тайм-аутом и иметь основной поток, ожидающий либо тайм-аут, либо завершение задачи.
Вы также можете использовать некоторые дополнительные системные свойства, чтобы генерировать исключение только в тестовом режиме
Посмотрите этот пост (Отказ от ответственности, я его написал)
Надеюсь, что это поможет
Почему бы не просто временно изменить код, чтобы он генерировал исключение? (throw new IOException(...)
). Или, отключитесь от Интернета и попробуйте запустить его.
Если поток работает (заблокирован), вы не можете с ним справиться. Вы должны будете interrupt()
ожидающий поток. Кажется, что JVM имеет этот параметр, вам просто нужно найти его в отладчике.
JDB имеет команду потока kill
, где разработчик может указать идентификатор потока и исключение, которые будут использоваться для уничтожения потока.
Я нашел две ссылки, которые используют отладчик jdb командной строки. См. fooobar.com/info/244478/..., Как использовать вызов kill в JDB?
Я не мог найти информацию о подобном методе от отладчика Java Eclipse.