Отладка Java после смерти? - PullRequest
       7

Отладка Java после смерти?

8 голосов
/ 24 ноября 2008

Возможно ли иметь отладочный (или исключительный) сеанс отладки в Java? Какими будут обходные пути (если для этого уже нет решения)?

Ответы [ 3 ]

4 голосов
/ 24 ноября 2008

Насколько я знаю, вам придется ждать Java 7 для официального API - см. http://tech.puredanger.com/java7#jsr326.

Тем временем вы можете заменить Exception (заменить базовый класс, ввести код с помощью инструментов и т. Д.), Чтобы сохранить ваши данные. Обратите внимание, что ClassLoader регулярно генерирует и перехватывает ClassNotFoundException (каждый новый загруженный пакет). Таким образом, у вас будет много контроля без необходимости изменять базовый код.

4 голосов
/ 23 апреля 2009

Я архитектор решений для решений воспроизведения. Они предоставляют «машину времени» для Java-приложений. Вы можете записать приложение во время его работы (скажем, в среде QA), а затем воспроизвести запись на своем компьютере разработчика. Вам не нужен доступ к базе данных, конфигурациям и т. Д. Все, что вам нужно, это их решение ReplayDIRECTOR, и вы можете отладить проблему в дружественных рамках вашей IDE. Проблемы, которые могут быть воспроизведены, варьируются от проблем конфигурации, исключений базы данных до проблем с многопоточностью. Взгляните:

http://www.replaysolutions.com

4 голосов
/ 24 ноября 2008

Вы можете присоединить отладчик к процессу Java и установить точку останова, когда конкретный исключение получено. Это то, что вам нужно?

С http://java.sun.com/j2se/1.5.0/docs/tooldocs/solaris/jdb.html

Когда возникает исключение, для которого нигде нет никакого подвоха до стека Java-программы, Java время выполнения обычно выдает исключение проследить и выйти. Когда работает под JDB, однако, это исключение рассматривается как невосстановимый точка останова, и JDB останавливается на оскорбительная инструкция. Если этот класс был скомпилирован с опцией -g, Экземпляр и локальные переменные могут быть напечатано, чтобы определить причину исключение.

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

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

Приложение не должно запускаться из отладчика, но его можно запустить с параметрами отладки в качестве аргументов:

-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=XXXX

Приложение работает нормально, но при достижении точки останова переключается в «интерпретируемый» режим, по крайней мере, в более современных версиях JVM. Так что на производительность это не влияет.

Проверьте раздел о полноскоростной отладке для HotSpot VM

Полная скорость отладки

Java HotSpot VM теперь использует отладка на полной скорости. В предыдущем версия ВМ, когда отладка была включена, программа выполняется с использованием только переводчик. Теперь полный преимущество в производительности HotSpot технология доступна для программ, даже с скомпилированным кодом. Улучшенный производительность позволяет долго программы легче отлаживать. Это также позволяет проводить тестирование в максимальная скорость. Когда есть исключение, отладчик запускается с полная видимость для источников кода.

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