JDI: как приостановить Java-приложение (JVM), как в отладчике - PullRequest
6 голосов
/ 15 января 2012

Я ищу потенциально JDI API для приостановки JVM в любой произвольной точке во время ее выполнения.Глядя на метод BreakPointRequest createBreakpointRequest, нужно указать конкретное местоположение.Существуют ли другие API, которым не требуется местоположение или каким-либо образом для получения текущего местоположения, которое может быть передано для создания точки останова.

Я в основном ищу способ присоединить и приостановить приложение, а затем использовать агент JVMTIполучить обратный вызов для события BreakPoint для выполнения дальнейшей обработки.Спасибо

Ответы [ 3 ]

3 голосов
/ 17 января 2012

Точки останова имеют смысл только с местоположением в источнике.Произвольная приостановка вашего приложения, вероятно, лучше всего сделать, приостановив все потоки, в настоящее время работающие в JVM.Взгляните на SuspendThreadList() или SuspendThread в jvmti .Этот механизм будет той «паузой», которую вы ищете.

1 голос
/ 20 марта 2014

Если вы хотите произвольно приостановить работающий jvm с помощью JDI, вы должны использовать метод suspend интерфейса JDI VirtualMachine.

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

Если вы ищете способ определения произвольных обратных вызовов для точек останова, в отличие от вызова конкретного агента,Вас может заинтересовать jdiscript , который представляет собой слой сценариев вокруг JDI, который позволяет довольно просто делать такие вещи в прямой Java, а не переходить в C ++.

0 голосов
/ 17 января 2012

я думаю jdb - The Java Debugger будет лучшим вариантом.пожалуйста, проверьте URL о jdb

http://docs.oracle.com/javase/1.3/docs/tooldocs/solaris/jdb.html

...