SORU
1 ŞUBAT 2010, PAZARTESİ


Nasıl segfault çekirdeği günlük bir mesajı okumak mı

Bu çok basit bir soru, am kern.log aşağıdaki segfault hata üretir bir uygulama hata ayıklamak için çalışıyorum

kernel: myapp[15514]: segfault at 794ef0 ip 080513b sp 794ef0 error 6 in myapp[8048000 24000]

Burada benim sorular:

  1. Orada segfault diff hata sayıların ne olduğu konusunda herhangi bir belge, bu durumda hata 6, 4, 5 hata gördüm

  2. Bilgi anlamı at bf794ef0 ip 0805130b sp bf794ef0 and myapp[8048000 24000] nedir?

Şimdiye kadar semboller ile derlemek için başardı, ve x 0x8048000 24000 ben ne zaman bir sembol verir, bunu yapmanın doğru yolu nedir? Benim şimdiye kadar varsayımlar şunlardır:

  • sp = işaretçi yığını?
  • Yönerge işaretçisi = ıp
  • = ??? at?
  • [8048000 24000] = sembol Adres uygulamam?

CEVAP
1 ŞUBAT 2010, PAZARTESİ


Benim sınırlı bilgiye dayanarak, varsayımlar doğru.

  • sp = işaretçi yığını
  • ip = Yönerge işaretçisi
  • 6* = *Adres

Eğer sorun hata ayıklama olsam bir çekirdek dökümü üretmek veya stack backtrace Bir günlük kazası için bu kodu değiştirmek istiyorum. Ayrıca bu program altında çalıştırabilirsiniz (veya takmak) GDB.

Hata kodu sadece sayfa hataları için mimari Hata Kodu ve Mimarlık özel görünüyor. Genellikle çekirdek kaynağı arch/*/mm/fault.c belgelenmiştir. Linux/arch/i386/mm/fault.c kopyamın hata_kodu için: aşağıdaki tanım vardır

  • bit 0 == 0 hayır Sayfa, 1 bulundu koruma hatası anlamına gelir
  • 1 == 0, 1 demek okumak demek karalayacaksınız
  • bit 2 == 0 anlamına gelir çekirdek, 1 kullanıcı modu anlamına gelir

Linux/arch/x86_64/mm/fault.c kopyamın aşağıdaki ekler:

  • bit 3 == 1 hatası talimat getirme anlamına geliyor

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • eHow

    eHow

    27 NİSAN 2006
  • EminemVEVO

    EminemVEVO

    12 Mayıs 2009
  • Google Developers

    Google Devel

    23 AĞUSTOS 2007