



Вы можете присоединить отладчик к процессу Java и установить точку останова, когда определенная исключение получено. Это то, что тебе надо?
Из http://java.sun.com/j2se/1.5.0/docs/tooldocs/solaris/jdb.html
When an exception occurs for which there isn't a catch statement anywhere up a Java program's stack, the Java runtime normally dumps an exception trace and exits. When running under jdb, however, that exception is treated as a non-recoverable breakpoint, and jdb stops at the offending instruction. If that class was compiled with the -g option, instance and local variables can be printed to determine the cause of the exception.
Этот тип точек останова можно установить с помощью любой IDE, например Eclipse. Используя eclipse, вы также можете установить точку останова для определенного типа исключения, даже если это обнаружено в обычном коде.
Если у вас работает что-то вроде многопоточного сервера, и один из потоков, обслуживающих клиента, выдает необработанное исключение, вы сможете проверить отладчик и посмотреть, что произойдет. Я не думаю, что это что-то для производства, но определенно помогает при тестировании.
Приложение не обязательно запускается из отладчика, но его можно запустить с параметрами отладки в качестве аргументов:
-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=XXXX
Приложение работает нормально, но переключается в «интерпретируемый» режим при достижении точки останова, по крайней мере, в более современных версиях JVM. Так что на производительность это не влияет.
Проверьте раздел про полноскоростная отладка для HotSpot VM
Full Speed Debugging
The Java HotSpot VM now uses full-speed debugging. In previous version of the VM, when debugging was enabled, the program executed using only the interpreter. Now, the full performance advantage of HotSpot technology is available to programs, even with compiled code. The improved performance allows long-running programs to be more easily debugged. It also allows testing to proceed at full speed. Once there is an exception, the debugger launches with full visibility to code sources.
Я расширил информацию о полной отладке.
Привет, Марио, похоже, у вас есть опыт подключения jdb к работающему процессу ... не могли бы вы ответить на мой вопрос здесь ..stackoverflow.com/questions/28528325/….
Насколько я знаю, вам придется дождаться появления официального API в Java 7 - см. http://tech.puredanger.com/java7#jsr326.
А пока вы можете заменить Exception (заменить базовый класс, ввести код с помощью инструментовки и т. д.), Чтобы сохранить свои данные. Обратите внимание, хотя ClassLoader выдает и перехватывает ClassNotFoundException регулярно (каждый новый загруженный пакет). Таким образом, у вас будет много возможностей управления без изменения базового кода.
Хотя есть много общих слов, JSR 326 (AFAIK) не отвечает на заданный вопрос. Скорее, он устанавливает стандартные форматы и инструменты для чтения артефактов, созданных из программ Java (дампы кучи, трассировки стека и т. д.). Я не понимаю, как это позволит вам отлаживать вскрытие.
@alex Я, должно быть, предположил, что под «отладкой post moretem» Шарад подразумевал просмотр кучи / получение точной трассировки стека за мгновение до смерти jvm. Вы правы - это не совсем ответ на вопрос.
Я архитектор решений для Replay Solutions. Они предоставляют «машину времени» для Java-приложений. Вы можете записать приложение во время его работы (скажем, в среде контроля качества), а затем воспроизвести запись на своей машине разработки. Вам не нужен доступ к базе данных, конфигурациям и т. д. Все, что вам нужно, это их решение ReplayDIRECTOR, и вы можете отлаживать проблему в дружественных пределах вашей IDE. Проблемы, которые могут быть воспроизведены, варьируются от проблем с конфигурацией, исключений базы данных до проблем потоковой передачи. Посмотри:
http://www.replaysolutions.com
Эта ссылка ведет меня на мошеннический сайт.
Дело в том, что мое приложение будет работать неопределенное время, и если оно выдаст исключение, я хотел бы выполнить отладку. Дело в том, что если запустить приложение в отладчике, производительность упадет.