Android Studio IDE: Break on Exception

DebuggingExceptionAndroid StudioBreakpoints

Debugging Problem Overview


It seems my Android Studio does not want to break on any exception by default. Enabling break on "Any Exception" starts breaking within actual JDE libraries. Is there any way to force it to break only on exceptions within my code only?

Coming from Visual Studio universe, looking for the default VS debug behavior here.

Debugging Solutions


Solution 1 - Debugging

To break on all exceptions, caught or uncaught:

  1. Open the Breakpoints window via Run -> View Breakpoints.
  2. The Breakpoints dialog appears. In the left pane, scroll to the bottom. Select Any exception under Java Exception Breakpoints
  3. With Any exception selected, on the right pane, configure as follows:
  • Suspend: checked
  • All: selected
  • Condition: !(this instanceof java.lang.ClassNotFoundException)
  • Notifications: both Caught exception and Uncaught exception selected

Breakpoints dialog

  1. Define filters that specify namespaces of libraries that the debugger should break on: Check the Class filters checkbox to enable class filtering (as mentioned by @Scott Barta). Then click the ... (elipsis) button to open the Class Filters dialog. Specify class namespace patterns by clicking on the Add Pattern (Add Pattern) button. Enter:
  • com.myapp.* (replace this with the namespace prefix of your app)
  • java.* (note: as per OP's question, leave this out to NOT break on Java libraries)
  • android.* (as above, leave out to just debug own app code)
  • Add any additional namespaces as necessary (e.g. 3rd party libraries)

Class Filters

  1. Press OK, then dismiss the Breakpoints dialog.

Solution 2 - Debugging

If you open up the Breakpoints window, it gives you quite a few options to have it conditionally break or not. What you're looking for is the "Class filters" here -- you can specify a wildcard expression with, for example, a Java package path, and it will only break for exceptions generated from matching classes.

Solution 3 - Debugging

To break on all exceptions in your code and other exceptions if uncaught:

This methods filters out the exception types that the runtime throws during normal operation (not very exceptional, are they?). It doesn't use the class filter, since it would filter out too much; bugs in your code often cause runtime classes to throw exceptions (e.g. accessing an array list past the end).

  1. Enable Java Exception BreakPoints / Any exception for uncaught exceptions only.

  2. Add a new Java Exception BreakPoint for the Exception (java.lang) class for caught and uncaught exceptions. Enable Condition and set it to this:

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

Add to the exclusion list in the condition any other non-exceptional exceptions you encounter. (BTW, using java.lang.Exception is a way of effectively getting a second "Any exception" entry.)

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionAlexVPerlView Question on Stackoverflow
Solution 1 - DebuggingCJBSView Answer on Stackoverflow
Solution 2 - DebuggingScott BartaView Answer on Stackoverflow
Solution 3 - DebuggingEdward BreyView Answer on Stackoverflow