2012-04-02 40 views
10

Tôi tìm thấy bytecode VerifyErrors nổi tiếng là khó gỡ lỗi. JVM đưa ra rất ít phản hồi, thường chỉ là lớp hiện tại và đôi khi là phương thức.Công cụ tốt để gỡ lỗi VerifyError?

Một số ví dụ về lỗi tôi thường gặp phải khi tay kỹ thuật bytecode qua ASM hoặc Jasmin:

  • Stack size too large
  • Unable to pop operand off an empty stack
  • Falling off the end of the code
  • Expecting to find object/array on stack
  • Incompatible object argument for function call
  • Inconsistent stack height 4 != 2

(Để rõ ràng; Tôi biết những gì tất cả các nghĩa, Tôi quan tâm đến công cụ hoặc kỹ thuật để gỡ lỗi là nguyên nhân của họ)

Câu hỏi của tôi:. Có bất kỳ công cụ ra khỏi đó mà cung cấp cho phản hồi chi tiết về các loại lỗi ? Tôi xin ví dụ đánh giá cao thông tin như

  • javap -like đầu ra
  • tham chiếu đến dòng-số (hoặc offsets opcode byte)
  • toán hạng ngăn xếp thông tin (các loại/chiều sâu) trên mỗi dòng
  • hơn thông báo lỗi mô tả
+1

http://stackoverflow.com/questions/3438404/java-lang-verifyerror nó sẽ giúp ích? – Tom

+0

http://publib.boulder.ibm.com/infocenter/iseries/v5r3/index.jsp?topic=%2Frzatk%2FEX4AA2.htm nó có giúp ích gì không? – Tom

Trả lời

2

Kraktau project Tôi viết là hữu ích để gỡ lỗi xác minh. Nó có khả năng cung cấp bù đắp bytecode nơi xảy ra lỗi, và ngăn xếp và thông tin kiểu cục bộ cho mọi lệnh. Nó thậm chí chính xác xử lý các thông tin cờ và mặt nạ cho các chương trình con. Nó có khả năng bắt hầu như tất cả các lỗi.

Chưa có giao diện cụ thể để in thông tin xác minh, nhưng nếu bạn vẫn là tôi loại chức năng nào bạn muốn, tôi có thể thêm một chức năng. Trong khi đó, cố gắng dịch ngược lớp của bạn bằng Krakatau sẽ in ra một thông báo lỗi với thông tin về lỗi xác minh và thông tin loại của lệnh mà nó xảy ra.

Cập nhật: Krakatau không còn thực hiện xác minh do vấn đề về hiệu suất. Nếu bạn muốn thực hiện xác minh, bạn cần phải thanh toán cam kết 3724c05ba11ff6913c01ecdfe4fde6a0f246e5db.

Các vấn đề liên quan