Android Studio IDE:例外で中断


138

私のAndroid Studioはデフォルトで例外で中断したくないようです。「すべての例外」でブレークを有効にすると、実際のJDEライブラリ内でブレークが開始されます。私のコード内の例外でのみそれを強制的に中断させる方法はありますか?

Visual Studioユニバースから来て、ここでデフォルトのVSデバッグ動作を探します。

回答:


206

キャッチまたはキャッチされないすべての例外を破るには:

  1. [ 実行]-> [ブレークポイントの表示]から[ブレークポイント]ウィンドウを開きます。
  2. [ブレークポイント]ダイアログが表示されます。左側のペインで、一番下までスクロールします。Java Exception BreakpointsAny exceptionを選択します。
  3. 任意の例外次のように、右側のペインには、configureを選択:
    • 一時停止:オン
    • すべて:選択
    • 状態: !(this instanceof java.lang.ClassNotFoundException)
    • お知らせ:両方キャッチされた例外キャッチされない例外選択

ブレークポイントダイアログ

  1. デバッガー中断する必要があるライブラリの名前空間を指定するフィルターを定義します。[ クラスフィルター]チェックボックスをオンにして、クラスフィルターを有効にします(@Scott Bartaが言及)。次に...(省略記号)ボタンをクリックして、[クラスフィルター]ダイアログを開きます。パターンを追加(パターンの追加)ボタンをクリックして、クラス名前空間パターンを指定します。入る:
    • com.myapp.* (これをアプリの名前空間プレフィックスに置き換えます)
    • java.* (注:OPの質問に従って、Javaライブラリで中断しないように、これは省略してください)
    • android.* (上記のように、自分のアプリコードをデバッグするだけにしてください)
    • 必要に応じて追加の名前空間を追加します(例:サードパーティライブラリ)

クラスフィルター

  1. [ OK ]を押してから、[ブレークポイント]ダイアログを閉じます。

6
@AndroidDevこれは、特にVisual Studio IDEを使用している場合は、最も優れたインターフェイスではありません。クラスフィルターは、あらゆる種類の低レベルエラーが(特にアプリの初期化中に)より頻繁にアプリケーションを停止するのを防ぐためのものです。例として、上記の手順に従いますが、クラスフィルターなしで、アプリをデバッグモードで起動し、何が起こるかを確認します。
CJBS 2015年

6
@AndroidDev:実際には理にかなっていると思います。デフォルトで、すべての例外で中断します。条件やフィルターを設定する必要はありません。ただし、OP は例外のフィルタリング(彼自身のコードの例外)を特に要求しました。
Mooing Duck、2015

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、2015

1
私は同じ船に乗っています-クラスフィルターが機能しないようです。私はcom.mycompany。*を試しましたが、例外のどれもそれが壊れる原因にはなりません。
カイロタン2015年

毎回ZygoteInit.javaで停止するだけです。かなり役に立たない!それを克服する方法???
Renaud Cerrato 2015年

Run-> View Breakpoints ....ええ、「表示」メニューの下にウィンドウを表示させたくないでしょう。
LarryBud

7

コード内のすべての例外と、キャッチされなかった場合のその他の例外を解除するには:

このメソッドは、ランタイムが通常の操作中にスローする例外タイプをフィルタリングします(それほど例外的ではありませんか?)。フィルターしすぎてしまうため、クラスフィルターは使用しません。コードのバグにより、ランタイムクラスが例外をスローすることがよくあります(たとえば、配列リストの最後を過ぎてアクセスするなど)。

  1. Java Exception BreakPoints / Any Exception for キャッチされていない例外のみを有効にします

  2. キャッチされた例外とキャッチされていない例外のクラスに新しいJava Exception 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)
    

発生するその他の例外的でない例外を条件の除外リストに追加します。(ところで、使用java.lang.Exceptionは2番目の「すべての例外」エントリを効果的に取得する方法です。)


!(a)&&!(b)&&!(c)の代わりに!(a || b || c)を使用する方が良い
ceph3us
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.