2009-08-31 24 views
8

Có cách nào để lấy bản đồ hoặc cấu trúc dữ liệu khác của các biến cục bộ trong phạm vi hiện tại trên JVM mà không sử dụng trình gỡ rối không? Đó là, để có được người dân địa phương của khung stack hiện tại?Lấy các biến cục bộ từ một khung ngăn xếp trên JVM

Tôi biết rằng có các đối tượng stacktrace, nhưng StackTraceElement không có cách nào để truy cập vào bất kỳ trạng thái nào. Nó chỉ cho bạn biết phương pháp nào được gọi là ở đâu, nhưng không phải cái gì ở trong đó.

Trả lời

4

Tên biến có thể được bao gồm trong tệp lớp để hỗ trợ trình gỡ lỗi, nhưng javac không thực hiện theo mặc định. Nó yêu cầu tùy chọn -g:vars.

Nếu có, chương trình có thể sử dụng thư viện kỹ thuật mã byte như ASM để truy cập vào tên và phạm vi biến cục bộ.

Trong khi this question kém phát âm, tôi cho rằng đó là bản sao và các câu trả lời có thể liên quan đến vấn đề của bạn. Tôi sẽ thêm rằng nếu bạn không quan tâm đến tên, kiểu biến cục bộ và phạm vi luôn được bao gồm trong bảng thuộc tính của từng phương thức.

1

Tôi không nghĩ có cách nào để thực hiện việc này. Trình biên dịch luôn miễn phí để tối ưu hóa các biến cục bộ, và việc cung cấp một phương thức như vậy sẽ ngăn cản trình biên dịch lợi dụng loại tối ưu hóa này. Khi biên dịch một phương thức, trình biên dịch sẽ không thể biết liệu bạn có gọi một giả thuyết là getLocalVariables() ở một nơi khác trong chương trình hay không, vì vậy nó sẽ luôn phải đặt tất cả các biến cục bộ được khai báo trong một bản đồ như vậy.

+0

Các biến cục bộ có sẵn trong bản đồ trong StackFrame. Bạn có thể xem tại đây https://docs.oracle.com/javase/7/docs/jdk/api/jpda/jdi/com/sun/jdi/StackFrame.html –

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