Windows çekirdek modu hata ayıklama araçları. İşletim Sistemi Çekirdeği Hata Ayıklayıcısı Nasıl Çalışır Çekirdek Düzeyinde Yararlanma Geliştirme Yaşam Döngüsü

Bazen Windows'un çekirdek hata ayıklayıcısının önyükleme süresini beklediği bir durumla karşılaşıyorum. "Windows başlat" metnini görüyorsunuz ancak logoyu görmüyorsunuz.

Hata ayıklayıcıyı şimdi eklersem Windows 7 logo animasyonu oynatılır ve ardından logo titreşmeye başlar. Bu noktada, indirme işlemi artık ilerlemez. İşlemci yükü minimuma indirilir. Genelde birkaç dakika beklerim ama hiçbir şey olmuyor.

Bu her zaman olmaz. Ancak bu olursa, VM'yi sıfırlamak yardımcı olmaz. Bu sorunu çözmek için Başlangıç ​​Onarma'yı kullanmam gerekiyor. Ne yazık ki, bu sonsuza kadar sürer.

Başlangıç ​​onarımını çalıştırmanın yanı sıra ne yapabileceğime dair bir fikriniz var mı?

Şimdiden teşekkür ederim!

3

2 yanıt

Karşılaştığınız sorunu çözmek için, önyükleme sırasında F10 tuşuna basmanız yeterlidir. Ve kaldırın / hata ayıklayın ve ilgili seçenekleri. Ardından enter'a basın.

Öneri: Varsayılan önyükleme menüsü seçeneği için / hata ayıklama seçeneğini kullanmayın. Önyükleme yapılandırmasını yeni bir girişe kopyalayın. Ardından hata ayıklama moduna ayarlayın. Windows, hata ayıklayıcıyı ne zaman kullanacağınızı bilmiyor. Bu nedenle beklemesi gerekir.

chPF OELPFPTSCHE KHLBBOYS RP TBVPFE U PFMBDLPK SDTB U BCHBTYKOSCHNY DBNRBNY RBNSFY. lBL RTBCHYMP, CHBN OKHTSOP VKHDEF JBDBFSH PDOP YJ KHUFTKUFCH RPDLBULY, RETEYUUMEOOSHI CH JBKME / etc / fstab. uVTPU PVTBHPCH RBNSFY HAKKINDA KHUFTKUFCHB, OE SCHMSAEYEUS KHUFTPKUFCHBNY RPDLBULY, OBRTYNET, MEOFSCH, CH DBOOSCHK NPNEOF OE RPDDETSYCHBAFUS.

Not: yURPMSHHKFE LPNBODH çöplük (8) DMS KHLBBOYS SDTH NEUFB, ZDE OKHTSOP UPITBOSFSH BCHBTYKOSCHE DBNRSCH. RPUME ÇOK YÜKSEK RP LPNBODE takas (8) TBDEMB RPDLBULY DPMTSOB VSCHFSH CHSCHBOB RTPZTBNNB dökümü. pvshchuop lfp CHCHRPMOSEFUS JBDBOYEN RETENEOOPK dumpdev CH ZHBKME rc.conf (5)... EUMY JBDBOB FB RETENEOOBS, FP RPUME UVPS RTY RETCHPK NOPZRPMSHYPCHBFESHULPK RETEGBZTHHLE VHDEF BCHFPNBFYUEEULY BHEEBNRTPZT kayıt çekirdeği (8)... POB UPITBOYF BCHBTYKOSCHK DBNR SDTB CH LBFBMPZ, ABDBOOCHK CH RETENEOOPK dumpdir ZhBKMB rc.conf. rP KhNPMYUBOYA LBFBMPZPN DMS BCHBTYKOSHI DBNRPC SCHMSEFUS / var / crash.

mYVP CHCH NPTSEFE vBDBFSH KHUFTKUFCHP DMS UVTPUB PVTBBB RBNSFY SCHOP YUETE RBTBNEFT dökümü CH UVTPLE yapılandırması LPOZHYZHTBGYPOOPZP ZHBKMB CHBYEZP SDTB. fBLPK URPUPV YURPMShPCHBFSH OE TELPNEODHEFUS Y RPMTSEO YURPMSHCHBFSHUS, FPMSHLP EUMY CHH IPFIFE RPMKHYUBFSH BCHBTYKOSCHE PVTBCHDSCHYBNSPEYP

Not: dBMEE FETNYO gdb POBYUBEF PFMBDUYL gdb, ABBHEEOOSCHK CH `` TETZYNE PFMBDLY SDTB "". RETEIPD CH FPF TETZYN DPUFIZBEFUS ЪBRKHULPN gdb U RBTBNEFTPN -k. h TEZYNE PFMBDLY SDTB gdb YUNEOSEF UCHPЈ RTYZMBYEOYE HAKKINDA (kgdb).

Uç: eUME CHCH YURPMSHYHEFE FreeBSD CHETUYY 3 YMY WPME TBOOAA, CHS DPMCOSCH CHCHRPMOYFSH HUEEEOYE PFMBDPYUOPZP SDTB LPNBODPK şerit, B OE HUFBOBUFSHMPEYCHMYE

# cp kernel.debug # strip -g kernel

LFPF YBZ OE FBL HTS Y OPVIPDYN, OP TELPNEODKHEN. (PE FreeBSD 4 J VPMEE RPDOYI TEMYBI FPF YBZ CHSCHRPMOSEFUS BCHFPNBFYYUEULY H LPOGE RTPGEUUB RPUFTPEOYS SDTB marka.) LPZDB RAS HUEYUEOP, BCHFPNBFYYUEULY YMY RTY RPNPEY TBNCHPVNY,TBBBL CHSCHEVP,TBBBL CHSCHYE kurun.

ъBNEFSHFE, UFP CH UFBTSCHI CHETUISI FreeBSD (DP 3.1, OE CHLMAUBS LFPF TEMYЪ), YURPMSHHEFUS SDTB Ch ZHPTNBFE a.out, RPFPNKH YI FBVMYGSCHUBSPUNSPUMP VPMSHYPK FBVMYGEK UYNCHPMPCH CH OE HUEOOOPN PFMBDPYUOPN SDTE LFP YMYYOSS FTBFB'de. rPUMEDOYE TEMYJSCH FreeBSD YURPMSHJHAF SDTB CH ZHPTNBFE ELF, ZDE LFP OE SCHMSEFUS RTPVMENPK.

eUMY BL FEUFYTHEFE OPCHPE RAS ULBTSEN, OBVYTBS YNS OPCHPZP SDTB RTYZMBYEOYY BZTHYUYLB W, OP CHBN OHTSOP BZTHTSBFSH J TBVPFBFSH DTHZYN SDTPN, YUFPVSCH UOPCHB CHETOHFSHUS bir OPTNBMSHOPNH ZHHOLGYPOYTPCHBOYA, BZTHTSBKFE EZP FPMSHLP B PDOPRPMSHPCHBFEMSHULPN TETSYNE RTY RPNPEY ZHMBZB -s HLBSCHCHBENPZP RTY BZTHLE, B'li ABFEN CHCHRPMOIFE FBLYE YBZY:

# fsck -p # mount -a -t ufs # böylece / var / crash için dosya sisteminiz yazılabilir # savecore -N /kernel.paniced / var / crash # çıkış # ... çok kullanıcılı

üФБ RPUMEDPCHBFEMSHOPUFSH HLBSCHCHBEF RTPZTBNNE kayıt çekirdeği (8) YURPMSH'PCHBOYE DTHZPZP SDTB HAKKINDA DMS YCHMEUEOYS UYNCHPMYUEEULYI YNEO. yOBYUE POB VKHDEF YURPMSh'PCHBFSh SDTP, TBVPFBAEE CH DBOOSCHK NPNEOF Y, ULPTEE CHUEZP, OYUEZP OE UDEMBEF, RPFPNKH UFP BCHBTYKOSCHKFSHTBYUBYUBT

b FERETSH, RPUME UVTPUB BCHBTYKOPZP DBNRB, RETEKDIFE CH LBFBMPZ / sys / derleme / NE olursa olsun J ABKHUFE LPNBODH gdb -k. yb RTPZTBNNSCH gdb UDEMBKFE PPF UFP:

Sembol dosyası kernel.debug yürütme dosyası /var/crash/kernel.0 çekirdek dosyası /var/crash/vmcore.0 J CHHBMS - CHCH NPTSEFE PFMBTSYCHBFSH BCHBTYKOSCHK DBNR, YURPMSHJKHS YUIPDOSCH LEFUFSCH SDTB FPYUTPK DTHZPK RTPZNP.

ChPF TSKHTOBM LPNBOD UEBUB TBVPFSch gdb, YMMAUFTYTKHAEYK LFKH RTPGEDKHTH. dMYOOSCHE UFTPLY VSCHMY TBPTCHBOSCH DMS HMHYUEOYS YUIFBVEMSHOPUFY Y DMS HDPVUFCHB UFTPLY VSCHMY RTPOHNETPCHBOSCH. CHUE POOFBMSHOPE SCHMSEFUS FTBUYTPCHLPK PYIVLY, TEBMSHOP CHUOYLOHCHYEK PE CHTENS TBVPFS OBD DTBKCHETPN LPOUPMY pcvt.

1: Komut dosyası 30 Aralık Cuma 23:15:22 1994'te başladı 2: # cd / sys / compile / URIAH 3: # gdb -k kernel /var/crash/vmcore.1 4: /usr / src / adresinden sembol verilerinin okunması sys / derleme / URIAH / çekirdek ... tamamlandı. 5: IdlePTD 1f3000 6: panik: çünkü sen söyledin! 7: 1e3f70'deki mevcut pcb 8: ../../i386/i386/machdep.c... için sembollerde okuma yapıldı. 9: (kgdb) burada 10: # 0 önyükleme (arghowto = 256) (../../i386/i386/machdep.c satır 767) 11: # 1 0xf0115159 panik içinde () 12: # 2 0xf01955bd in diediedie ( ) (../../i386/i386/machdep.c satır 698) 13: # 3 0xf010185e db_fncall içinde () 14: # 4 0xf0101586 db_command içinde (-266509132, -266509516, -267381073) 15: # 5 0xf0101711 içinde db_command_loop () 16: # 6 0xf01040a0 db_trap () içinde 17: # 7 0xf0192976 kdb_trap (12, 0, -272630436, -266743723) 18: # 8 0xf019d2eb trap_fatal (...) 19: # 9p60 0xf0 ) 20: # 10 0xf019cb2f trap (...) 21: # 11 0xf01932a1 istisna: calltrap () 22: # 12 0xf0191503 cnopen (...) 23: # 13 0xf0132c34 spec_open () 24: # 14 0xf012d014 vn_open'da () 25: # 15 0xf012a183 open ()'de 26: # 16 0xf019d4eb sistem çağrısında (...) 27: (kgdb) up 10 28: ../../i386/i386 /trap için sembollerde okuma. c...bitti. 29: # 10 0xf019cb2f trap (çerçeve = (tf_es = -260440048, tf_ds = 16, tf_ \ 30: edi = 3072, tf_esi = -266445372, tf_ebp = -272630356, tf_isp = -27 \ 31: 2630396), tf_edx = 12, tf_ecx = -266427884, tf \ 32: _eax = 64772224, tf_trapno = 12, tf_err = -272695296, tf_eip = -26 \ 33: 6672343, tf_cs = -266469 30fags 34:66tsf_ )) (../../i386/i386/trap.c satır 283) 35: 283 (void) trap_pfault (& çerçeve, YANLIŞ); 36: (kgdb) çerçeve çerçevesi-> tf_ebp çerçeve-> tf_eip 37: ../../i386/isa/pcvt/pcvt_drv.c...done için sembollerde okuma. 38: # 0 0xf01ae729 pcopen'de (dev = 3072, flag = 3, mode = 8192, p = (struct p \ 39: roc *) 0xf07c0c00) (../../i386/isa/pcvt/pcvt_drv.c line 403) 40: 403 dönüş ((* linew.l_open) (dev, tp)); 41: (kgdb) liste 42: 398 43: 399 tp-> t_state | = TS_CARR_ON; 44: 400 tp-> t_cflag | = CLOCAL; / * modem olamaz (:-) * / 45: 401 46: 402 #if PCVT_NETBSD || (PCVT_FREEBSD> = 200) 47: 403 dönüş ((* linew.l_open) (dev, tp)); 48: 404 #else 49: 405 dönüş ((* linew.l_open) (dev, tp, flag)); 50: 406 #endif / * PCVT_NETBSD || (PCVT_FREEBSD> = 200) * / 51: 407) 52: (kgdb) yazdır tp 53: ../../i386/i386/cons.c...done için sembollerde okuma. 54: $ 1 = (struct tty *) 0x1bae 55: (kgdb) print tp-> t_line 56: $ 2 = 1767990816 57: (kgdb) yukarı 58: # 1 0xf0191503 in cnopen (dev = 0x00000000, flag = 3, mode = 8192 , p = (st \ 59: ruct proc *) 0xf07c0c00) (../../i386/i386/cons.c satır 126) 60: return ((* cdevsw.d_open) (dev, flag, mode, p) ); 61: (kgdb) yukarı 62: # 2 0xf0132c34 spec_open () içinde 63: (kgdb) yukarı 64: # 3 vn_open () içinde 0xf012d014 65: (kgdb) yukarı 66: # 4 0xf012a183 açık () 67: (kgdb) yukarı 68: # 5 0xf019d4eb sistem çağrısında (çerçeve = (tf_es = 39, tf_ds = 39, tf_edi = \ 69: 2158592, tf_esi = 0, tf_ebp = -272638436, tf_isp = -272629788, _t_ = edx): 70 1, tf_ecx = 0, tf_eax = 5, tf_trapno = 582, \ 71: tf_err = 582, tf_eip = 75749, tf_cs = 31, tf_eflags = 582, tf_esp \ 72: = -272638456, 39tf_ss) () ./../i386/i386/trap.c satır 673) 73: 673 hata = (* callp-> sy_call) (p, args, rval); 74: (kgdb) yukarı 75: İlk çerçeve seçildi; yukarı çıkamazsın. 76: (kgdb) çıkış 77: # çıkış 78: çıkış 79: 80: Komut dosyası 30 Aralık Cuma 23:18:04 1994'te tamamlandı

LPNNEOFBTYY L CHCHYERTYCHDEOOOPNKH TSKHTOBMH:

UVTPLB 6:

üFP DBNR, CHSFSCHK RTY RPNPEY DDB (UNPFTY OYTSE), RPUFPNKH LPNNEOFBTIK L BCHBTYKOPNKH POOFBOPCHH YNEEF YNEOOP CHYD `çünkü dedin!" PDOBLP YOBYUBMSHOPK RTYYUYOPK RTEIPDB CH DDB VSCHMB BCHBTYKOBS PUFBOPCHLB RTY CHOOYLOPCHEOYA PYIVLY UVTBOYGSCH RBNSFY.

UVTPLB 20:

ьFP NEUFFPOBIPTSDEOYE ZhHOLGYY tuzak () H FTBUYTPCHLE UFELB.

UVTPLB 36:

rTYOHDYFEMSHOPE YURPMSHSPCHBOYE OPCHPK ZTBOYGSCH UFELB; FERETSH LFP OE OKHTSOP. rTEDRPMBZBEFUS, UFP ZTBOYGSCH UFELB KHLBSCHCHBAF HAKKINDA RTBCHYMSHOP TBURPMPTSEOYE, DBTS CH UMKHYUBE BCHBTYKOPZP PUFBOPCHB. zMSDS UFTPLKH HAKKINDA YUIPDOPZP LPDB 403, NPTSOP ULBBFSH, UFP CHEUSHNB CHETPSFOP, UFP MYVP CHYOPCHBF DPUFHR RP KHLBBBBFEMA `tp"

UFTPLB 52:

RIPTSE, UFP CHYOPCHBF KhLBBFEMSH, OP PO SCHMSEFUS DPRKHUFINSHN BDTEUPN.

UVTPLB 56:

pDOBLP, PYUECHIDOP, UFP PO KHLBSCHCHBEF NHUPT HAKKINDA, FBL UFP NSCH OBYKH PYIVLH! (dMS FEI, LFP OE OBLPN U ЬFPK YUBUFSHA LPDB: tp-> t_line UMKHTSIF DMS ITBOEOYS TECYNB LBOBMB LPOUPMSHOPZP HUFTPKUFFCHB, J FP DPMESHYUPSHUP VHP NSPP.

Hata ayıklayıcı, derleyiciden sonra program oluşturmak için ikinci şeydir. Ancak, bilgisayar programları yazan ve hata ayıklayıcı kullananların çoğu, çalışmalarının ilke ve mekanizmalarından haberdar değildir.


Hata ayıklayıcı olmak zor...

Programcıların özellikle derin hata ayıklama moduna girdiklerinde gece gündüz hata ayıklayıcıyı kullandıkları gerçeği ışığında, hata ayıklayıcının bir program değil de bir donanım parçası olsaydı muhtemelen aşırı ısınıp bozulacağını söylemeye değer. Çünkü derleyicinin bile hata ayıklayıcının aldığı kadar işi yoktur.

Tabii ki, artık birçok farklı programlama dili olduğundan, her birinin hata ayıklayıcıları farklıdır. Ve elbette, bu dillerin farklı kategorileri için hata ayıklayıcıların çalışmasında farklılıklar vardır: örneğin, yorumlanmış Ruby programları için bir hata ayıklayıcı, bayt koduna derlenmiş Java'dan farklı çalışır ve Java için bir hata ayıklayıcı, sırayla, hata ayıklayıcı Visual C ++ 'dan farklılıklar olacaktır.

Windows platformu için hata ayıklama hakkında konuşacağım. Bunun için hata ayıklayıcıların ilkelerini anladıktan sonra, hem POSIX sistemleri için hata ayıklayıcıları hem de düzeyde çalışmayan hata ayıklayıcıları anlamak mümkün olacaktır. işletim sistemi, ancak sanal bir makine veya bir tür yorumlayıcı düzeyinde.


Windows için Hata Ayıklayıcılar: İki Tür

Windows için temelde farklı iki tür hata ayıklayıcı vardır. Sanırım Delphi'de program yaptıklarında herkes ilk karşılaşan kişiydi (programlamadı mı? İnanması zor. Okulda ve küçük yıllarda ne üzerine programladınız?). Bunlar özel uygulama hata ayıklayıcılarıdır. Birçoğu var ve hem ayrı ayrı hem de (özellikle bu arada, sıklıkla) entegre uygulama geliştirme ortamlarının bir parçası olarak varlar. OllyDbg, geleneksel olarak ayrı yazılım ürünleri olarak dağıtılan hata ayıklayıcılar arasında ayırt edilir ve bir keresinde bunun hakkında "Bilgisayar Haberleri"nde yazmıştım.

İkinci tür hata ayıklayıcı, işletim sistemi çekirdek hata ayıklayıcısıdır. Daha az sıklıkla bulunur ve kullanılırlar ve tasarımlarında özel uygulamalar için hata ayıklayıcılardan önemli ölçüde farklıdırlar. Çekirdek hata ayıklayıcılarının en ünlüsü ve aynı zamanda en iyisi SoftIce'dır. Belki de sadece duymadınız, hatta kullandınız.

İki tür hata ayıklayıcının her birinin çalışması kendine özgü özelliklere sahip olduğundan, size her biri hakkında daha fazla bilgi vereceğim.


Özel Uygulama Hata Ayıklayıcı

En kirli ve en kirli işler işletim sistemi tarafından yapıldığından, özel uygulamaların hata ayıklayıcısı daha basittir. Windows, kullanıcı düzeyindeki uygulamalarda hata ayıklamak için özel programlama arabirimlerine sahiptir - bunlara Windows Hata Ayıklama API'si denir. Popüler Windows IDE'lerinde yerleşik tüm hata ayıklayıcıların kullandığı hata ayıklama API'leridir.

Hata ayıklamanın başlaması için, hata ayıklayıcının hata ayıklanan işlemi özel bir şekilde başlatması gerekir, böylece sistem bu işlemin hata ayıklama altında olacağını bilir. Bundan sonra hata ayıklama döngüsü başlar: program, hata ayıklama olayı veya hata ayıklama olayı olarak adlandırılan belirli bir olay gerçekleşene kadar yürütülür. Bu, hata ayıklayıcının askıda kalmasını önlemek için hata ayıklama döngüsünü ayrı bir iş parçacığında çalıştırır.

Ama bu sadece başlangıç. Çünkü hata ayıklayıcının çalışmasındaki en ilginç şey zaten hata ayıklama olayı gerçekleştiğinde başlar. Sonuçta, aslında, bir hata ayıklayıcının işi nedir? Programcının hatayı belirli bir işleve, belirli bir işleme veya belirli bir değişkene göre yerelleştirmesine yardımcı olmak için. İşletim sistemi de bu zor görevde hata ayıklayıcıya yardımcı olabilir.

Yani, bir hata ayıklama olayı meydana geldi ve sonra bunun program metniyle nasıl ilişkili olduğunu bir şekilde bulmamız gerekiyor. Bu, yalnızca programın kendisi özel hata ayıklama bilgileri içeriyorsa mümkündür - bir hata ayıklama sembolleri tablosu. Adresler ve işlev adları, veri türleri, kod satır numaraları arasındaki yazışmalar hakkında bilgi içerir. Her Windows programcısının aşina olduğu hata ayıklamanın mümkün olduğu onlar sayesinde. Sembol tablolarının farklı biçimleri vardır ve bu nedenle bir satıcının derleyicisi tarafından derlenen bir programın hatalarını başka bir satıcının hata ayıklayıcısıyla ayıklamak her zaman mümkün değildir. Ancak yine de en yaygın biçim belirtilebilir - bu PDB'dir (Program Veritabanı) ve elbette Microsoft tarafından geliştirilmiştir.

Bu nedenle, hata ayıklama sembolü tablosu PDB biçimindeyse, Microsoft'tan özel bir araç - sembolik hata ayıklama işlemcisi kullanabilirsiniz. Bir zamanlar sistem çekirdeğinin bir parçasıydı ve Imagehlp.dll olarak adlandırıldı, ancak uzun zaman önce ayrı bir kitaplığa ayrılmıştı. Karakter işlemcisi, belirli bir adresteki en yakın açık işlevi veya global değişkeni ve ayrıca bu satırın bulunduğu kaynak dosyanın satır numarasını ve adını bulmanızı sağlar. Ters işlemler de desteklenir, örneğin bir işlevin adresini adıyla bulma.

Bu, elbette, özel bir uygulama hata ayıklayıcısının yaptığı tüm işler değildir. Örneğin, çok iş parçacıklı uygulamalarda hata ayıklarken, iş parçacıklarının etkileşimiyle ilgili çok ince pek çok sorun vardır. Hizmetler gibi nispeten basit şeylerde hata ayıklarken bile nüanslar vardır.

Ancak şimdi nüanslar üzerinde durmayacağız - makalenin sonunda size onlar hakkında nerede okuyacağınızı söyleyeceğim. Şimdilik, çekirdek hata ayıklayıcılarına bir göz atalım.


Çekirdek hata ayıklayıcı

Çekirdek hata ayıklayıcıları, özel uygulama hata ayıklayıcılarından çok daha karmaşık programlardır ve sanırım bunun nedeni anlaşılabilir: bir işletim sistemi yardımcısına sahip değiller. Bu durumda o onların müşterisidir, çünkü nihayetinde hata ayıklamaları gereken kişi odur.

Çoğu çekirdek hata ayıklayıcısının çalışması için boş bir modem kablosuyla bağlı iki bilgisayar gerekir. Boş modem, iki bilgisayarı COM veya LTP bağlantı noktaları aracılığıyla doğrudan bir kabloyla bağlamanın bir yoludur. İkinci bilgisayara ihtiyaç vardır, çünkü hata ayıklayıcının ilkinde (hata ayıklanan sistemin kurulu olduğu bilgisayarda) bulunan kısmı vardır. Sınırlı erişim donanıma ve bu nedenle tüm veri çıkışı boş modemden ikinci bilgisayara gider.

Intel x86 mimarisinin modern işlemcilerinde özel hata ayıklama kayıtları vardır (hem eski 368'de hem de daha yeni işlemci modellerinde bunlardan sadece sekiz tanesi vardır, bunlara DR0-DR7 denir). Bu kayıtlar, hata ayıklayıcının kontrol noktaları G / Ç bağlantı noktalarının yanı sıra belleği okumak ve yazmak için. Genel olarak, her şey tam olarak böyle görünüyor ve şimdi her bir hata ayıklama kaydının neden sorumlu olduğunu, kesme noktalarını uygulamak ve diğer benzer bilgileri vermek için hangi kesintilerin kullanıldığını ayrıntılı olarak açıklamaya değer olduğunu düşünmüyorum. Windows için belirli mevcut çekirdek hata ayıklayıcıları hakkında konuşmayı tercih ederim.

Her şeyden önce, işletim sisteminin tam çekirdeğine yerleştirilmiş bir hata ayıklayıcıdır. Windows 2000'den başlayarak tüm NT işletim sistemlerinde mevcuttur. NTOSKRNL.EXE dosyasının bir parçasıdır ve BOOT.INI'deki işletim sistemi için "/ Debug" seçeneği ayarlanarak etkinleştirilebilir. Bu hata ayıklayıcının boş bir modem bağlantısına ve aynı işletim sistemine sahip ikinci bir bilgisayara ihtiyacı var.

Microsoft'tan başka bir çekirdek hata ayıklayıcısı var - WinDBG. Açıkçası, bu bir çekirdek hata ayıklayıcı değil, kullanıcı düzeyindeki uygulamalarda da hata ayıklamak için kullanılabilecek bir karma hata ayıklayıcıdır. Çekirdeğe yerleşik hata ayıklayıcının aksine, grafik bir kabuğa sahiptir ve bu nedenle kullanımı daha kolaydır. Bu hata ayıklayıcı, bazı hata ayıklama görevleri için kullanışlı olabilecek özel uzantıları da destekler. Ancak aynı zamanda çekirdeğin hatalarını ayıklamak için iki bilgisayar gerektirir.

Ancak, tek bir bilgisayarda hata ayıklayabilen bir çekirdek hata ayıklayıcısı vardır. Bu SoftIce. Aynı zamanda SoftIce, uygulama programlarında da hata ayıklayabilir. Bu hata ayıklayıcının kullanıcı programları için kullanımı, örneğin sistem zamanlayıcısına bağlı gerçek zamanlı sistemlerde hata ayıklama durumunda haklıdır. Sıradan bir hata ayıklayıcı ile hata ayıklarsanız, program doğru çalışıyor olsa bile sonuç yanlış olabilir ve SoftIce hem programı hem de zamanlayıcıyı durdurur. Bu, çok iş parçacıklı uygulamalarda hata ayıklarken kullanışlıdır. Ek olarak, SoftIce, sistemdeki tüm iş parçacıkları hakkında, çok iş parçacıklı uygulamalar için iş parçacığı senkronizasyonu hakkında, "ah" tanıtıcısı hakkında bilgi görüntülemek için çok, çok iyi gelişmiş araçlara sahiptir. Bu hata ayıklayıcının tek dezavantajı, bir uygulama programcısı için karmaşıklığıdır. Ancak çekirdek hata ayıklayıcılarından en basit ve en etkili olanıdır.


en meraklısı için

Şimdi, elbette, Windows uygulamaları için hata ayıklayıcılardan bahsetmek, on yıl önce olduğu kadar alakalı değil. Tüm dünya İnternet ile ilgilenmeye başladı ve SoftIce'ın ana kullanıcıları korsanlık alanında krakerler, yorulmak bilmeyen işçilerdi. Ancak, bu çok kötü değil. SoftIce ile iletişim hiç şüphesiz bir insanı bilgisayar bilgisi açısından geliştirir, ancak tabii ki sadece hata ayıklayıcılarla iletişim kurarsanız ve gerçek insanlarla iletişim kurmazsanız, bazı yan etkiler mümkündür.Eh, sanırım herkes bunu zaten biliyor.

Hata ayıklayıcılar, en belirgin yazılım türlerinden bazılarıdır, ancak geliştirme açısından, kullanıcı düzeyinde hata ayıklayıcılar bile oldukça karmaşıktır. Ancak yine de kendi hata ayıklayıcınızı geliştirme arzunuz ve zamanınız varsa, işletim sistemleri ve programlama bilginiz önemli ölçüde artacaktır, bu da yüksek ücretli bir iş bulma şansınızın da artacağı anlamına gelir.

Bu nedenle, kendi hata ayıklayıcınızı oluşturmak istiyorsanız, önce bu konuyla ilgili materyalleri okumalısınız. Bence başlamak için en iyi yer John Robbins'in Windows Uygulamalarında Hata Ayıklama kitabıdır. Zaten eski, 2001'de yayınlandı, ancak içerdiği bilgiler genel, hatta biraz temel bir karaktere sahip olduğu için hala geçerli. Bu kitap, Windows için hata ayıklayıcı yazma örnekleri içerir ve ayrıca, C++ ile programlama yapıyorsanız ve istisna işlemeyi daha iyi anlamak istiyorsanız kullanışlıdır. Aslında makalede sunulan hata ayıklayıcılarla ilgili bilgileri bu kitaptan aldım. Bu kitabı bulamazsanız (sonuçta zaten oldukça eski), işinize yarayabilecek birkaç adres var. İlki şöyle: www.xakep.ru/post/19158/default.asp. "Hacker" dergisindeki bu makale, çekirdek hata ayıklayıcılarından benim yaptığımdan biraz daha fazla bahsediyor ve ayrıca basit bir hata ayıklayıcının kodunu içeriyor. Kalashnikoff.ru/Assembler/issues/016.htm adresinde bir DOS hata ayıklayıcısının nasıl yazılacağını öğrenebilirsiniz. Ancak, elbette, en iyisi MSDN'yi okumak ve yol boyunca bir açık kaynak hata ayıklayıcı bulmaktır. Ve elbette, bir hata ayıklayıcı yazmaya başladıysanız, bu zor görevde başarı!

"Çekirdek hata ayıklama" terimi, çekirdeğin dahili veri yapısının incelenmesini ve/veya çekirdekteki işlevlerin adım adım izlenmesini ifade eder. Bu hata ayıklama çok faydalı yol Windows'un dahili aygıtını incelemek, dahili aygıtın bir görüntüsünü elde etmenize olanak tanır. sistem bilgisi bu, başka hiçbir yolla elde edilemez ve çekirdekte kod yürütmenin ilerlemesinin net bir görünümünü verir.

düşünmeden önce Farklı yollarÇekirdeğin hatalarını ayıklarken, bu tür herhangi bir hata ayıklama işlemini gerçekleştirmek için gerekli olacak dosya setini inceleyelim.

Çekirdek Hata Ayıklama Sembolleri

Sembol dosyaları, işlevlerin ve değişkenlerin adlarını ve veri yapılarının şemasını ve biçimini içerir. Bağlayıcı program tarafından oluşturulurlar ve hata ayıklayıcılar tarafından bu adlara başvurmak ve bir hata ayıklama oturumu sırasında bunları görüntülemek için kullanılırlar. Bu bilgi genellikle ikili dosyada saklanmaz çünkü kod yürütüldüğünde gerekli değildir. Bu, onsuz ikili kodun daha küçük ve daha hızlı hale geldiği anlamına gelir. Ancak bu aynı zamanda hata ayıklama sırasında hata ayıklayıcıya hata ayıklama oturumu sırasında başvurulan ikili dosyalarla ilişkili sembol dosyalarına erişim sağlamanız gerektiği anlamına gelir.

Bir veri yapısının iç yapısını araştırmak için herhangi bir çekirdek modu hata ayıklama aracını kullanmak Windows çekirdeği(işlemlerin listesi, iş parçacığı blokları, yüklenen sürücülerin listesi, bellek kullanım bilgileri vb.) doğru sembol dosyalarına ve en azından çekirdek ikili görüntüsü Ntoskrnl.exe için sembol dosyasına ihtiyacınız var. Sembol tablosu dosyaları, ayıklandıkları ikili görüntünün sürümüyle eşleşmelidir. Örneğin, eğer ayarlanırsa Windows paketi Service Pack veya bazı çekirdek güncelleme düzeltmeleri için uygun şekilde güncellenmiş sembol dosyalarını edinmeniz gerekecektir.

Windows'un farklı sürümleri için sembolleri indirmek ve kurmak kolaydır, ancak düzeltmeler için sembolleri güncellemek her zaman mümkün değildir. almanın en kolay yolu istediğiniz sürüm hata ayıklayıcıda belirtilen sembol yolu için özel sözdizimini kullanarak özel bir Microsoft Symbol Server'a erişerek hata ayıklama için semboller. Örneğin, aşağıdaki sembol yolu, hata ayıklayıcıyı internet sembol sunucusundan semboller indirmeye ve yerel bir kopyayı c:\symbols:srv *c:\symbols * klasörüne http: //msdl.microsoft.com/download/ kaydetmeye zorlar. semboller

Sembol sunucusunun kullanımına ilişkin ayrıntılı talimatlar Hata Ayıklama Araçları Yardım dosyasında veya İnternet'te http://msdn.microsoft.com/en-us/windows/hardware/gg462988.aspx adresinde bulunabilir.

Çekirdek modu hata ayıklayıcıları, CPU ile işletim sistemi arasında bulunur. Bu, çekirdek modu hata ayıklayıcısını durdurduğunuzda işletim sisteminin de tamamen durduğu anlamına gelir. Zamanlayıcı ve zamanlama sorunlarıyla çalışırken işletim sisteminin aniden durdurulmasının yararlı olduğunu anlamak zor değil. Ancak, aşağıda tartışılacak olan bir hata ayıklayıcı dışında (bu bölümün SoftlCE Hata Ayıklayıcı bölümünde), çekirdek modu hata ayıklayıcılarını kullanarak kullanıcı modu kodunda hata ayıklayamazsınız.

Pek çok çekirdek modu hata ayıklayıcısı yoktur. Bunlardan bazıları şunlardır: Windows 80386 Hata Ayıklayıcı (WDEB386), Çekirdek Hata Ayıklayıcı (1386KD), WinDBG ve SoftlCE. Bu hata ayıklayıcıların her biri aşağıdaki bölümlerde kısaca açıklanmıştır.

Hata Ayıklayıcı WDEB386

WDEB386, Platform SDK'nın bir parçası olarak dağıtılan bir Windows 98 çekirdek modu hata ayıklayıcısıdır. Bu hata ayıklayıcı yalnızca sanal sürücüler yazan geliştiriciler için kullanışlıdır. Windows cihazları 98 (VxD). Windows işletim sistemleri için çoğu çekirdek modu hata ayıklayıcısında olduğu gibi, WDEB386 hata ayıklayıcısının çalışması için iki makine ve bir boş modem kablosu gerekir. Hedef makinede çalışan hata ayıklayıcının parçasının donanımına sınırlı erişimi olduğundan iki makineye ihtiyaç vardır, bu nedenle çıktısını gönderir ve diğer makineden komutlar alır.

WDEB386 hata ayıklayıcısının ilginç hikaye... Windows 3.0 döneminde dahili bir Microsoft arka plan aracı olarak başladı. Kullanımı zordu ve hata ayıklama için yeterli desteği yoktu. kaynak kodu ve Visual C ++ ve Visual Basic hata ayıklayıcılarının bizi şımarttığı diğer güzel özellikler.

Nokta komutları, WDEB386'nın en önemli özelliğidir. INT 41 kesmesi, komut eklemek üzere WDEB386'yı genişletmek için kullanılabilir. Bu genişletilebilirlik, VxD sürücü yazarlarının sanal cihazlarındaki bilgilere ücretsiz erişim sağlayan özel hata ayıklama komutları oluşturmasına olanak tanır. hata ayıklama Windows sürümü 98, hata ayıklama sürecinin herhangi bir noktasında işletim sisteminin tam durumunu gözlemlemenizi sağlayan birçok DOT komutunu destekler.

Hata Ayıklayıcı I386KD

Windows 2000, çekirdek modu hata ayıklayıcısının asıl bölümünün NTOSKRNL'nin bir parçası olması bakımından Windows 98'den farklıdır. EXE - ana işletim çekirdek dosyası Windows sistemleri 2000. Bu hata ayıklayıcı, hem ücretsiz (sürüm) hem de doğrulanmış (hata ayıklama) işletim sistemi yapılandırmalarında mevcuttur. Çekirdek modu hata ayıklamasını etkinleştirmek için / DEBUG önyükleyici parametresini BOOT olarak ayarlayın. Çekirdek hata ayıklayıcı iletişim bağlantı noktasını varsayılandan (COM1) başka bir şeye ayarlamak istiyorsanız, INI ve isteğe bağlı olarak / DEBUGPORT önyükleyici seçeneği. I386KD kendi makinesinde çalışır ve aşağıdakilerle iletişim kurar: Windows makinesi 2000, boş bir modem kablosuyla.

Çekirdek modu hata ayıklayıcı NTOSKRNL. EXE, işletim sisteminin hatalarının ayıklanabilmesi için yalnızca CPU'yu denetlemek için yeterlidir. Hata ayıklama çalışmalarının çoğu - sembol işleme, genişletilmiş kesme noktaları ve sökme - 1386KD tarafında yapılır. Bir zamanlar, Windows NT 4 Device Driver Kit (DDK), boş modem kablolarında kullanılan protokolü belgeledi. Ancak, Microsoft artık bunu belgelemiyor.

1386KD'nin gücü, dahili sisteme erişmek için sunduğu tüm komutlara baktığınızda belirgindir. Windows durumu 2000. Windows 2000'de aygıt sürücülerinin nasıl çalıştığını bilmek, programcının birçok komutun çıktısını takip etmesine yardımcı olacaktır. Tüm gücüne rağmen, i386KD, kaynak düzeyinde hata ayıklama için kullanımı çok sıkıcı bir konsol uygulaması olduğu için neredeyse hiç kullanılmaz.