Android Studio IDE: İstisnadan Çıkma


139

Görünüşe göre Android Studio'm varsayılan olarak herhangi bir istisnayı bozmak istemiyor. "Herhangi Bir İstisna" üzerinde durdurmanın etkinleştirilmesi, gerçek JDE kitaplıklarını kırmaya başlar. Yalnızca benim kodumdaki istisnaları kırmaya zorlamanın bir yolu var mı?

Visual Studio evreninden geliyor, burada varsayılan VS hata ayıklama davranışını arıyor.

Yanıtlar:


207

Yakalanan veya yakalanmayan tüm istisnaları kırmak için:

  1. Kesme Noktaları penceresini Çalıştır -> Kesme Noktalarını Görüntüle aracılığıyla açın .
  2. Kesme Noktaları iletişim kutusu görüntülenir. Sol bölmede en alta kaydırın. Java İstisna Kesme Noktaları altında Herhangi bir istisnayı seçin
  3. İle herhangi bir istisna seçilmiş, sağ bölmedeki, yapılandırmak aşağıdaki gibi:
    • Askıya alma: işaretlendi
    • Tümü: seçildi
    • Durum: !(this instanceof java.lang.ClassNotFoundException)
    • Bildirimler: Her iki yakaladım istisna ve yakalanmamış istisna seçilen

Kesme noktaları iletişim kutusu

  1. Hata ayıklayıcının kırması gereken kitaplıkların ad alanlarını belirten filtreleri tanımlayın : Sınıf filtrelemeyi etkinleştirmek için Sınıf filtreleri onay kutusunu işaretleyin ( @ Scott Barta'da belirtildiği gibi ). Ardından , Sınıf Filtreleri iletişim kutusunu açmak için ... (elipsis) düğmesine tıklayın. Desen Ekle(Desen Ekle) düğmesine tıklayarak sınıf ad alanı desenlerini belirtin . Giriş:
    • com.myapp.* (bunu uygulamanızın ad alanı önekiyle değiştirin)
    • java.* (not: OP'nin sorusuna göre, Java kitaplıklarında BOZULMAMASI için bunu dışarıda bırakın)
    • android.* (yukarıdaki gibi, yalnızca kendi uygulama kodunda hata ayıklamak için dışarıda bırakın)
    • Gerekirse ek ad alanları ekleyin (ör. 3. taraf kitaplıkları)

Sınıf Filtreleri

  1. Tamam'a basın , ardından Kesme Noktaları iletişim kutusunu kapatın.

6
@AndroidDev En güzel arayüz değil, özellikle de Visual Studio IDE'yi kullanırken. Sınıf filtreleri, her türlü düşük seviyeli hatanın uygulamayı çok daha sık (özellikle uygulama başlatma sırasında) durdurmasını önlemek içindir. Örnek olarak, sınıf filtreleri olmadan yukarıdaki adımları izleyin, ardından uygulamayı hata ayıklama modunda başlatın ve ne olduğunu görün.
CJBS

6
@AndroidDev: Aslında mantıklı olduğunu düşünüyorum. Varsayılan olarak gelmez tüm özel durum kırmaya. Koşullar ve filtreler belirlemeniz gerekmez. Bununla birlikte, OP özel olarak istisnaların filtrelenmesini istedi (kendi kodundaki istisnalar).
Ördek mölemeye

5
Bir xcode / iOS geliştiricisi ve android-n00b olarak, HERHANGİ bir kesme noktasının tetiklenmesi için Android stüdyosunda uygulamayı başlatmak için oyun benzeri (üçgen) simgeye tıklayamayacağınızı bilmiyordum. Sağ taraftaki hata benzeri simgeye tıklayarak uygulamayı başlatmalısınız.
xaphod

@xaphod Başka bir yol, yayın modunda çalıştırmaktır (oynat düğmesine basın), ardından uygulama başladıktan sonra hata ayıklayıcıyı ekleyin (hatanın bulunduğu cihaza - simgenin sağ alt kısmında yeşil hata bulunan dikey dikdörtgene basarak), ardından seçin hata ayıklanacak süreç. Bu, uygulama başlatma kodlarından herhangi birinde hata ayıklamazsa çok daha hızlıdır. Bakınız: developer.android.com/tools/debugging/…
CJBS

Junit kullanıyorsanız (birim testi sırasında hata ayıklama), sınıf filtresi eklemek isteyebilirsinizorg.junit.*
Thomas Vincent

34

Kesme Noktaları penceresini açarsanız, koşullu olarak kırılıp kırılmaması için size epeyce seçenek sunar. Burada aradığınız şey "Sınıf filtreleri" dir - örneğin bir Java paketi yolu ile bir joker karakter ifadesi belirtebilirsiniz ve yalnızca eşleşen sınıflardan oluşturulan istisnalar için kırılır.


4
Kesme Noktaları penceresini arayan herkes için, Çalıştır -> Kesme Noktalarını Görüntüle menüsünde bulunabilir.
Patrick

2
Bunu deniyorum ama işe yarayamıyorum. Sınıf filtresi ne olmalıdır? Bazı örnekler verebilir misiniz?
Bart Friederichs

1
Aynı gemideyim - sınıf filtreleri benim için işe yaramıyor gibi görünüyor. Com.mycompany. * 'I denedim ancak istisnaların hiçbiri bozulmasına neden olmadı.
Kylotan

Her zaman ZygoteInit.java'da durur! Oldukça yararsız! Bunun üstesinden nasıl gelinir ???
Renaud Cerrato

Çalıştır-> Kırılma Noktalarını Görüntüle .... evet, "Görünüm" menüsü altında bir pencerenin görüntülenmesini istemeyiz, değil mi?
LarryBud

7

Kodunuzdaki tüm istisnaları ve yakalanmamışsa diğer istisnaları kırmak için:

Bu yöntemler, normal çalışma sırasında çalışma zamanının oluşturduğu istisna türlerini filtreler (çok istisnai değil, değil mi?). Çok fazla filtre uygulayacağı için sınıf filtresini kullanmaz; kodunuzdaki hatalar genellikle çalışma zamanı sınıflarının istisnalar atmasına neden olur (örneğin, sondan sonra bir dizi listesine erişme).

  1. Yalnızca yakalanmamış istisnalar için Java İstisna BreakPoints / Herhangi bir istisnayı etkinleştirin .

  2. Yeni bir ekleme Java İstisna kesme noktası için Exception (java.lang)için sınıfın yakalanarak yakalanmamış istisna. Koşulu etkinleştirin ve şuna ayarlayın:

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

Karşılaştığınız diğer istisnai olmayan istisnalar durumunda hariç tutma listesine ekleyin. (BTW, kullanımı, java.lang.Exceptionikinci bir "Herhangi bir istisna" girişi etkili bir şekilde elde etmenin bir yoludur.)


! (a) &&! (b) &&! (c) yerine! (a || b || c) kullanmak daha iyi değil
ceph3us
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.