私はJavaプログラムをプロファイルするためにJVMTIコードを書いています。これは主に、関数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ですが、これでも私が望むことをしていない可能性があり、追加のインストールが必要であり、データを処理する必要があります、別のJavaプログラムを使用して、C++JMVTIコードによって生成されました。
JVMTI内から(または何らかの方法で)BCIをソースコードの行番号に変換する方法を誰かが知っている場合は、助けてください!
[この分野をよく知っている人がいたら、私に知らせてください。プロセスについてさらにいくつか質問があります。]