2009-07-28 79 views
6

Tôi đang gặp sự cố khi theo dõi lỗi và nó sẽ giúp bạn biết được phương pháp nào được gọi là phương pháp nhất định. Có một cách dễ dàng để có được một hệ thống phân cấp cuộc gọi từ java? Java là một phần nhỏ của ứng dụng vì vậy tôi không thể biên dịch và chạy toàn bộ ứng dụng trong nhật thực/hạt net vì vậy tôi không có quyền truy cập vào hệ thống phân cấp cuộc gọi của trình gỡ lỗi IDE.Nhận hệ thống phân cấp cuộc gọi trong java

+0

Có vẻ như bạn thực sự muốn theo dõi ngăn xếp chứ không phải phân cấp cuộc gọi. (Có thể chỉnh sửa Chủ đề của câu hỏi không?) –

+0

Dấu vết ngăn xếp là phân cấp cuộc gọi trừ khi tôi thiếu một số khác biệt tinh tế. –

+1

Một hệ thống gọi là heirarchy là một TREE của tất cả những nơi mà một thủ tục có thể được gọi từ. –

Trả lời

14
Thread.currentThread().getStackTrace(); 

hoặc

Exception ex = new Exception(); 
ex.printStackTrace(); 

Đó là khá chậm, nhưng tốt cho mục đích gỡ lỗi. API docs here.

0

Điều tốt nhất cần làm là ném ngoại lệ, ngay lập tức nắm bắt và phân tích dấu vết ngăn xếp.

Tôi tin rằng đó là cách Log4J có khả năng ghi nhật ký phương thức gọi.

+2

với Thread.dumpStack() hoặc một số như vậy không cần phải ném một ngoại lệ nhân tạo. – djna

+0

Bạn đúng rằng đây là cách mà log4j thực hiện. Tôi nghĩ rằng thisi chỉ vì lý do lịch sử, mặc dù Java 1.5 phương thức currentThread(). GetStackTrace() được Nelson đề xuất sẵn có nên cách tiếp cận này không còn cần thiết nữa. – mikej

1

Java là một phần nhỏ của ứng dụng, vì vậy tôi không thể biên dịch và chạy toàn bộ ứng dụng trong nhật thực/hạt net để tôi không có quyền truy cập vào hệ thống phân cấp cuộc gọi của trình gỡ lỗi IDE.

Bạn không cần chạy ứng dụng chút nào. Nếu bạn tạo một dự án trong Eclipse, bạn có thể sử dụng công cụ Phân cấp cuộc gọi dựng sẵn của nó để tìm tất cả các địa điểm có thể gọi một phương thức.

Có giao dịch tắt: Công cụ Phân cấp cuộc gọi sẽ cung cấp cho bạn TẤT CẢ các địa điểm từ nơi phương thức được gọi. Điều này là tốt nếu bạn muốn/cần phải biết tất cả các khả năng. Đề nghị của Neslson về Thread.currentThread().getStackTrace() sẽ cung cấp cho bạn các địa điểm từ nơi mà một phương thức được gọi trong quá trình bạn lập trình cho lời gọi này. Sắc thái là bạn có thể không chạy qua mọi đường dẫn mã trong suốt quá trình gọi này. Nếu bạn thấy hành vi cụ thể và muốn biết cách bạn đến đó, hãy sử dụng tùy chọn getStackTrace().

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