Java: Как отладчик показывает приватные поля? - PullRequest
2 голосов
/ 15 апреля 2020

Если поля, определенные в классе Java как «закрытые», доступны только из их собственного класса - как инструмент отладки показывает их и их значения, когда мы проходим код выполнения?

Снимок экрана «картинка в картинке» для иллюстрации: enter image description here

По-моему, JVM имеет режим отладки, который позволяет специальному пакету отладки получать к ним доступ. Работа в режиме отладки (например, конфигурации отладки из IDE) позволяет этому специальному пакету (который IDE знает использовать) делать свое дело.

Это просто интересно ... Никакая работа не зависит от вашего ответа здесь:)

1 Ответ

4 голосов
/ 15 апреля 2020

В JVM, основанной на базе кода OpenJDK, отладчик использует агент JVMTI для доступа к состоянию отлаживаемой программы. Агент выполняет вызовы к нативному API JVMTI. Это позволяет агенту (и, следовательно, отладчику) читать и записывать значения полей объекта, локальных переменных и так далее. API JVMTI игнорируют доступность. (Точно так же, как это делают API-интерфейсы JNI.)

Подробнее см. В документации по Интерфейсу инструментов JVM .

. Более широкое представление см. В * 1007. *Java Документация по архитектуре отладчика платформы . JVMTI является частью этой архитектуры.

...