Tôi đang viết mã JVMTI cho các chương trình Java hồ sơ, chủ yếu đòi hỏi phải thu thập dấu vết ngăn xếp từ các chuỗi ngẫu nhiên tại các khoảng thời gian cố định bằng cách sử dụng hàm AsyncGetCallTrace. Vì vậy, tôi có thể có được các cấu trúc CallTrace, mỗi cấu trúc chứa một mảng các cấu trúc CallFrame, chứa các dữ liệu về các khung riêng lẻ trong một dấu vết ngăn xếp. Cụ thể, các dữ liệu này bao gồm: jmethodID method_id (ID của phương thức java nơi khung được đặt), và: jint lineno (BCI của phương thức trong tệp .class, theo như tôi hiểu tài liệu). Tôi dường như không thể tìm cách chuyển đổi "lineno" này thành số dòng mã nguồn tương ứng bằng cách sử dụng khung JVMTI (xem tệp jvmti.h, nằm trong/usr/lib/jvm/java-6-sun/include, ít nhất trên Linux). Trong thực tế, ngay cả ngoài khung công tác JVMTI, điều duy nhất tôi có thể tìm thấy trên web cho đến nay là: http://jakarta.apache.org/bcel/apidocs/org/apache/bcel/classfile/LineNumberTable.html, nhưng thậm chí điều này có thể không làm những gì tôi muốn và yêu cầu cài đặt bổ sung, VÀ yêu cầu tôi xử lý dữ liệu, được tạo bởi mã C++ JMVTI, sử dụng một chương trình Java riêng biệt.Chuyển đổi BCI (chỉ số bytecode) sang số dòng mã
Nếu có ai biết cách chuyển đổi BCI sang các số dòng mã nguồn từ bên trong JVMTI (hoặc thậm chí bằng bất kỳ cách nào), vui lòng trợ giúp!
[Nếu ai đó biết lĩnh vực này tốt, xin vui lòng cho tôi biết, kể từ khi tôi có thêm một vài câu hỏi để hỏi về quá trình này.]