Как во время отладки оценить фрагмент кода в целевой виртуальной машине для отладки?

Во время отладки, например. в Eclipse можно оценивать выражения наблюдения или условные точки останова. Как правило, они оцениваются на стороне клиента. Например, при отладке из Eclipse именно Eclipse, а не целевая отладочная виртуальная машина, оценивает эти выражения. Это может быть довольно дорого, особенно в случае условных точек останова, потому что виртуальная машина отладки (например, Eclipse) должна становиться активной при каждом попадании в точку останова, даже если условие оценивается как ложное.

Теперь мой вопрос заключается в том, позволяет ли протокол отладки вместо этого оценивать такие выражения или условные точки останова в целевой виртуальной машине отладки, чтобы целевая виртуальная машина уведомляла отладочную виртуальную машину только тогда, когда выражение/условие действительно оценивается как TRUE.


person user66237    schedule 22.06.2010    source источник


Ответы (1)


Помимо IDE (ab), использующей замену горячего кода для замены тела метода телом с пустым блоком if и установки (условной) точки останова, я ничего не могу найти в http://download.oracle.com/javase/1.5.0/docs/guide/jpda/jdwp/jdwp-protocol.html, который может помочь в этом.

В EventRequest.Set есть exprId, который задокументирован как «на будущее» и не раскрывается через JDI BreakpointRequest, поэтому я не думаю, что это сработало или когда-либо сработает.

Между прочим, оценка происходит внутри целевой виртуальной машины (т. е. если вы используете equals() в своем выражении, equals() будет выполняться в вашей целевой виртуальной машине), но оценка будет запускаться из отладочной виртуальной машины.

person mihi    schedule 01.09.2011