Когда я нажимаю точку останова в коде выполнения java, что она на самом деле делает?Что такое точка останова для JVM/байт-кода/процессора?
Это флаг на уровне JVM? На уровне процессора?
Можем ли мы видеть разницу в инструкциях по байт-коду? Это цикл в JVM?
Я прочитал статью, и я нашел ее действительно интересной. Но я все еще не могу понять все: в статье они сохраняют в памяти значение выбранного значения точки останова. Затем измените значение в выбранном смещении точки останова на байт-код, указывающий OxCA. Кажется, этот момент просто спит. Следует поэтому учитывать, что код уже полностью загружен в стек JVM перед выполнением. И изменение точки байт-кода просто изменит порядок процесса? Не нужно перекомпилировать каждый раз при изменении чего-то? –
Вы не меняете исходный код, а только байт-код в памяти, который уже является продуктом компиляции. JVM говорит байт-код и ничего не знает о компиляции. Javac - это переводчик из Java-кода, созданного человеком, в байт-код JVM. Любая отладка будет происходить в контексте отладчика. Отладчик сообщит JVM о том, что он заменил код и поставил прерывание (0xCA) на свое место. JVM полностью знает, где в памяти сидит этот байт-код, поэтому нет проблем с его заменой. –
И знаете ли вы, как сообщить JVM вспомнить замененный код и поставить точку останова OxCA? –