我正在编写JVMTI代码来剖析Java程序,这些程序通常需要使用函数AsyncGetCallTrace以固定时间间隔从随机线程获取堆栈跟踪。因此,我可以获得CallTrace结构,每个结构都包含一个CallFrame结构数组,其中包含有关堆栈跟踪中各个帧的数据。具体来说,这些数据由jmethodID method_id(框架所在的java方法的ID)和jint lineno(.class文件中方法的BCI,据我了解文档)组成。我似乎无法找到一种方法来使用JVMTI框架将此“lineno”转换为相应的源代码行号(至少位于/ usr/lib/jvm/java-6-sun/include中的文件jvmti.h在Linux上)。事实上,即使在JVMTI框架之外,我目前在网络上唯一能找到的东西是:http://jakarta.apache.org/bcel/apidocs/org/apache/bcel/classfile/LineNumberTable.html,但即使这可能不是我想要的,并且需要额外的安装,并且需要我处理数据,它是由C++ JMVTI代码使用独立的Java程序生成的。将BCI(字节码索引)转换为源代码行号
如果有人知道如何将BCI转换为JVMTI中的源代码行号(或者甚至以任何方式),请帮忙!
[如果有人知道这个领域工作,请让我知道,因为我有几个问题想请教一下过程。]