2008-12-16 42 views
8

Tôi đã tự hỏi nếu một cái gì đó tồn tại (trong thế giới Java) có thể lấy một bản chụp của hiện trạng JVM với các tính năng sau:Exception Automated Xử lý

  • Do nó trong khi một ngoại lệ được ném.
  • Ghi lại các biến cục bộ, đối số của phương thức, v.v.
  • Đặt tệp này vào một tệp tiện dụng có thể được sử dụng để trích xuất hoặc tạo lại trong IDE tình huống trong mã nguồn của bạn.

Hai tính năng đầu tiên là bắt buộc (thứ ba sẽ là tuyệt vời). Và nó phải phù hợp để sử dụng sản xuất (vì vậy, không có cách nào để gỡ rối).

Trước khi hỏi này tôi đã tìm kiếm thông qua WWW (càng lâu càng tốt) và tôi thấy một số gợi ý:

  • Cajoon Interceptor: Như đã nói ở Dzone post, đó là một đại lý JVM thụ động mà thực hiện ba yêu cầu! Nhưng, nó có hai nhược điểm: bạn phải trả tiền cho nó và trang web là xuống (có thể không có cơ hội để trả bất cứ điều gì).
  • AviCode Intercept Studio: Tương đương .NET của Cajoon. Chỉ cần cung cấp cho một số cái nhìn sâu sắc về.
  • JavaFrame: Ok, đó là một tweet, nhưng nó trỏ đến một repo SVN có sẵn có mã nguồn (theo giấy phép MIT) của một đại lý JVM có vẻ tốt (tôi sẽ cố gắng).

Vì vậy, có thể tôi đang tìm giải pháp không tồn tại? Nó không phải là cấp bách, nhưng tôi đã có ý tưởng này cho một dự án và nó sẽ là tuyệt vời để khám phá con đường "không rõ" (?) Này và nhận được một cái gì đó thực sự.

Có vẻ như rõ ràng rằng đó sẽ là một đại lý JVM (sự kiện ngoại lệ từ JVMTI, cho example).

Cuối cùng, tôi sẽ làm nổi bật đoạn followin từ Wikipedia's Exception Handling article:

Trong môi trường cơ runtime như Java hay .NET, có tồn tại công cụ mà đính kèm để chạy động cơ và mỗi thời điểm đó một ngoại lệ quan tâm xảy ra, họ ghi lại thông tin gỡ lỗi đã tồn tại trong bộ nhớ tại thời gian ngoại lệ được ném (giá trị ngăn xếp cuộc gọi và giá trị đống). Các công cụ này được gọi là các công cụ Tự động Ngoại trừ Xử lý hoặc Lỗi khi bắt buộc và cung cấp thông tin 'nguyên nhân gốc' cho trường hợp ngoại lệ.

Đó là ý tưởng. Tôi hy vọng ai đó có thể cho tôi một số thông tin chi tiết hoặc có thể, trong tương lai, ai đó lấy cảm hứng từ bài viết khiêm tốn này :)

Cảm ơn!

+0

Tôi tò mò muốn biết nếu bạn đã tìm thấy các giải pháp khác. – dsatish

Trả lời

2

Tôi xem xét JavaFrame và dường như đây là điểm khởi đầu tốt. Chỉ cần cài đặt Apache Ant, làm ant trong thư mục javaframe và khởi động các bộ kiểm tra (bên trong thư mục test) với:

LD_LIBRARY_PATH=../build/native/ java -agentlib:frameintrospect -classpath ../build/classes/:. org.thobe.frame.Test 

Nó không nhận được bất kỳ biến địa phương nhưng nó cố gắng. Vì vậy, như tôi đã nói, nó có thể là một điểm khởi đầu. Tôi hy vọng sẽ nhận được thêm về cách sử dụng của nó, nhưng không có thời gian và không có tài liệu (có rất nhiều dự án có tên JavaFrame) là những trường hợp xấu.

Có thể một số ngày có thể được thực hiện lại. Có, một lần nữa. Có Cajoon, nó trông đầy hứa hẹn và sáng bóng nhưng trang web của nó không hoạt động và không có dấu vết của bất kỳ lọ nào có thể tải xuống được.

Xin cảm ơn tất cả mọi người!

PD .: Chỉ cần để tham khảo, một số liên kết tôi thấy khi nghiên cứu:

0

Không chắc nếu điều này là khả thi trong một môi trường sản xuất, nhưng có các debugger Toàn Giác:

gì nếu debugger của bạn có thể đi "đi ngược thời gian?" Điều đó có làm cho việc gỡ lỗi dễ dàng hơn không? Bằng cách đơn giản ghi lại tất cả các bài tập biến, có thể thực hiện được điều này.Đây là ý tưởng cơ bản để gỡ lỗi toàn bộ. Phần đáng kinh ngạc là các chương trình lớn đáng kể có thể được sửa lỗi trong thời trang này - Ant, JUnit, chính trình gỡ rối.

http://www.lambdacs.com/debugger/

+0

Tôi cũng tìm thấy nó, nhưng tôi không nghĩ rằng nó có thể là một giải pháp thích hợp cho một môi trường sản xuất, bởi vì nó có vẻ cần thực thi thông qua chương trình của bạn. Hãy tưởng tượng nó với một JBoss AS ... Cảm ơn anyway;) – Dario

1

Bạn có thể muốn nhìn vào công việc mà NetBeans đã làm liên quan đến tự động sử dụng khai thác gỗ: http://wiki.netbeans.org/UsageLoggingSpecification.

Để bán phá giá các biến cục bộ, tôi sẽ tưởng tượng rằng bạn có thể chỉ cần sử dụng trình gỡ rối, chẳng hạn như trình bajafresh4life đã đề cập.

+0

Cảm ơn, có một cách để gọi một trình gỡ lỗi trong khi xử lý một ngoại lệ? Mục tiêu là lấy hình ảnh của trạng thái JVM khi đang di chuyển, ngay trong thời điểm ngoại lệ tăng lên. Bằng cách này, bạn sẽ có thể xem giá trị của các biến cục bộ, cũng như các lớp tĩnh và đối số của phương thức. – Dario

1

Có thể nó có thể được thực hiện với AspectJ?

+0

Có thể nhưng không có biến cục bộ nào có sẵn, tôi đoán, bởi vì các khía cạnh có phạm vi hoặc bối cảnh riêng của chúng (có thể tôi sai). – Dario