Android Studio IDE : 예외 발생시 중단


138

내 Android Studio는 기본적으로 예외를 위반하지 않는 것 같습니다. "모든 예외"에서 break를 활성화하면 실제 JDE 라이브러리 내에서 break가 시작됩니다. 내 코드 내 예외에서만 강제로 중단시키는 방법이 있습니까?

Visual Studio 유니버스에서 제공되며 여기에서 기본 VS 디버그 동작을 찾습니다.

답변:


206

잡거나 잡지 않은 모든 예외를 위반하려면 :

  1. 실행-> 중단 점보기 를 통해 중단 점 창을여십시오 .
  2. 중단 점 대화 상자가 나타납니다. 왼쪽 창에서 맨 아래로 스크롤하십시오. Java 예외 중단 점 에서 모든 예외를 선택하십시오.
  3. 함께 예외가 선택, 오른쪽 창에서, 구성은 다음과 같습니다 :
    • 일시 중지 : 확인
    • 모두 : 선택
    • 질환: !(this instanceof java.lang.ClassNotFoundException)
    • 공지 사항 : 모두 잡은 예외catch되지 않은 예외 선택

중단 점 대화 상자

  1. 디버거 중단 해야하는 라이브러리의 네임 스페이스를 지정하는 필터를 정의 하십시오. 클래스 필터 확인란을 선택하여 클래스 필터링을 활성화하십시오 ( @Scott Barta에서 언급 한대로 ). 그런 다음 ... (줄임표) 단추를 클릭하여 클래스 필터 대화 상자를여십시오. 패턴 추가(패턴 추가) 버튼 을 클릭하여 클래스 네임 스페이스 패턴을 지정 하십시오. 시작하다:
    • com.myapp.* (앱의 네임 스페이스 접두어로 대체하십시오)
    • java.* (참고 : OP의 질문에 따라 Java 라이브러리에서 중단되지 않도록 이것을 남겨 두십시오)
    • android.* (위와 같이 자체 앱 코드를 디버그하지 마십시오)
    • 필요에 따라 추가 네임 스페이스를 추가하십시오 (예 : 타사 라이브러리).

클래스 필터

  1. 를 눌러 확인 후 중단 점 대화 상자를 닫습니다.

6
@AndroidDev 특히 Visual Studio IDE를 사용할 때 가장 멋진 인터페이스는 아닙니다. 클래스 필터는 모든 종류의 하위 수준 오류가 응용 프로그램을 훨씬 더 자주 중지하지 못하도록 (특히 앱 초기화 중에) 방지합니다. 예를 들어 클래스 필터없이 위 단계를 수행 한 다음 디버그 모드에서 앱을 시작하고 어떻게되는지 확인하십시오.
CJBS 2016 년

6
@ AndroidDev : 실제로 의미가 있다고 생각합니다. 기본적으로는 않는 모든 예외에서 휴식. 조건과 필터를 설정할 필요가 없습니다. 그러나 OP 는 예외 필터링을 요청 했습니다 (자체 코드에서는 예외).
Mooing Duck

4
xcode / iOS 개발자 및 android-n00b로서, 모든 중단 점을 발생시키기 위해 Android 스튜디오에서 게임과 같은 (삼각형) 아이콘을 클릭하여 앱을 시작할 수 없다는 것을 몰랐습니다. 오른쪽에서 옆에있는 버그 모양의 아이콘을 클릭하여 앱을 시작해야합니다.
xaphod

@xaphod 또 다른 방법은 릴리스 모드에서 실행하고 (재생 버튼을 누름) 앱이 시작되면 디버거를 연결하고 (아이콘 오른쪽 하단에 녹색 버그가있는 세로 사각형의 버그로 장치를 누름) 디버거를 연결하십시오. 디버깅 할 프로세스 앱 시작 코드를 디버깅하지 않으면 훨씬 빠릅니다. 참조 : developer.android.com/tools/debugging/…
CJBS

junit (단위 테스트 중 디버깅)을 사용하는 경우 클래스 필터를 추가 할 수 있습니다.org.junit.*
Thomas Vincent

34

중단 점 창을 열면 조건부 중단 여부를 알 수있는 몇 가지 옵션이 제공됩니다. 여기서 찾고있는 것은 "클래스 필터"입니다. 예를 들어, Java 패키지 경로를 사용하여 와일드 카드 식을 지정할 수 있으며 일치하는 클래스에서 생성 된 예외에 대해서만 중단됩니다.


4
중단 점 창을 찾는 사람은 메뉴-실행-> 중단 점보기에서 찾을 수 있습니다.
Patrick

2
나는 이것을 시도하고 있지만 그것을 작동시킬 수 없다. 클래스 필터는 무엇이어야합니까? 몇 가지 예를들 수 있습니까?
Bart Friederichs

1
나는 같은 보트에 있습니다-클래스 필터는 나를 위해 작동하지 않는 것 같습니다. com.mycompany. *를 시도했지만 예외가 발생하지 않습니다.
Kylotan

매번 ZygoteInit.java에서 중지됩니다! 꽤 쓸모없는! 그것을 극복하는 방법 ???
Renaud Cerrato

Run-> View Breakpoints .... 예, "View"메뉴 아래에 창이 표시되는 것을 원하지 않습니다.
LarryBud

7

포착되지 않은 경우 코드의 모든 예외 및 기타 예외를 위반하려면 :

이 메소드는 정상 작동 중에 런타임에서 발생하는 예외 유형을 걸러냅니다 (매우 예외적이지 않습니까?). 너무 많이 걸러 내기 때문에 클래스 필터를 사용하지 않습니다. 코드의 버그로 인해 런타임 클래스에서 예외가 발생하는 경우가 종종 있습니다 (예 : 마지막으로 배열 목록에 액세스).

  1. 포착되지 않은 예외에 대해서만 Java 예외 BreakPoints / 모든 예외 를 사용하십시오 .

  2. 잡힌 예외 와 잡히지 않은 예외 에 대해 클래스에 대한 새 Java 예외 BreakPoint 를 추가하십시오 . 조건을 활성화 하고 다음과 같이 설정하십시오.Exception (java.lang)

        !(this instanceof java.lang.ClassNotFoundException || this instanceof android.system.ErrnoException || this instanceof java.io.FileNotFoundException || this instanceof javax.net.ssl.SSLHandshakeException || this instanceof javax.net.ssl.SSLPeerUnverifiedException || this instanceof android.system.GaiException || this instanceof java.net.SocketTimeoutException || this instanceof java.net.SocketException || this instanceof java.security.NoSuchAlgorithmException)
    

예외가 아닌 다른 예외가 발생하면 조건에서 제외 목록에 추가하십시오. (BTW, 사용 java.lang.Exception은 두 번째 "예외"항목을 효과적으로 얻는 방법입니다.)


! (a) &&! (b) &&! (c) 대신! (a || b || c)를 사용하는 것이 좋습니다.
ceph3us
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.