Tôi đang tìm cách tạo một đường dây điện thoại cho các dự án java từ dòng lệnh. Tôi đã khám phá một số dự án, mỗi lần giảm ngắn (hoặc trong sự hiểu biết của tôi, hoặc chức năng) của những gì tôi đang hướng tới. Một số hướng dẫn đơn giản về cách thực hiện điều này sẽ là tuyệt vời, một mục tiêu bổ sung là để có được một biểu diễn văn bản của biểu đồ này.Tạo biểu đồ cuộc gọi trực quan cho các dự án java từ dòng lệnh
Dưới đây là những gì tôi đã cố gắng:
Gọi đồ thị: https://github.com/gousiosg/java-callgraph
này mang lại cho tôi đầu ra văn bản mà tôi muốn, nhưng tôi không thể tìm thấy một chiều (sau khi xem xét thông qua các tài liệu trong một thời gian), để biến điều này thành đầu ra đồ thị (tệp hình ảnh).
Bồ hóng: http://sable.github.io/soot/
Sau khi dành một lượng lớn thời gian tìm kiếm thông qua các tài liệu hướng dẫn bồ hóng, mà dường như khá khó khăn để làm theo, tôi quản lý để có được bồ hóng để tạo bytecode. Tuy nhiên, tôi không thể tìm thấy bất kỳ hướng dẫn nào về cách tạo biểu đồ cuộc gọi từ nó. Tôi chỉ thấy trên trang chính rằng nó có thể làm điều này và tôi nhận được một số cuộc hội thoại qua email từ các tìm kiếm trên google của mình, tất cả chỉ là những câu hỏi không có câu trả lời. Tôi đang sử dụng bản dựng hàng đêm bằng lệnh:
java -cp soot-trunk.jar soot.Main -cp . -pp HelloWorld
Trong trường hợp HelloWorld là tên tệp java của tôi, tôi nhận được đầu ra là tệp .class, nhưng tôi không thể xem cách nhận thực tế biểu đồ cuộc gọi. Đây là sau khi làm theo hướng dẫn tại đây: https://github.com/Sable/soot/wiki/Running-Soot. Khi tôi theo các liên kết về hình ảnh, chúng dường như là các liên kết bị hỏng rồi chuyển hướng trở lại trang chủ. Tôi có thể thấy một số thông tin về việc sử dụng cờ -cg trên trang dòng lệnh nhưng không thể nhận được bất kỳ thứ gì để hoạt động - tôi chỉ nhận được lỗi phân tích cú pháp tùy chọn, đề xuất một đối số không hợp lệ: https://ssebuild.cased.de/nightly/soot/doc/soot_options.htm#phase_5
Tìm kiếm stackoverflow - câu trả lời hiện có Tôi đã xem xét một số câu hỏi tương tự, chẳng hạn như: Static analysis of Java call graph Tuy nhiên, câu trả lời chỉ nói "sử dụng muội" hoặc "sử dụng biểu đồ cuộc gọi", tôi đã thử những điều này mà không có bất kỳ may mắn nào - mặc dù tôi gần nhất với biểu đồ cuộc gọi khi tôi có đầu ra văn bản.
Tôi thấy một số phần mềm dựa trên GUI và các plugin eclipse yêu cầu tạo biểu đồ cuộc gọi, nhưng tôi đang cố gắng làm việc này từ dòng lệnh.
Bất kỳ trợ giúp nào thực sự được đánh giá cao, hướng dẫn hoặc tập hợp lệnh bằng biểu đồ cuộc gọi hoặc Soot hoặc chương trình khác thực sự hữu ích. Có thể bạn cũng nên thực hiện bất kỳ hướng dẫn ngắn nào về tài liệu của mình có nhiều câu hỏi hơn câu trả lời khi tìm kiếm.
Để tham khảo, tôi hiện đang cố gắng với một lớp học rất đơn giản dưới đây:
public class HelloWorld {
public static void main(String[] args) {
foo();
}
public static void foo(){
System.out.println("Hello World");
}
}
Cảm ơn bạn! Mặc dù tôi chưa có chút thời gian để thử điều này, nó trông giống như những gì tôi đang theo đuổi. Câu trả lời này chắc chắn sẽ giúp những người tương lai xem câu hỏi này vì nó được giải thích rõ ràng. Cảm ơn nhiều. – ThePerson