Во время отладки, как оценить кусок кода в целевой VM отладки?
Во время отладки, например, в Eclipse, можно оценить выражения наблюдения или условные точки останова. Как правило, они оцениваются на стороне клиента. Например, при отладке из Eclipse, это сам Eclipse, а не целевая виртуальная машина отладки, которая оценивает эти выражения. Это может быть довольно дорогостоящим, особенно в случае условных точек останова, поскольку отлаживающая виртуальная машина (т. Е. Eclipse) должна становиться активной при каждом обращении к точке останова, даже если условие оценивается как ложное.
Мой вопрос сейчас заключается в том, позволяет ли протокол отладки вместо этого оценивать такие выражения или условные точки останова в целевой отладочной ВМ, так что целевая ВМ уведомляет отлаживающую ВМ только тогда, когда выражение / условие действительно оценивается как ИСТИНА.
1 ответ
Кроме IDE (ab), использующего горячую замену кода для замены тела метода на тело с пустым блоком if и размещения там (условной) точки останова, я не могу найти ничего в http://download.oracle.com/javase/1.5.0/docs/guide/jpda/jdwp/jdwp-protocol.html который может помочь в этом.
Есть exprId
в EventRequest.Set, который задокументирован как "на будущее" и не раскрывается через JDI BreakpointRequest, поэтому я не думаю, что это работает или будет работать.
Кстати, оценка происходит внутри целевой виртуальной машины (т. Е. Если вы используете equals() в своем выражении, equals() будет выполняться в вашей целевой виртуальной машине), но оценка будет запущена с отладочной виртуальной машины.