Что такое точка останова для JVM / байт-кода / процессора? - PullRequest
3 голосов
/ 21 декабря 2011

Когда я нажимаю точку останова в коде выполнения Java, что это делает на самом деле?

это флаг на уровне JVM? На уровне процессора?

Можем ли мы увидеть разницу в инструкциях байт-кода? Это цикл в JVM?

Ответы [ 2 ]

3 голосов
/ 21 декабря 2011

Я не нашел конкретной ссылки на установку точек останова в Java, но в собственном коде отладчик поместил бы однобайтовую инструкцию прерывания (INT 3) поверх оригинальной инструкции. После этого прерывание включается и дает контроль отладчику. Эта статья содержит дополнительную информацию.

Из документации по JVM Tools Я бы сделал вывод, что подобный подход используется в байт-коде Java.

1 голос
/ 21 декабря 2011

Зависит от реализации. Для кода JITCed (и, например, обычного C / C ++) некоторые блоки перезаписывают инструкцию инструкцией trap, в то время как другие используют «аппаратные средства» (обычно связанные с защитой хранилища) для обнаружения попадания в точку останова.

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

...