代码之家  ›  专栏  ›  技术社区  ›  user400348

将BCI(字节码索引)转换为源代码行号

  •  5
  • user400348  · 技术社区  · 16 年前

    http://jakarta.apache.org/bcel/apidocs/org/apache/bcel/classfile/LineNumberTable.html 但是,即使这样,也可能不做我想做的事,需要额外的安装,并且需要我处理由C++ JMVTI代码生成的数据,使用单独的java程序。

    [如果有人很了解这个领域,请告诉我,因为我还有一些关于这个过程的问题要问。]

    1 回复  |  直到 11 年前
        1
  •  5
  •   user400348    16 年前

    我想我有点明白了。要使用的主要方法是jvmti->GetLineNumberTable(…),它填充jvmtiLineNumberEntry数组。给定BCI行号n(将映射到源行号),可以测试int i为:jvmtiLineNumberEntryArray[i]<=n<jvmtiLineNumberEntryArray[i+1]。这个int i就是所需的相应源代码行号。

    一个问题是,由于某种原因,AsyncGetCallTrace始终返回奇怪的bci,因此尽管映射 精确的 源代码行号,它们仍然不是 精确的 ,因为原始BCI不准确。为什么,我不知道。我希望使用sunstudioprofiler(它也使用AsyncGetCallTrace)来测试返回的行号是否与我的profiler相同。在这种情况下,AsyncGetCallTrace函数是不准确的。但到目前为止,使用sunstudio变成了一个挑战。 如果有人知道如何使用这个工具,请帮助!

    http://developer.amd.com/documentation/articles/pages/JVMTIEventPiggybacking.aspx