2008-09-14 4 views
2

현재 Windows, Linux 및 MacOS X에서 원활하게 작동하는 Java의 교차 플랫폼 응용 프로그램에서 작업하고 있습니다. 검색 (및 처리)을 수행하는 좋은 방법을 찾으려고합니다. '충돌'. Java에서 '크래시'를 감지하고 응답으로 무언가를 할 수있는 쉬운 플랫폼 간 방법이 있습니까?Java에서 충돌 로그를 캡처하는 방법

'충돌'로 인해 catch되지 않은 예외가 있음을 알 수 있습니다. 그러나 코드는 일부 JNI를 사용하므로 나쁜 JNI 코드에서 충돌을 잡을 수 있으면 좋겠지 만 JVM과 관련된 느낌이 들었습니다.

답변

4

간단한 캐치 올 처리의 경우 Thread에 다음 정적 메서드를 사용할 수 있습니다. Javadoc의에서 :

정적 무효 setDefaultUncaughtExceptionHandler (Thread.UncaughtExceptionHandler 어)            
        기본 핸들러는 스레드가 갑자기 캐치되지 않는 예외를 종료하고 다른 처리기가 없었다 때 호출 설정 해당 스레드에 대해 정의됩니다.

이것은 다른 곳에서는 잡히지 않을 수있는 오류 또는 확인되지 않은 예외를 처리하는 매우 광범위한 방법입니다.

사이드 노트 : 코드가 문제의 원인에 가까운 예외를 포착, 기록 및/또는 복구 할 수있는 것이 더 좋습니다. 완전히 회복 할 수없는 상황 (예 : java.lang.Error의 하위 클래스)에 대해 이러한 종류의 일반화 된 충돌 처리를 예약합니다. RuntimeException이 완전히 잡히지 않을 가능성을 피하십시오. 소프트웨어가 생존 할 수 있기 때문에 가능할 수도 있고 바람직 할 수도 있습니다.

3

잡히지 않은 예외를 처리하려면 ThreadGroup.uncaughtException (...)의 구현을 제공하는 새 ThreadGroup을 제공 할 수 있습니다. 그런 다음 잡히지 않은 예외를 포착하여 적절히 처리 할 수 ​​있습니다 (예 : 충돌 로그 집으로 보내기).

JNI 앞에서 도움을받을 수 없지만 JVM을 호출하기 전에 실행 파일을 사용하는 방법이있을 수 있지만 그 실행 파일은 호출 할 수있는 모든 가능한 JVM에 대해 알아야 할 것입니다. 충돌 로그를 표시하고 충돌 로그를 표시하는 위치를 나타냅니다.

1

이것이 필요한지 확실하지 않지만 네이티브 코드 내에서 예외가 발생했는지 여부도 확인할 수 있습니다. 자세한 내용은 http://java.sun.com/javase/6/docs/technotes/guides/jni/spec/functions.html#wp5234을 참조하십시오.

+0

예기치 않은 예외/충돌을 처리 할 수있는 지점에 추가 할 수 있도록 기본 코드에서 Java 코드를 호출하면 유용합니다. 이렇게 코드를 사용하여 충돌에 대한 몇 가지 검사를 통해 코드를 분산시켜야 할 것처럼 보입니다. –

관련 문제