2012-01-15 13 views
6

Poszukuję potencjalnie interfejsu API JDI, aby wstrzymać maszynę JVM w dowolnym punkcie podczas jej wykonywania. Patrząc na metodę createBreakpointRequest BreakPointRequest potrzebuje określonej lokalizacji. Czy istnieje inny interfejs API, który nie potrzebuje lokalizacji lub w inny sposób, aby uzyskać bieżącą lokalizację, którą można przekazać w celu utworzenia punktu przerwania.JDI: Zatrzymywanie aplikacji Java (JVM), podobnie jak w debugerze

Po prostu szukam sposobu na dołączenie i wstrzymanie aplikacji, a następnie skorzystanie z agenta JVMTI do odebrania wywołania zwrotnego dla zdarzenia BreakPoint w celu wykonania dalszego przetwarzania. Dzięki

+0

Chcesz zatrzymać JVM lub aplikację? jeśli rozumiem poprawnie, jeden jvm może obsługiwać wiele aplikacji. Jeśli jest to Jvm, klasa Virtualmachine, metoda procesu może być warta badania na twoje zapotrzebowanie. – kosa

Odpowiedz

3

Punkty przerwań tylko sensu z umieszczeniem w źródle. Samowolne wstrzymanie aplikacji najlepiej wykonać, zawieszając wszystkie wątki aktualnie uruchomione w maszynie JVM. Spójrz na SuspendThreadList() lub SuspendThread w jvmti. Ten mechanizm byłby "pauzą", której szukasz.

1

Jeśli chcesz dowolnie wstrzymać działający jvm z JDI, użyjesz metody suspend interfejsu JDI VirtualMachine.

Jednak to naprawdę nie daje wiele, jeśli chodzi o możliwość połączenia się z agentem jvmti; jak wskazuje inna odpowiedź, jvmti ma swoje własne metody robienia tego samego.

Jeśli szukasz sposobu definiowania dowolnych wywołań zwrotnych dla punktów przerwania, w przeciwieństwie do wywoływania do określonego agenta, może być interesujący jdiscript, który jest warstwą skryptów wokół JDI, która umożliwia wykonywanie takich czynności dość łatwo w prostej Javie, zamiast rzucać się do C++.

Powiązane problemy