2011-11-09 11 views
6

Có cách nào để truy cập tự động bất kỳ Đăng nhập vào Logcat bằng cách nhấp đúp không?Có cách nào để truy cập tự động bất kỳ Đăng nhập vào Logcat bằng cách nhấp đúp không?

Trên thực tế, khi có một lỗi đâm Ứng dụng Android của tôi, tôi có thể kích đúp vào dòng nói ví dụ

at com.myapp.mypackage$Class.function(File.java:117) 

Và bằng cách nhấp đúp vào dòng này, tôi tự động chuyển hướng đến các dòng có liên quan mã của tôi.

Tuy nhiên, khi tôi cố gắng để tạo ra cùng một dòng trong một Log, ví dụ:

Log.e("TAG", "at com.myapp.mypackage$Class.function(File.java:117)"); 

The Double-Click không hoạt động nữa ...

Bất kỳ ý tưởng?

+0

Có thể bạn có thể 'ném' ngoại lệ khỏi dòng nơi bạn gặp vấn đề. Nhưng điều đó cũng sẽ dừng chương trình của bạn – Default

+1

Đó là vì trình chỉnh sửa xử lý * Dấu vết ngăn xếp * từ ngoại lệ. Tùy thuộc vào mã từ trình soạn thảo, điều này chỉ có thể nếu người tạo IDE khớp với một chuỗi trong nhật ký với một tệp thực trong dự án của bạn. – Patrick

+0

Nếu sử dụng nhật thực, bạn có thể sử dụng ["Stacktrace Console"] (http://help.eclipse.org/indigo/index.jsp?topic=%2Forg.eclipse.jdt.doc.user%2Freference%2Fviews%2Fconsole % 2Fref-stacktrace_console.htm). – JimmyB

Trả lời

3

Nếu bạn không nhớ sự lộn xộn trong nhật ký của bạn, bạn có thể dễ dàng chỉ cần thêm một new Exception() vào tin nhắn log

Log.e("TAG", "Looky here see", new Exception()); 
+0

Cảm ơn lời khuyên, đó là loại hiệu quả, và tôi thực sự không nhớ về cluttering đăng nhập của tôi. – Thordax

8

Nếu bạn muốn tạo một bản ghi trong logcat có thể được bấm và đi đến dòng của bạn sử dụng phương pháp sau để tạo:

Tận hưởng!

public static void showLogCat(String tag, String msg) { 

     StackTraceElement[] stackTraceElement = Thread.currentThread() 
       .getStackTrace(); 
     int currentIndex = -1; 
     for (int i = 0; i < stackTraceElement.length; i++) { 
      if (stackTraceElement[i].getMethodName().compareTo("showLogCat") == 0) 
      { 
       currentIndex = i + 1; 
       break; 
      } 
     } 

     String fullClassName = stackTraceElement[currentIndex].getClassName(); 
     String className = fullClassName.substring(fullClassName 
       .lastIndexOf(".") + 1); 
     String methodName = stackTraceElement[currentIndex].getMethodName(); 
     String lineNumber = String 
       .valueOf(stackTraceElement[currentIndex].getLineNumber()); 

     Log.i(tag, msg); 
     Log.i(tag + " position", "at " + fullClassName + "." + methodName + "(" 
       + className + ".java:" + lineNumber + ")"); 

    } 
+0

Tuyệt vời thật đơn giản! – Phil