예외를 발생시키는 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()
… 배후에서”이를 수행합니다.
답변
이 도우미 함수는 Exception 도 Throwable 이기 때문에 잘 작동합니다 .
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());
}