2013-05-24 4 views
2

나는 이클립스를 사용 중이며 컴파일하기 전에 전처리 기가 현재 메소드의 이름으로 바뀌는 "매크로"를 원합니다.Java/Eclipse - 현재 메소드 이름을 지정하는 매크로?

오류보고 기능이 있습니다 : reportthis(String errormessage) - 응용 프로그램 전체에서 오류가 발생하면 catch 블록에서 reportthis (...)를 호출하는 try/catch 블록이있는 여러 함수가 있습니다.

reportthis(MACRO_CURRENT_METHOD_NAME + ":" + e.ToString()); - 여기서 MACRO_CURRENT_METHOD_NAME은 컴파일 전에 사전 처리되어 catch() 블록이 reportthis()를 호출하는 메소드의 이름이 될 것입니다.

그래서 catch() 블록이 main()에서 발생하면 매크로는 "main"(또는 "main()"등의 문자열을 반환해야합니다.

이것이 가능합니까? 내 목표를 달성하려면 어떻게해야합니까?

감사합니다.

편집 Eclipse에서 전 처리기로 처리하고 싶습니다. 아마도 "MACRO_CURRENT_METHOD_NAME"의 모든 항목을 현재 함수 이름으로 바꾸기 위해 eclipse 용 플러그인을 작성할 수 있습니까?

답변

0

java에는 사전 처리기가없고 매크로 언어도 없습니다.

예외의 스택 트레이스가 이미 클래스와 excetion가 발생한 장소의 방법을 포함하기 때문에 내가 당신의 문제는 완전히 무의미을 이해하는 경우 중 하나 , 도움이 될 수있는 상황이 있지만.

"reportthis()"에 문자열을 전달하는 대신 예외를 받아서 인쇄하거나 e.printStackTrace()를 작성하는 서명을 만드십시오.

+0

나는 블랙 베리 애플리케이션을 개발 중이다. stdout/err에 스택 트레이스를 출력하는 것이 도움이되지 않는다. - reportthis()는 디버그 모드에서 실행될 때 서버에 오류를보고 할 것이다. 'reportthis (main() : "+ e.ToString());'로 사용하면 모든 catch {} 블록에 대해 수동으로 수행하는 것보다 더 나은 방법을보고 싶습니다. – user2418661

+0

그런 다음 예외를 reportthis()의 다른 대상에 인쇄하십시오.PrintStream을 사용하는 printStackTrace()의 서명이 있습니다. 상상력은 인쇄 할 수있는 한도입니다. 왜 스택 추적에서 자발적으로 모든 유용한 정보를 버릴까요? – Durandal

+0

"PrintStream을 사용하는 printStackTrace()의 서명이 있습니까?"라는 의미는 무엇입니까? 내가 사용할 수있는 유일한 printStackTrace()는 stderr에 인쇄합니다 – user2418661

1

Java는 매크로를 지원하지 않습니다. 그러나 현재 방법을 결정하기 위해 할 수있는 것은있는 요소 [0] Thread.getStackTrace 때문에, [1] 호출하는 방법을 얻을 인덱스에있는 요소를 사용하여

final StackTraceElement aTop = Thread.currentThread().getStackTrace()[1]; 
    System.out.println (aTop.getMethodName()); 

같은(). 이 코드를 다른 방법으로 래핑하는 경우 배열 인덱스를 사용해야합니다. 사용하는 랩핑 메소드 수에 따라 2로 설정하십시오.

+0

Durandal에 응답했기 때문에 이것은 blackberry 응용 프로그램이며 getStackTrace()가 없으므로 불행히도 거기에는 불가능합니다. – user2418661

+0

"new Exception() .getStackTrace()"는 어떻습니까? –

+0

는 블랙 베리 JDE/J2ME에 존재하지 않습니다 ... – user2418661

2

자동화 된 방법을 찾지 못 했으므로 로깅 코드를 호출 할 때마다 호출자의 이름을 나타내는 문자열 리터럴을 수동으로 추가해야합니다.

노키아의 S40 플랫폼도 Java-ME를 기반으로하며 일부 Nokia S40 개발자는 스택 추적을 위해 프로그램을 수정하여 스택 트레이스를 생성하기 위해 Jarrut, which is available on Sourceforge,을 잘 알고 있습니다. 이 기능을 사용하여 로깅 코드에서 호출 함수 이름을 가져올 수 있지만 Jarrut을 약간 수정해야 해당 작업을 수행 할 수 있습니다.

관련 문제