[android] Android-로그에 전체 예외 역 추적 인쇄

예외를 발생시키는 try / catch 블록이 있는데 Android 장치 로그에서 예외에 대한 정보를보고 싶습니다.

내 개발 컴퓨터에서이 명령을 사용하여 모바일 장치의 로그를 읽었습니다.

/home/dan/android-sdk-linux_x86/tools/adb shell logcat

나는 이것을 먼저 시도했다.

try {
    // code buggy code
} catch (Exception e)
{
    e.printStackTrace();
}

그러나 그것은 로그에 아무것도 인쇄하지 않습니다. 그것은 많은 도움이되었을 것이기 때문에 유감입니다.

내가 달성 한 최고는 :

try {
    // code buggy code
} catch (Exception e)
{
    Log.e("MYAPP", "exception: " + e.getMessage());
    Log.e("MYAPP", "exception: " + e.toString());
}

아무것도 아닌 것보다 낫지 만 그다지 만족 스럽지는 않습니다.

전체 역 추적을 로그에 인쇄하는 방법을 알고 있습니까?

감사.



답변

try {
    // code that might throw an exception
} catch (Exception e) {
    Log.e("MYAPP", "exception", e);
}

추가 정보로 더욱 명확하게

(이것은 이것에 대한 가장 오래된 질문이기 때문에.)

3 인수 Android 로그 메소드는 Exception세 번째 매개 변수로 제공되는에 대한 스택 추적을 인쇄합니다 . 예를 들면

Log.d(String tag, String msg, Throwable tr)

tr예외는 어디에 있습니까 ?

이 주석 에 따르면 이러한 Log 메서드는 “방법을 사용하여 getStackTraceString()… 배후에서”이를 수행합니다.


답변

이 도우미 함수는 ExceptionThrowable 이기 때문에 잘 작동합니다 .

    try{
        //bugtastic code here
    }
    catch (Exception e)
    {
         Log.e(TAG, "Exception: "+Log.getStackTraceString(e));
    }


답변

catch (Exception e) {
  ByteArrayOutputStream baos = new ByteArrayOutputStream();
  PrintStream stream = new PrintStream( baos );
  e.printStackTrace(stream);
  stream.flush();
  Log.e("MYAPP", new String( baos.toByteArray() );
}

아니면 … 아시다시피 … EboMike가 말한 것.


답변

public String getStackTrace(Exception e){
  StringWriter sw = new StringWriter();
  PrintWriter pw = new PrintWriter(sw);
  e.printStackTrace(pw);
  return sw.toString();
}


답변

e.printStackTrace ()는 그것을 나에게 인쇄합니다. 나는 당신이 logcat을 올바르게 실행하고 있다고 생각하지 않습니다. 셸에서 실행하지 말고 실행하십시오.

/home/dan/android-sdk-linux_x86/tools/adb logcat


답변

표준 출력 및 오류 출력은 기본적으로 / dev / null로 지정되므로 모두 손실됩니다. 이 출력을 기록하려면 여기에 표시된 “stdout 및 stderr보기”지침을 따라야합니다.


답변

try{
            ...
} catch (Exception e) {
     Log.e(e.getClass().getName(), e.getMessage(), e.getCause());
}