문제

일반 Java,당신이 얻을 수 있는 텍스트에 스택 추적 전달하여 PrintWriter 을 printStackTrace.나는 느낌이 나는 이미 답을 알고 있습니다(i.e"아니오")지만,

방법은 없을 구하의 텍스트에 스택 추적 JavaME 문자열로?

업데이트:

나도 언급해야한다는 제한 CLDC1.0

도움이 되었습니까?

해결책

AFAIK 특정 플랫폼이 기본 시스템을 무시할 수있는 수단을 제공하지 않는 한 스택 추적을 문자열 값으로 가져올 방법이 없습니다. BlackBerry 플랫폼에서는 스택 추적을 쫓아냅니다. catch(Exception) 메모리를 저장하기 위해서는이 작업을 수행하지 않습니다. catch(Throwable) 장치 이벤트 로그를 통해 스택 추적에 액세스 할 수 있습니다.

내가 한 일은 마지막 순간에 예외보다는 던질 수있는 것을 잡아서 스택 추적을 인쇄하는 것입니다. 물론 이것은 당신이 잡을 위험이 있습니다. java.lang.Error 특히 그다지 좋지 않은 경우 OutOfMemoryError, 전화를 받았지만 System.gc() 인쇄하기 전에 스택 추적은 위험을 줄이는 것처럼 보이며 우리는 그에 아무런 문제가 없었습니다.

나는 당신이 목표로하는 플랫폼을보고 그들이 System.err에 액세스 할 수 있는지 확인합니다. 당신은 항상 디버거를 연결할 수 있으며 콘솔 출력에 나타나야하지만 '필드에서'스택 추적을받은 후에 들립니다.

다른 팁

두 가지 솔루션 :

  • 에뮬레이터의 예외를 재현하십시오. 무선 툴킷과 NetBeans는 컴퓨터에 스택 추적을 인쇄합니다.

  • Symbian 장치를 사용하십시오.

시리즈 60 3 판의 기능 팩 2 이전에 Symbian Handlets는 Sun Hotspot Java Virtual Machine을 사용합니다. C 표준 라이브러리의 부분 구현에 연결하여 Symbian OS에 적합했습니다.

이를 통해 Symbian은 Java Exception Stack Traces를 포함하여 VM 표준 출력 및 표준 오류를 캡처 할 수있는 Redipector라는 C ++ 프로그램을 만들 수있었습니다.

C ++ 리디렉터는 Symbian OS의 버전 9로 업그레이드되지 않았습니다. 대신, "redirect : //"GCF 프로토콜이 VM에 소개되었습니다.

별도의 미드렛에서 Connector.open ( "Redirect : //", Connector.Read)에서 반환 된 연결에서 입력 스트림을 열십시오. 그런 다음 Symbian 전화에서 예외 스택 추적을 캡처 할 수 있습니다.

편집 : "Redirect : //"는 Series60 5th Edition으로 돌아 왔고 "Redirect : // Test"는 Series60 3rd Edition Feature Pack 2에서 작동해야합니다.

CLDC 1.0에서는 그렇게 할 수있는 방법이 없습니다. 그러나 일부 장치/OS에서 기본 예외 클래스는 스택 추적에 액세스하는 방법을 제공 할 수 있습니다 (최신 CLDC 버전을 생각하십시오). 반사를 사용하여 런타임에서 예외 인스턴스를 검사하여 대상 플랫폼에서 어떤 멤버를 노출시키는 지 확인하십시오. 그런 다음 그러한 정보를 제공하는 플랫폼에서 스택 추적을 안전하게 추출 할 수있는 코드를 작성할 수 있습니다.

내가 생성할 수 있는 도구 사용을 로그에 적절한 스택 추적에서도 CLDC.에서 확인하십시오 http://jarrut.sourceforge.net.그것은 여전히 매우 새로고 그것은 몇 가지가있을 수 있습니다 거친 가장자리에,하지만 그것이 나를 위해 일하고 내가 상상할 수 없었 개발 MIDlets 없이 그것은 더 이상입니다.가장 좋은 방법을 사용하여 그것은 그것을 결합하 microlog.

Unfotunately 현재 도구가 필요합 CLDC1.1 지 않을 수도 있습니다 그래서 문제를 해결하는 원래 포스터입니다.

Printwriter가 BytearRayoutputStream에 쓰고 바이트에서 문자열을 재구성하도록 할 수 있습니다.

try{
    throw new Exception("Message");     
} catch (Exception ex){
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    ex.printStackTrace(new PrintStream(out));
    System.out.println(new String(out.toByteArray()));
}

예쁘지는 않지만 거의 모든 곳에서 작동해야합니다. 위의 시도를 시도하기 전에 [Throwable#GetStackTrace]에 액세스 할 수 없는지 확인하십시오.http://java.sun.com/j2se/1.4.2/docs/api/java/lang/throwable.html#getstacktrace ()), Eclipse는 CDC/Foundation 1.1에서 사용할 수 있다고 주장하지만 다른 프로파일에 대해서는 아무 말도하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top