Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Установка Breakpoint внутри BreakpointEvent (JDI) / 5 сообщений из 5, страница 1 из 1
08.10.2012, 15:39:28
    #37988463
aby_2503
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Установка Breakpoint внутри BreakpointEvent (JDI)
Подскажите, возможно ли установить breakpoint внутри тела метода обработки другого breakpoint.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
if (event instanceof BreakpointEvent) {
            event.request().disable();
            stackFrame = event.thread().frame(0);
            ObjectReference thisObject = stackFrame.thisObject();
            this.objectReference = thisObject;

            Field controlPanelField = thisObject.referenceType().fieldByName("controlPanel");

            ObjectReference controlPanelObject = (ObjectReference) thisObject.getValue(controlPanelField);

            Method method = controlPanelObject.referenceType().methodsByName("click").get(0);

            List<Value> arguments = new ArrayList<Value>();

            arguments.add(null);
            arguments.add(virtualMachine.mirrorOf(0f));
            arguments.add(virtualMachine.mirrorOf(0f));
            addBreakPoint(method, "").enable();

            System.out.println(controlPanelObject.invokeMethod(event.thread(), method, arguments, 0));
            virtualMachine.resume();
                    }


Проблема в конце , во время выполнения метода addBreakPoint(method, "").enable(); . Я так понимаю, что по умолчанию брейкпоинт останавилвает все потоки отлаживаемой VM. Это значит, что после addBreakPoint(method, "").enable(); следует вызвать virtualMachine.resume(); . Но если я это сделаю, тогда вылетит exception на System.out.println(clickListenerObject.invokeMethod(event.thread(), method, arguments, 0)); , так как поток уже не находится в состоянии atBreakpoint. Как решить эту проблему. Мне крайне важно внутри обработки одного брейкпоинта устанавилвать другой.
...
Рейтинг: 0 / 0
08.10.2012, 15:49:16
    #37988501
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Установка Breakpoint внутри BreakpointEvent (JDI)
Что-то нифига не понятно. Можно ли установить новый Breakpoint во время того как JVM остановлена? У вас JDI в той же JVM работает? А когда отсновки по breakpoint происходят, то код JDI тоже останавливается? Или я чего-то недопонимаю?
...
Рейтинг: 0 / 0
08.10.2012, 15:57:30
    #37988528
aby_2503
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Установка Breakpoint внутри BreakpointEvent (JDI)
Изначально я ставлю брейкпоинт. После того, как произошла остановка, я вытягиваю метод под названием click и хочу его вызвать. Но мне нужно не просто его вызвать, а тоже установить на него брейкпоинт. Тут я вытягиваю метод
Код: java
1.
Method method = controlPanelObject.referenceType().methodsByName("click").get(0);

. А тут я хочу поставить на него брейкпоинт
Код: java
1.
addBreakPoint(method, "").enable();

. Затем мне я вызываю этот метод
Код: java
1.
System.out.println(controlPanelObject.invokeMethod(event.thread(), method, arguments, 0));

. Проблема в том, что брейкпоинт по умолчанию имеет suspendPolicy = SUSPEND_ALL_THREADS. Значит, мне необходимо сделать установку брейкпоинта так
Код: java
1.
2.
addBreakPoint(method, "").enable();
virtualMachine.resume();


Но если я так сделаю, тогда не выполнится
Код: java
1.
System.out.println(controlPanelObject.invokeMethod(event.thread(), method, arguments, 0));

Так как потоки уже запущены.
...
Рейтинг: 0 / 0
08.10.2012, 16:01:00
    #37988539
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Установка Breakpoint внутри BreakpointEvent (JDI)
Тогда вам нужно решить вопрос потоков. Есть ваше приложение. Оно работает в каких-то своих потоках.
Есть JDI код, который выполняется в своих потоках. Соответственно в JDI потоке нужно положить событие в какую-нибудь очередь, чтобы работающий поток его оттуда выгреб.
В каких потоках работает само приложение?
...
Рейтинг: 0 / 0
08.10.2012, 16:05:36
    #37988550
aby_2503
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Установка Breakpoint внутри BreakpointEvent (JDI)
Blazkowicz, приложение написано на LibGDX и работает в своем потоке - LwglApplication
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Установка Breakpoint внутри BreakpointEvent (JDI) / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]