2010-10-21 7 views
34

Trong khi gỡ lỗi, khung nhìn Debug trong Eclipse hiển thị ngăn xếp cuộc gọi. Điều đó thật tuyệt. Nhưng tôi rất muốn có thể lọc ra tất cả các cuộc gọi mà tôi chắc chắn không quan tâm, chẳng hạn như Spring và JUnit runner.Cách lọc ngăn xếp cuộc gọi trong khung nhìn gỡ rối Eclipse cho Java

Đây là ví dụ về ngăn xếp cuộc gọi của tôi ngay bây giờ. Tôi muốn giữ cho các mục in đậm, trong khi ẩn tất cả các phần còn lại. Có thể làm theo bất kỳ cách nào không? (plugin, bản phát hành, cấu hình Eclipse tiếp theo, ...)

com.myproject.mymodule.MyFinderObject.fetchDestinationSettings com.myproject.mymodule.MyFinderObject.compareCurrentSettings com.myproject.mymodule.MyFinderObject.compareSettings 
sun.reflect.NativeMethodAccessorImpl.invoke0 
sun.reflect.NativeMethodAccessorImpl.invoke 
sun.reflect.DelegatingMethodAccessorImpl.invoke 
java.lang.reflect.Method.invoke 
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection 
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed 
com.myproject.caching.CachingInterceptor.invoke 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed 
org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed 
org.springframework.aop.framework.JdkDynamicAopProxy.invoke 
$Proxy43.doSthWith 
com.myproject.mymodule.MyFinderObjectTest.testSettingComparisonForCurrentSettings 
sun.reflect.NativeMethodAccessorImpl.invoke0 
sun.reflect.NativeMethodAccessorImpl.invoke 
sun.reflect.DelegatingMethodAccessorImpl.invoke 
java.lang.reflect.Method.invoke 
com.myproject.mymodule.MyFinderObjectTest 
com.myproject.mymodule.MyFinderObjectTest 
com.myproject.mymodule.MyFinderObjectTest 
junit.framework.TestResult$1.protect 
junit.framework.TestResult.runProtected 
junit.framework.TestResult.run 
com.myproject.mymodule.MyFinderObjectTest 
junit.framework.TestSuite.runTest 
junit.framework.TestSuite.run 
org.junit.internal.runners.JUnit38ClassRunner.run 
org.eclipse.jdt.internal.junit4.runner.JUnit4TestMethodReference 
org.eclipse.jdt.internal.junit.runner.TestExecution.run 
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests 
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests 
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run 
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main
+2

Và nhân tiện, bạn có nghĩ rằng điều này sẽ tạo ra một yêu cầu tính năng hợp lý không? – espinchi

+0

Chắc chắn - nó cũng không khó lắm. Đi xung quanh các API gỡ rối. – Ladlestein

+0

@espinchi, tôi sử dụng feaure này trong IntelliJ và nó giúp ích rất nhiều. – DerMike

Trả lời

8

Cách duy nhất tôi biết để lọc xem theo dõi ngăn xếp là qua Mylyn. Nếu bạn có một tác vụ Mylyn đang hoạt động, và bạn bấm vào nút "Tập trung vào tác vụ đang hoạt động (thử nghiệm)" trong Khung nhìn gỡ lỗi, thì dấu vết ngăn xếp sẽ được lọc để chỉ hiển thị những phương thức trong ngữ cảnh nhiệm vụ hiện tại.

Trong trường hợp này, bạn sẽ không lọc các mục nhất định khỏi theo dõi ngăn xếp; thay vào đó, mọi thứ sẽ bị xóa theo mặc định và chỉ một số mục nhất định mới được hiển thị (những mục trong ngữ cảnh nhiệm vụ).

Bạn có thể xem câu hỏi this để biết thêm về Mylyn.

+0

Cảm ơn thông tin. Điều này chắc chắn sẽ quá hạn chế đối với trường hợp của tôi. Tuy nhiên, nếu không ai đề xuất bất cứ điều gì tốt hơn, tôi sẽ đánh dấu đây là câu trả lời được chấp nhận. – espinchi

+0

Bạn có thể tạo một tác vụ và thêm tất cả mã của bạn vào ngữ cảnh, và ở đó bạn có những gì bạn muốn. Tôi đã không thử nó mặc dù. Vấn đề duy nhất tôi có thể nghĩ là Mylyn có thể cố gắng loại bỏ các mục không được chạm lâu từ ngữ cảnh. – TWiStErRob

11

Chuẩn bị: Bạn có thể sử dụng step filters như được mô tả here. Sau đó, bất cứ khi nào bạn bước gỡ lỗi thông qua mã của bạn, nó sẽ không nhảy vào các gói hoặc lớp bị loại trừ, ví dụ: từ JDK hoặc một số khung công tác như Hibernate hoặc Spring. Nhưng đây chỉ là điều kiện tiên quyết.

Giải pháp: Stacktrace vẫn chứa khung từ những gói đó. Để lọc ra những thứ đó, bạn cần phải vá plugin Giao diện người dùng gỡ lỗi Eclipse JDT. Someone else đã làm điều đó cho các phiên bản Eclipse cũ hơn lên đến Indigo. Bởi vì tôi rất tò mò nếu tôi có thể chạy nó trong bản phát hành hiện tại Luna 4.4.1, tôi tái tạo các thay đổi của người khác và đẩy Debug View + Stack Filter Plug-In tới GitHub bao gồm liên kết tải xuống tới plugin được vá. Vì vậy, nếu bạn cũng đang ở trên 4.4.1, bạn may mắn và không cần phải vá và biên dịch bất cứ điều gì một mình. Chỉ cần sử dụng phiên bản của tôi. Nếu không xin vui lòng sao chép repo của tôi và nhìn vào những thay đổi, sau đó áp dụng chúng vào phiên bản plugin của sự lựa chọn của bạn.

+0

Ngọt ngào! Cảm ơn đã giúp đỡ! –

+0

hi, tôi đã thử đặt org.eclipse.jdt.debug.ui_3.6.300.201412061413.jar vào thư mục dropin của nhật thực nhưng dường như không có gì xảy ra ... bất kỳ ý tưởng nào? cảm ơn bạn – nzaero

+0

Không có ý tưởng. Bạn có sử dụng chính xác Luna 4.4.1 hoặc phiên bản Eclipse khác không? Và phiên bản debug.ui nào hiện được cài đặt trước khi thay thế? – kriegaex