我正在編寫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中的源代碼行號(或者甚至以任何方式),請幫忙!
[如果有人知道這個領域工作,請讓我知道,因爲我有幾個問題想請教一下過程。]