2013-06-12 2 views
0

Log.d 및 Log.e 출력 중에 현재 메서드의 이름을 출력하는 매크로를 만들고 싶습니다. 방금 하드 코딩 된 문자열 내에 메서드 이름을 입력하기 만하지만, 메서드 이름이 미래에 변경되면 각 문자열을 검색하고 바꿔야하므로 분명히 비효율적입니다.Android/Java에서 디버그 출력의 메소드 이름을 가져 오는 방법은 무엇입니까?

나는이 게시물에 표시된대로 GetMethodName와()를 사용하여 알고는 :

How to get method name in Java

이것은 또한 유망한 같습니다

Debugging with helper extension method

이 게시물의 무수한 숫자가 있습니다 그래서,하지만 런타임 성능에 큰 영향을 미치지 않는 디버깅 목적을위한 최선의 방법을 찾고 싶습니다. 이클립스를 사용하고 있기 때문에 그 IDE에서 잘 작동하는 솔루션을 찾고 싶습니다.

+0

은 일식 다시 시작 너 일식 광신자 야? – pskink

+0

@pskink 아니, 왜 묻는거야? – gonzobrains

+0

내가 전화 할 때 이클립스 플러그인을 작성했기 때문에 Log.d (TAG, "msg")를 호출하면 logcat에 다음과 같이 표시됩니다. Log.d (TAG, "myMethod : 142, msg") – pskink

답변

4

이것은 현재 실행을 위해 사용 가능한 것으로 알고 있습니다.

Thread current = Thread.currentThread(); 
    StackTraceElement[] stack = current.getStackTrace(); 
    for(StackTraceElement element : stack) 
    { 
     if (!element.isNativeMethod()) { 
      String className = element.getClassName(); 
      String fileName = element.getFileName(); 
      int lineNumber = element.getLineNumber(); 
      String methodName = element.getMethodName(); 
     } 
    } 
+0

여기에서 확인해 보겠습니다. 감사. 실행에 미치는 영향은 최소화 될 것이라고 생각하십니까? 조건부 컴파일 (C/C++ 에서처럼)을 사용하여 간단한 플래그를 통해 프로덕션 코드에서이 내용을 제거 할 수있는 방법이 있습니까? – gonzobrains

+1

필자는 이러한 종류의 런타임 값 (로그 수준 또는 완전히 로그 오프하는 등)을 가진 클래스를 개인적으로 유지 한 다음 프로덕션 릴리스를 컴파일하기 전에 단위 테스트를 실행하여 모든 예상 값을 확인합니다. 그리고 성능면에서 메소드의 실행 시간을 기록하여 실제로 문제인지 확인할 수 있습니다. 당신이 UI 나 다른 것들을 업데이트하고있는 루프의 반복마다 그것을 실행하지 않는다면 나는 그것이 상상할 수 없다. 사용자 정의 로깅 클래스를 통해 모든 로깅을 실행하려는 것처럼 들리므로 전역 변수로이를 쉽게 해제 할 수 있습니다. – Rich

0

이 간단하면서도 매우 유용한 이클립스 플러그인 I 위의 주석에서 설명한 : download plugin

의 증분 빌더 전형적인 구축 시간 (초) 분획물에서 측정된다. 이름으로 새 빌더 <buildCommand>로의 .project 파일에 추가 :

<name>org.pskink.logger.builder</name> 

그것이 <buildSpec> 목록

설치의 마지막 빌더해야한다 : 단지 plugins 폴더에 복사 한

관련 문제