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:
- Open het Breakpoints-venster via Run -> Breekpunten bekijken.
- Het dialoogvenster Breekpunten verschijnt. Scrol in het linkerdeelvenster naar beneden. Selecteer Elke uitzonderingonder Java Exception Breakpoints
- 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
- 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) 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)
- 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).
-
Schakel Java Exception BreakPoints / Any exceptionalleen in voor niet-afgevangenuitzonderingen.
-
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.Exception
is een manier om effectief een tweede “Elke uitzondering”-invoer te krijgen.)