Разница в отслеживании отладочной информации в компиляторах GCC и OpenJDK - PullRequest
0 голосов
/ 24 марта 2019

Я заметил, что когда я компилирую код с помощью GCC -Og, GDB часто не может определить значение переменных во время точек останова, потому что они "оптимизированы". Я знаю, что информация существует в той или иной форме, так как результат программы зависит от ее значения.

С другой стороны, я никогда не видел, чтобы это случилось с OpenJDK, который способен очень хорошо компилировать код как для производительности, так и для целей отладки.

Почему такая разница существует?

Я думаю, что оба компилятора позволяют устанавливать точки останова в произвольных местах кода, даже если код был оптимизирован, встроен и т. Д. Я подозреваю следующие возможности:

  • GCC просто отслеживает меньше информации о преобразованной программе (но почему?)
  • JVM создает более медленный код, который легче отслеживать
  • JVM деоптимизирует (также деинлайн) код, когда вставлена ​​точка останова
  • В этом случае JVM имеет лучшую архитектуру компилятора
  • Отладчик JVM фактически не отслеживает процесс
...