Toplanan bilgiler veya rapor bir hata izleme sistemine yüklenir.
Sistemdeki herhangi bir işlem, yaygın olarak 'kilitlenme' (segmentasyon ihlali, veri yolu hatası, kayan nokta istisnası vb.) Olarak adlandırılan bir sinyal nedeniyle ölürse veya örneğin paketlenmiş bir Python uygulaması yakalanmamış bir istisnayı yükseltirse, apport arka ucu otomatik olarak çağrılır.
/ Var / crash / içindeki bir dosyada bir ilk kilitlenme raporu üretir (dosya adı, kilitlenen yürütülebilir dosyanın ve kullanıcı kimliğinin adından oluşur). Kilitlenen işlem, şu anda oturum açmış olan kullanıcıya aitse veya bir sistem işlemine aitse ve kullanıcı bir yöneticiyse, apport, kilitlenme hakkında kullanıcıyı bilgilendirir ve sorunu bildirmeyi önerir.
Kullanıcı "Hata raporu gönder" onay kutusunu etkin bırakırsa , Apport toplanan bilgileri hata izleme sistemine yükler. Bundan sonra, paketlerin hata dosyalama sayfasını mantıklı bir varsayılan hata başlığıyla açar ve hata dosyalama işleminin geri kalanını web arayüzüne bırakır.
Ubuntu, hata izleme sistemimiz aracılığıyla her gün inanılmaz sayıda hata raporu alır. Bunların her birinin düzeltilebilmesi için okunması, değerlendirilmesi ve sıralanması gerekir. Bu, Yardımınızı Hatalarla Yardım konusunda kullanabileceğimiz yerdir. Hata triyaj sürecinin görsel bir temsili için, bu güzel Akış Şemalarına bakın.
Her hata raporu muhabirle yapılan bir görüşmedir. Herhangi bir muhabirin Ubuntu topluluğuyla genellikle ilk teması, eksiksiz bir hata raporu hazırlamaya çalışan bir hata triager'ıdır. İyi bir izlenim vermemiz çok önemlidir, bu yüzden lütfen nazik olun ve en iyi İngilizcenizi kullanmaya çalışın.
Basit, ayrıştırılmamış hatalar üzerinde çalışmak, bir hatanın yaşam döngüsünün her yönüyle uğraşmanız gerekeceğinden, triyaj prosedürüyle tanışmak için iyi bir yoldur. Ayrılmamış hatalar bölümü onları nerede bulacağınızı açıklar.
Hata Türleri
Apport raporları
Apport raporları, otomatik hata raporlama Apport programı aracılığıyla bildirilen hatalardır. Apport kullanarak hataları bildirmek, geliştiricilere etkilenen sistem hakkında birçok bilgi sağladığı için bir hatayı bildirmenin tercih edilen yoludur. Apport kullanıldığında, tüm süreci hızlandıran daha az ek bilgi gerekir.
Bu hataları, açıklamalarına eklenen sistem bilgileri listesinden tanıyabilirsiniz. Bazı programların Apport için kancaları vardır ve hata bildirirken daha fazla bilgi ekler. Bu bilgi genellikle eklerde bulunabilir.
Onaylanan hatalar
Bir hata 'Onaylandı' olarak işaretlendiğinde henüz tam olarak tetiklenmez. Bu hata 'Triaged' olarak işaretlenmeye çok yakın, ancak geliştiricilerin düzeltmeye hazır olduğundan emin olmanız gerekiyor.
Özellik talepleri
Hata raporu aslında bir özellik isteği ise, iki olasılık vardır. İstenen geliştirme küçük ve iyi tanımlanmışsa ve / veya öneri bir üst proje ile ilgiliyse, hatanın Önemi 'İstek Listesi'ne ayarlanmalıdır. Rapor tamamlandığında durum 'Triaged' olarak ayarlanmalıdır.
Yalnızca Ubuntu Hata Kontrolü ekibinin üyeleri bunu yapabilir. Üye değilseniz, bunu sizin için yapacak birine sormanız gerekir. Hata numarasını # ubuntu-bugs içine yapıştırın ve hatanın 'İstek Listesi'ne ayarlanması gerektiğini düşündüğünüzü söyleyin. Hemen fark edilmese de, birisi sizin için fark edecek ve ayarlayacaktır.
Dahili olarak nasıl çalışır?
Çökme engelleme
Apport, çekirdek dökümü doğrudan apport içine eklemek için / proc / sys / kernel / core_pattern kullanır:
$ cat /proc/sys/kernel/core_pattern
|/usr/share/apport/apport %p %s %c
$
Not: ulimit devre dışı bırakılmış çekirdek dosyalara ayarlanmış olsa bile (ulimit -c 0 kullanarak sıfır çekirdek dosya boyutunu belirleyerek), apport yine de çökmeyi yakalayacaktır. Python çökmelerini engellemek /etc/python*/sitecustomize.py
için, işlenmeyen istisnalara bir çağrı yapmak için apport yükler .
Misal
AppID, PID 1 (Upstart) ölürse temel dosyaları bile yakalayabilir:
- Upstart dahili bir tutarsızlık tespit ederse, SIGABRT sinyalini yükseltir.
- UPStart çökme işleyicisi SIGABRT'de çağrılır.
- Upstart kilitlenme işleyicisi bir alt işlemi çatallar.
- Upstart alt işlemi, çocuğun anormal şekilde çıkmasına neden olan sinyali yeniden yükseltir.
- Çekirdek, alt işlemin anormal bir şekilde çıktığını algılar ve apport'u çağırır, çekirdek dosyayı standart girdiyi (/ proc / sys / kernel / core_pattern nedeniyle) iletir.
- apport çekirdek dosyayı / var / crash / içindeki diske yazar.
- PID 1, çocuğunun sona ermesini bekler (yalnızca apport çekirdek dosyayı yazmayı bitirdikten sonra olur).
- PID 1 çıkar.
- çekirdek panikleri.
- Bir sonraki önyüklemede Whoopsie kilitlenme dosyasını algılar ve işler.
Arka uç
Gecikme ve CPU / IO etkisini olabildiğince düşük tutmak için, /usr/share/apport/apport
yalnızca çökmüş işlem hala varken alınması gereken verileri toplar: /proc/pid
çekirdek dökümü, yürütülebilir yol ve sinyal numarası bilgisi. Rapor yazılır /var/crash/executable_path.uid.crash
.
Ön uç çağırma
Gnome'da güncelleme bildiricisi inotify saatini açık tutar /var/crash
. Yeni bir şey olduğunda / usr / share / apport / apport-checkreports'u çağırır. Yeni raporlar varsa, yukarıdaki ekran görüntülerinde gösterilen ön uç olan / usr / share / apport / apport-gtk'yi çağırır.
Ön uç daha sonra paket sürümleri, paket dosyası sağlama toplamları veya işletim sistemi sürümü gibi ek bilgiler toplar ve eşleşen tüm paket kancalarını çağırır. Bunu devre dışı bırakmak için, com.ubuntu.update-notifier show-apport-crashes false (sıradan masaüstü kullanıcısı olarak) set ayarlarınızı çalıştırabilirsiniz.
Launchpad tabanlı otomatik toplayıcı
Kanonik veri merkezi, hataları apport ile otomatik olarak izleyen bir hizmet çalıştırır. Launchpad'deki hataları mimariye göre etiketleyerek bir geri çekilme yapılacak ve etiket kaldırılacaktır. Kullanılan etiketler need-i386-retrace veya need-amd64-retrace'tir. Duyuruyu görün.
Paket Başına Apport Kancaları
Paketlerin sistemden toplanan ve hata raporuna dahil edilen bilgileri belirtmesi mümkündür. Bunlar, paketlerdeki apport kancaları ile yapılır. Bazı yararlı örnekler için bakınız:
- source_xorg.py - hata raporlarına ek günlük dosyaları ve donanım ayrıntıları ekler
- usplash - belirli kod yollarındaki çökmeleri yoksayar
- source_totem.py - muhabirlere sorular sorar ve yanıtlara göre farklı bilgiler toplar
/ usr / share / apport / package-hook. Apport kancaları sağlayan paketlerin bir listesi de vardır.
Çökme veya hata raporu apport üzerinden gönderilirse, ilgili kancalar otomatik olarak çalıştırılır. Apport olmadan dosyalanmış önceden bildirilmiş bir hatanız varsa ve bu kancalardan gelen bilgilerle ilgileniyorsanız, hata raporlayıcısından apport-collection bugnumber kullanmasını isteyebilirsiniz.
Kaynağı kullan, Luke!
- Akış yukarı tarball'ı Launchpad proje sayfasından veya Ubuntu kaynak tarball'ı Ubuntu arşivinden indirebilirsiniz.
- uygulaması Launchpad'deki RCS pazarı ile geliştirilmiştir. Buna katkıda bulunmak veya buna dayalı kendi sisteminizi geliştirmek istiyorsanız, bzr get lp: trunk için apport veya Ubuntu paketleme dalı için debcheckout -a apport ile kendi şubenizi alabilirsiniz.
Gelecek planları
Performansta çeşitli iyileştirmeler, raporlarla çalışmak için daha iyi araçlar ve daha fazla dilin entegrasyonu (Mono / Python yığın izleri, onaylama mesajları, vb.) İlgili spesifikasyona bakın.
Kaynaklar: Apport , Triyaj Nasıl Yapılır ve Apport nasıl etkinleştirilir