Я пишу код JVMTI для профильных программ Java, что в основном влечет за собой получение трассировки стека от случайных потоков через фиксированные промежутки времени, используя функцию AsyncGetCallTrace.Таким образом, я могу получить структуры CallTrace, каждая из которых содержит массив структур CallFrame, которые содержат данные об отдельных кадрах в трассировке стека.В частности, эти данные состоят из: jmethodID method_id (идентификатор метода java, в котором расположен фрейм) и: jint lineno (BCI метода в файле .class, насколько я понимаю в документации).Кажется, я не могу найти способ преобразовать это "lineno" в соответствующий номер строки исходного кода, используя инфраструктуру JVMTI (см. Файл jvmti.h, расположенный в / usr / lib / jvm / java-6-sun / include, по крайней мере,в Linux).На самом деле, даже за рамками JVMTI, единственное, что я смог найти в Интернете до сих пор, было здесь: http://jakarta.apache.org/bcel/apidocs/org/apache/bcel/classfile/LineNumberTable.html,, но даже это может не делать то, что я хотел, и требует дополнительной установки, И требует от меняобработать данные, которые были сгенерированы кодом CM JMVTI, с использованием отдельной программы Java.
Если кто-нибудь знает, как преобразовать BCI в номера строк исходного кода изнутри JVMTI (или даже любым другим способом), помогите!
[Если кто-то хорошо знает это поле, пожалуйста, дайте мне знать, так как у меня есть еще несколько вопросов о процессе.]