Android Studio IDE: onderbreking bij uitzondering

Het lijkt erop dat mijn Android Studio standaard geen enkele uitzondering wil verbreken. Het inschakelen van onderbreking op “Elke uitzondering” begint te breken binnen daadwerkelijke JDE-bibliotheken. Is er een manier om het te forceren om alleen te breken bij uitzonderingen binnen mijn code alleen?

Afkomstig uit de Visual Studio-universum, op zoek naar het standaard VS-foutopsporingsgedrag hier.


Antwoord 1, autoriteit 100%

Om alle uitzonderingen te doorbreken, al dan niet gevangen:

  1. Open het Breakpoints-venster via Run -> Breekpunten bekijken.
  2. Het dialoogvenster Breekpunten verschijnt. Scrol in het linkerdeelvenster naar beneden. Selecteer Elke uitzonderingonder Java Exception Breakpoints
  3. Met Elke uitzonderinggeselecteerd, configureert u in het rechterdeelvenster als volgt:
    • Onderbreken: aangevinkt
    • Alle: geselecteerd
    • Voorwaarde: !(this instanceof java.lang.ClassNotFoundException)
    • Meldingen: zowel Gevangen uitzonderingen Niet gevangen uitzonderinggeselecteerd

Breakpoints-dialoogvenster

  1. Definieer filters die naamruimten van bibliotheken specificeren die de debugger zoumoeten onderbreken: vink het selectievakje Klassefiltersaan om klassefiltering in te schakelen (zoals vermeld door @Scott Barta). Klik vervolgens op de knop (elipsis) om het dialoogvenster Klasfilters te openen. Specificeer klassenaamruimtepatronen door op de knop Patroon toevoegen(Patroon toevoegen) te klikken. Binnenkomen:
    • com.myapp.*(vervang dit door de namespace prefix van je app)
    • java.*(let op: volgens de vraag van OP, laat dit weg om NIET in Java-bibliotheken te breken)
    • android.*(zoals hierboven, weglaten om alleen de eigen app-code te debuggen)
    • Voeg zo nodig extra naamruimten toe (bijv. bibliotheken van derden)

Klassefilters

  1. Druk op OKen sluit vervolgens het dialoogvenster Breekpunten.

Antwoord 2, autoriteit 15%

Als je het venster Breekpunten opent, heb je nogal wat opties om het voorwaardelijk te laten breken of niet. Wat u zoekt zijn de “Klasse-filters” hier — u kunt een wildcard-expressie specificeren met bijvoorbeeld een Java-pakketpad, en het zal alleen breken voor uitzonderingen die zijn gegenereerd door overeenkomende klassen.


Antwoord 3, autoriteit 3%

Alle uitzonderingen in uw code en andere uitzonderingen als deze niet worden gedetecteerd, doorbreken:

Deze methode filtert de uitzonderingstypen die de runtime genereert tijdens normaal gebruik (niet erg uitzonderlijk, toch?). Het maakt geen gebruik van het klassenfilter, omdat het te veel zou filteren; bugs in uw code zorgen er vaak voor dat runtime-klassen uitzonderingen genereren (bijv. toegang tot een arraylijst na het einde).

  1. Schakel Java Exception BreakPoints / Any exceptionalleen in voor niet-afgevangenuitzonderingen.

  2. Voeg een nieuw Java Exception BreakPointtoe voor de klasse Exception (java.lang)voor gevangen en niet-afgevangenuitzonderingen. Schakel Voorwaardein en stel het in op dit:

       !(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)
    

Voeg aan de lijst met uitsluitingen alle andere niet-uitzonderlijke uitzonderingen toe die u tegenkomt. (BTW, het gebruik van java.lang.Exceptionis een manier om effectief een tweede “Elke uitzondering”-invoer te krijgen.)

Other episodes