在GCC和OpenJDK编译器中跟踪调试信息的差异

时间:2019-03-24 12:09:30

标签: c++ debugging compiler-construction jvm compiler-optimization

我注意到,当我使用GCC -Og编译代码时,gdb通常无法断点断点告知变量值,因为它们已“优化”。我知道信息以某种形式存在,因为程序结果取决于它的值。

另一方面,我从未见过OpenJDK会发生这种情况,它能够很好地编译代码以实现性能和调试目的。

为什么存在这种差异?

我认为两个编译器都允许在代码中的任意位置设置断点,即使对代码进行了优化,内联等也是如此。我怀疑以下可能性:

  • GCC仅跟踪有关转换程序的信息较少(但是为什么?)
  • JVM生成的速度较慢,更易于跟踪
  • 插入断点时,JVM会优化代码(也取消内联代码?)
  • 在这种情况下,JVM具有更好的编译器体系结构
  • JVM调试器实际上未跟踪进程

0 个答案:

没有答案