Debugowanie
Transkrypt
Debugowanie
Debugowanie •Maciej Kalbarczyk •Marcin Kosieradzki Agenda •Czy m sąbugi ? •Sposoby radzenia sobie z bugami •Jakdzi ał adebuger ? •Jakdzi ał apr of i l er ? •I nnenar zędzi a Pierwszy bug • • • • • • • • By łf i z y cz ny( r eal ny ,spr z ęt owy( ?)) ,ni epr ogr ami s t y cz ny Spowodowaławar i ękomput er a Ni ktni ewi edz i ałdl acz ego apr obl emem okaz ał asi ę. . . Ćmapowoduj ącaz akł óceni a Debuger em by l i popr os t ul udz i ewy pat r uj ącyni epr awi dł owości Dor oz wi ąz ani apr obl emuuż y t o. . .pi ncet y By łt or ok1945,odt egocz asuwi el esi ęz mi eni ł o,al ej edno poz ost ał o. . . • Bugi sąr ówni ei r y t uj ącej akt enpowyż sz y Opowi emycz y m sąt er azi j aksobi ezni mi moż nar adz i ć ( j użbezuż y ci api ncet y ) Rodzaje bugów •Ni espój nyi nt er f ej suży t kowni ka •Ni espeł ni onewymagani a •Pr obl emywy daj ności owe •Ni est abi l nedzi ał ani epr ogr amul ub uszkodzenie danych Przyczyny powstawania bugów •Nierealne terminy •Podej ści e:" Naj pi er wkoduj ,pot em my śl " •Zł ezr ozumi eni ewy magań •Niewiedza lub brak wprawy u programistów •I gnor owani ekwest i ij akości owy ch Fazy projektu a bugi Faza Bugi Koszt Planowanie •Nierealny harmogram Wysoki Projektowanie •Zł ez r oz umi eni e wy magań •Bł ędy architektoniczne Potencjalnie bardzo wysoki Kodowanie •Bł ędy programistyczne Zal eż yodmoment u wykrycia Testowanie •Bł ędypr z y testowaniu Wysoki Uni kani ebł ędów •Udzi ał zespoł upr z yust al ani u harmonogramu •Dobry kontakt z docelowym uży t kowni ki em •Odpowi edni eumi ej ęt ności i przeszkolenie •Pr zegl ądykodu Wykr ywani ebł ędów •Skut ecznemechani zmyobsł ugi bł ędów •Asercje •Wsparcie kompilatora •Analiza statyczna kodu •Test ypopr awnośc i oweor az wydaj nośc owe •Pomi ar ywydaj nośc i Anal i zabł ędów •Rej est r owani epr zepł y wukodu– tracing •Crash Dump •Ręczneśl edzeni ekodu( pr zyuży ci u debugera) •Pr zegl ądani ezmi anwr epozy t or i um koduor azsy st emi eśl edzeni abł ędów Wsparcie platformy Windows • Interfejs programistyczny – Tr y buży t kowni ka- Win32 Debugging API – Tr y bj ądr a- Kernel Debugger • Sy mbol edebuguj ąc e • Wersja checked/debug systemu operacyjnego • Li c z ni k i wy daj noś c i • Just-In-Time Debugging • Opcja automatycznego uruchamiania wskazanej aplikacji pod debugerem • Mechanizm minidumpów Debugowanie w trybie użyt kowni ka • Debugowany jest konkretny proces • Debugermadost ępdopr z est r z eniadr esowej procesu debugowanego • Korzysta z Win32 Debugging API (aplikacje natywne) •I ndy wi dual neśr odowi skadl aj ęz y ków interpretowanych oraz uruchamianych na wirtualnej maszynie • Pr zy k ł ady :Vi sualSt udi oDebugger ,Wi nDBG ( wt r y bi euży t kowni ka) ,NTSD Debugowanie w trybie j ądr a • " Si edz i "pomi ędzysy st emem oper acy j nym apr ocesor em • Naj cz ęści ej debuguj esi ęwt ensposób:st er owni k i , apl i kacj ei st ot ni ez al eż neodcz asu • Zatrzymanie debugera powoduje zatrzymanie systemu operacyjnego • W wi ększ oś cipr z y padkówwymagadodat kowego komputera do debugowana • Nar z ędz i al i v ekdor azSof t I CEpot r af i ądz i ał aćnat ej samej maszynie • Wbudowane wsparcie w NTOSKRNL.EXE (/DEBUG, /DEBUGPORT) • Pr z y kł ady :KD,Wi nDBG ( wt r y bi ej ądr a) ,Sof t I CE Konstrukcja debuggera napr zykł adzi eWi n32 Debugging API Szkielet debugera Cr eat ePr ocess( …,DEBUG_PROCESS,…) ; whi l e( 1==Wai t For DebugEv ent ( …) ) { i f( EXI T_PROCES…) break; Cont i nueDebugEv ent ( …) ; } Obj aśni eni e • Ur uchami anyj estdodat kowypr oces( z ewz gl ędówbez pi ecz eńst wa) , wkt ór y m będz i ewy konywanaapl i kacj adebugowana • Przy uruchamianiu procesu konieczna jest flaga DEBUG_PROCESS lub DEBUG_ONLY_THIS_PROCESS • WaitForDebugEvent odbiera kolejne zdarzenia z procesu debugowanego • Cont i nueDebugEv entpowoduj ekont y nuacj ęwy konani apr ocesu debugowanego po odebrau zdarzenia • Zami as tt wor z y ćnowypr ocesmoż napodł ącz y ćdebuggerdo i st ni ej ącegopr ocesupr z yuż y ci uDebugAct i v ePr ocess ,koni ecz ny jest wtedy przywilej SE_DEBUG_NAME. Otrzymywane zdarzenia •Ut wor zeni e/ Zakończeni epr ocesul ub wąt ku •Wy s t ąpi eni ewy j ąt ku •Zał adowani e/ Wy ł adowani ebi bl i ot eki •Otrzymanie komunikatu debuguj ącego •Bł ądsy st emowy Dost ępdopami ęci • Uchwyt do procesu potomnego posiada flagi PROCESS_VM_READ oraz PROCESS_VM_WRITE, kt ór ez ez wal aj ąnadost ępdopami ęciwi r t ual nej pr ocesu potomnego przy wykorzystaniu ReadProcessMemory oraz WriteProcessMemory • Mechanizm copy-on-write zabezpiecza inne procesy wy konuj ącet ensam kodpr zedmody f i kacj ąkodu • Przy otrzymaniu zdarzenia OUTPUT_DEBUG_STRING napi snal eż ycz y t aćzpr z est r z eniadr esowej pr ocesu debugowanego • Funkcj eVi r t ual Quer y Ex,Vi r t ual Pr ot ect Expoz wal aj ąna z ar z ądz ani ez abez pi ecz eni amist r onpami ęci . Breakpointy • Poz wal aj ąnapr z er wani ewy konani apr ocesuponat kni ęci usi ęna wskaz anąi nst r ukc j ę • Ustawienie breakpointa polega na podmienieniu instrukcji ( z apami ęt uj ącj ą! )nai ns t r uk cj ępr z er wani adebugger a–dla i 386będz i et o:I NT3( okodz i e0x CC) • W momenci eki edypr ocesorwy woł aI NT3z wr acanej estz dar z eni e debugger a:wy j ąt ekEXCEPTI ON_BREAKPOI NT • Poodebr ani uwy j ąt kunal eż ypodmi eni ćspowr ot em i nst r uk cj ęnat ę z apami ęt aną • Doewent ual negopr z ywr óceni abr eakpoi nt amoż nawy kor z y st ać mechanizm SINGLE STEP (dla i386: ustawienie flagi TRAP) • SI NGLESTEPwy konuj ej ednąi ns t r uk cj ępr ocesor a,anas t ępni e powoduj ewy j ąt ekEXCEPTI ON_SI NGLE_STEP Symbol edebuguj ące • Pozwal aj ąodcz y t ać: –Typy –Nazwy symboli –Naz wypl i kówź r ódł owy c hi numer yl i ni i kodu • Pozwal aj ąnaanal i z ęs t osuwywoł ań,nawetw przypadku zoptymalizowanego kodu • Naj cz ęści ejpr z echowywanesąwpl i kach PDB (Program DataBase) • Bi bl i ot ekaDBGHELP. DLLuł at wi a wykorzystanie plików PDB. Minidump •Pozwal aodzy skaćst anapl i kacj i z innego komputera •Uży t ecznypr zyanal i zi ebł ędów powst ał y chukl i ent a •Wsparcie ze strony DBGHELP.DLL – funkcja MiniDumpWriteDump, MiniDumpReadDump Rodzaje minidumpów •Podstawowy –st osywywoł ań •Z segmentami danych –st ał ew kodzie •Zcał ąpami ęci ą •Z informacjami o uchwytach •Przefiltrowany –usuwanesą prywatne informacje •Inne (enumeracja MINIDUMP_TYPE) Wsparcie platformy Linux Bł ędy • Oops Jaksobi er adzi ć ? • • • • • • • Ni er obi ćbł ędów Printk Pliki Core (core dump) Ptrace GDB KGDB UML Wsparcie platformy Linux Oops Czym jest Oops? Gdyj ądr owy kr y j ei st ni eni epoważ ny chni epr awi dł owoś c iwy woł y wanyj est„ oops ” . Maondwi egł ównef unkc j e: • Pokazaćuży t ecz nei nf or mac j e,kt ór emogąby ćuż y t edozdi agnoz owani a przyczyny problemu. • Spr óbowaćz apobi ecbyj ądr oni ewy mknęł os i ęspodkont r ol iibyni e spowodował oduż opoważ ni ej szy chkonsekwencj i( j akusz kodz eni edany chczy nawetspr zęt u) . • Oopsmoż et wor z y ćr apor tdopl i ku( Oops. f i l e) ,kt ór egoogl ądani ewspomaga program ksymoops Wsparcie platformy Linux Pr zy kł ad Unable to handle kernel NULL pointer dereference at virtual address 00000014 *pde = 00000000 Oops: 0000 CPU: 0 EIP: 0010:[<c017d558>] EFLAGS: 00210213 eax: 00000000 ebx: c6155c6c ecx: 00000038 edx: 00000000 esi: c672f000 edi: c672f07c ebp: 00000004 esp: c6155b0c ds: 0018 es: 0018 ss: 0018 Process tar (pid: 2293, stackpage=c6155000) Stack: c672f000 c672f07c 00000000 00000038 00000060 00000000 c6d7d2a0 c6c79018 00000001 c6155c6c 00000000 c6d7d2a0 c017eb4f c6155c6c 00000000 00000098 c017fc44 c672f000 00000084 00001020 00001000 c7129028 00000038 00000069 Call Trace: [<c017eb4f>] [<c017fc44>] [<c0180115>] [<c018a1c8>] [<c017bb3a>] [<c018738f>] [<c0177a13>] [<d0871044>] [<c0178274>] [<c0142e36>] [<c013c75f>] [<c013c7f8>] [<c0108f77>] [<c010002b>] Code: 8b 40 14 ff d0 89 c2 8b 06 83 c4 10 01 c2 89 16 8b 83 8c 01 Wsparcie platformy Linux Pr zy kł ad Jak widać na poprzednim przykładzie, uzyskujemy następujące informacje: Krótka informacja o przyczynie oopsa Numer oopsa Ustawienie flag procesora Zawartość głównych rejestrów Nazwę procesu, który spowodował oopsa Kilkanaście ostatnich ramek stosu Ślad i kod po którym nastąpił oops Wsparcie platformy Linux Pliki Core • Pl i kc or e( cor edump)t wor z onyj es twwy ni kuni epr awi dł owegodz i ał ani a programu, lub wykonania niedozwolonej operacji • W pl i kut y mz api s anyzost aj est anpami ęc iwmomenci ewy konani a niedozwolonej operacji (plus informacje dla debugera) • W Li nuksi emoż naogr ani czy ćmaksy mal nąwi el kośćpl i kuc or e( l i mi tc or edump 10240) • Ty pybł ędów: • • • • • • BusEr r or( ni ez godnościt y pów,bł ędyI / O,dos t ępdoni ei st ni ej ący chur z ądzeń) Memor yFaul t( bł ędydost ępudopami ęci ,z akr esy ,nul lpoi nt er ,z ł er ekur encj e) I OTTr ap/BPTTr ap( puł apki ( Tr ap)gener owanepr z ezpr oc esor ) Floating Exception (dzielenie przez zero, konwersje typów) Segment at i onFaul t( nar usz eni esegment ówpami ęci ) Illegal Instruction (bezsensowne (zdaniem procesora) i nielegalne instrukcje) Wsparcie platformy – Linux –PRINTK kernel/printk.c • Jestf unkcj ą,kt ór apowi nnadaćwy woł aćsi ęz dowolnego kontekstu • Wy pi suj edopl i kul ogówbądźnakonsol ęi nf or mac j ę pr z ekaz anąj akoar gument • Jestpr ost awuży ci u • Dz i ał awt r y bi ej ądr a • Ni euży wapośr edni ków • Pr óbuj ez doby ćdost ępdokonsol i ( semaf or )i wy pi sać komuni kat ,agdyt osi ęni eudaj eit akumi esz cz agona końcubuf or a Wsparcie platformy – Linux –PRINTK kernel/printk.c Funkcj apr i t nkpos i adadomyśl ni e8„ poz i omów”komuni kat ów( odnaj mni ejważnego) : • • • • • • • • 7 (KERN_DEBUG) –komuni kat ycz ęst ouży wanepr zyr ozwi j ani uj ądr a 6 (KERN_INFO) –informacje 5 (KERN_NOTICE) –istotne notatki 4 (KERN_WARNING) –ost r zeż eni a 3 (KERN_ERR) –bł ędysy s t emu 2 (KERN_CRIT) –bł ędykr y t y cz ne 1 (KERN_ALERT) –bł ędyoznacz eni ual ar mowy m 0 (KERN_EMERG) –sytuacje awaryjne Wsparcie platformy – Linux –PTRACE • Jestf unkc j ąsy st emowąumoż l i wi aj ącąśl edz eni epr ocesów • Umoż l i wi awst awi ani ebr eak poi nt ’ ówiz at r z y my wani e pr ocesuśl edz onegopr z ezpr ocesśl edz ący( or aznp.z mi anę r ej es t r ówpr ocesuśl edz onego) • Umoż l i wi apr z echwy t ywani es y gnał ówpr z ezpr ocesś l edz ąc y ( pr z edwy konani em sy gnał uj ądr os pr awdz af l agęśl edz eni ai pr z ekaz uj est er owani edopr oc esuśl edz ącego) • Moż eby ćuż y t adopodł ącz eni asi ędodz i ał aj ącegopr ocesu • bądź( pr z ypomocywai t ,f or ki ex ec)oj ci ecmoż eśl edz i ć swoj edz i ec ko,kt ór es amoz gł osi ł oc hęćby ci aś l edz ony m Danypr oc esmoż eby ćśl edz onyt y l kopr z ezj edenpr oces. Wsparcie platformy – Linux –PTRACE I nf or macj ęoś l edzeni upr z ec howuj ez mi ennapt r ac ewt ask_st r uct • linux/sched.h #def i nePT_PTRACED 0x 00000001/ / i nf or mac j awt ask _s t r uc toby c i uś l edz ony m struct task_struct { ... unsigned long ptrace; } pr zyś l edz eni uz mi eni anyj estakt ual nyr odz i cpr oces uś l edz onego kernel/ptrace.c 56 int ptrace_attach(struct task_struct *task) ... 81 102 int ptrace_detach(struct task_struct *child, unsigned int data) ... task->ptrace |= PT_PTRACED; ... 111 child->ptrace = 0; ... 88 REMOVE_LINKS(task); 89 task->p_pptr = current; 90 SET_LINKS(task); 114 REMOVE_LINKS(child); 115 child->p_pptr = child->p_opptr; 116 SET_LINKS(child); Wsparcie platformy – Linux - STRACE • St r acet onar zędz i ebadaj ącei nt er akcj epr ogr amuzj ądr em Li nuksa • Uruchomienie strace nazwa_programu wykonuje nazwa_programu, wypi suj ef unkcj esyst emowewywoł ywanepr zezpr ocesor azsygnał y j aki edopr ocesudot ar ł y • Li ni ewyj ści azawi er aj ąnaz węwywoł ani asyst emowego,par amet r yor az war t ośćz wr óconąnp. [mk209470@violet10 debug]$ strace cat /dev/null execve("/bin/cat", ["cat", "/dev/null"], [/* 46 vars */]) = 0 ... close(3) = 0 open("/lib/libc.so.6", O_RDONLY) = 3 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0pQ\1\000"..., 512) = 512 ... open("/dev/null", O_RDONLY|O_LARGEFILE) = 3 fstat64(3, {st_mode=S_IFCHR|0666, st_rdev=makedev(1, 3), ...}) = 0 read(3, "", 4096) = 0 close(3) = 0 close(1) = 0 exit_group(0) = ? Wsparcie platformy – Linux - GDB GNU Project Debugger –pozwala na: • Uruchomienie programu wraz z podaniem mu odpowiednich argumentów • Zat r z y mani edz i ał ani apr ogr amuwokr eś l ony m mi ej scu • Sprawdzenie parametrów programu na danym etapie • Zmi anęni ekt ór y chpar amet r ówwcz asi edz i ał ani apr ogr amu • Tworzenie plików Core z programu • Anal i z ęut wor z ony chpl i kówCor e • Pr z echwy t ywani eiobsł ugęsy gnał ówwy sy ł any chdopr ogr amu śl edz onego • Pr z egl ądani eiobs ł ugęwąt kówpr ocesu Wsparcie platformy – Linux - GDB GDB –Jakur uchomi ć • Kompi l uj emypr ogr am zopcj ądoł ącz ani asy mbol i (gcc –g program.c –o program) • Ur uchami amyśl edz eni epr ogr amupopr z ezGDB (gdb program) • Wstawiamy breakpointy (na numer lini, adres szesnastkowy, bądźnaz węf unk cj i ) (break 12, break *0x001573ca, break printf) • Uruchamiamy program (run) Wsparcie platformy – Linux - GDB Pr ogr am z at r z y masi ęnanaj bl i ż sz y m ust awi ony m br eakpoi nt ’ ci e Moż emymi ędz yi nny mi : • Obej r z ećz awar t oś ćz mi enny c h,r ej est r ów (print nazwa_zmiennej, print $eax) • Zmi eni ćz awar t ośćz mi enny c h,r ej est r ów( set$eax =1) • Obej r z ećz awar t oś ćr amekst osu( bac kt r ace) • Zdez asembl owaćf unkc j ę( di s aspr i nt f ) • Spr awdz aćadr esyl i ni( i nf ol i ne15) • Wy pi saćk odź r ódł owysy mbol u( l i stmai n) • Wz nowi ć,z at r z y maćpr ogr am ( nex t10,st op) Wsparcie platformy – Linux - KGDB • KGDBni ej estgr af i cz nąnakł adkąnaGDB( j estni ąXXGDB) • Jestdebuger em podobny m doGDB,al epoz wal adebugować Jądr oLi nuk sa • Umoż l i wi am. i n.wst awi ani ebr eakpoi nt ’ ówdoj ądr a, uruchamianie go krok po kroku oraz obserwowanie zmiennych • GDBdz i ał al okal ni e • KGDBwy magadopr acydwóc hkomput er ówpoł ącz ony ch ł ącz em sz er egowy m • Naj edny mk omput er z eur uc hami amydebugowanej ądr o • Na drugim z nich odpalamy debuger • Tocz onesąpr acenadkont r ol ąni epopr z ezł ącz esz er egowe,a popr z ezsi ećet her net Wsparcie platformy – Linux - KGDB • KGDBdl akomput er adebugowanegodost ępnej estpopr z ez pat c hnaj ądr oLi nuksa • Pr z yur uchami ani unat est owany m komput er z e,j ądr oz acz ek ana nawi ąz ani epoł ącz eni azmasz y nyt est uj ącej • Moż l i wej estt akż edebugowani emoduł ów,pr z ycz y m nal eż yj e kompi l owaćzopcj ą–g dla kompilatora gcc • Ładowani emoduł ównamasz y ni et est owanej odby wasi ę standardowo (insmod/ modprobe) • Moż nat akż ez ał adowaćmodułnamasz y ni et est uj ąc ej ( posł uguj ącsi ędost ar cz ony m skr y pt em) Wsparcie platformy – Linux - KGDB • Namasz y ni et est uj ąc ejur uchami amydebugerGDB • Łącz y mysi ęzmasz y nąt est owanąpopr z ezpor tsz er egowy (target remote /dev/ttyS1) • Pr z ekaz uj emydomasz y nyt es t owanejchęćz ał adowani aj ądr a (continnue) • Moż emyuż ywaćGDBpodobni ej akdl az wy kł egopr ogr amu: - pr zer y waćpr acęj ądr awdowol ny m momenci e( ct r l +c) - ust awi aćbr eakpoi nt ’ y - odcz y t ywaćzawar t oś ćz mi enny chir ej es t r ów - odcz y t ywaćst os - odcz y t ywaći nf or macj ęowąt kachj ądr a Wsparcie platformy – Linux - UML • UML, czyli User-Mode-Li nuxt oj ądr our uchami anewpr z est r z eni uż y t kowni kaj akz wy kł ypr ogr am • UMLpr z y pomi namasz y nęwi r t ual ną • Posi adawł asnyni ez al eż nys c hedul eri sy st em pami ęc iwi r t ual nej • Moż eby ć( odni edawna)ur uc hami anepodsamy m sobą • Ws pół pr acuj em. i n. .zur z ądz eni amibl ok owy mi ,konsol ami , por t ami ,si eci ą,dź wi ęki em,ur z ądz eni amiUSB,ur z ądz eni ami PCI • Ws pi er awi el opr oc esor owość( SMP) • Wy magaspecj al nejk ompi l acj i ( t z n.ni eur uchami amyz wy kł ego j ądr awt r y bi eUML,al ekompi l uj emyj ądr oUML,aur uchami amy j akz wy kł ypr ogr am) Profile'owanie •Opt y mal i zacj awy daj ności •Opi er asi ęnapowi ązani u fragmentów kodu programu ze statystykami wykorzystania zasobów •Zazwyczaj korzysta z instrumentacji kodu Instrumentacja kodu – podej ści a •Ingerencja w niezoptymalizowany kod assemblerowy •Wy kor zy st ani emożl i wości kompi l at or a,np.pr zeł ąc zni ków/ Gh /GH kompilatora Visual C++ •Wykorzystanie Profiling API dla kodu platformy .NET .NET Profiling API • Poz wal amoni t or ować: – – – – – – – – – – Ur uchomi eni e/ Zakończ eni eCLR,Domenapl i kacj i Zał adowani e/ Wy ł adowani eZes t awów,Moduł ów,Kl as Aspekt yz wi ąz anezkodem nat y wny m,COM Dz i ał al nośćJ I Tt er a Dz i ał al nośćGar bageCol l ec t or a Wchodzenie/Opuszczanie metod Obi ekt ys t er t yz ar z ądz anej Wy j ąt ki Wąt ki Wykorzystanie Remotingu • Funkcj onal nośćudost ępni anaj estpr z ezi nt er f ej s ICorProfilerInfo Inne techniki oraz nar zędzi a DLL Injection •Techni k apozwal aur uchomi ćk odwj uż dz i ał aj ący m pr oc es i e •Uruchamiany jest CreateRemoteThread zews k aźni k i em naf unkc j ęLoadLi br ar y , copowoduj ez ał adowani ews kaz anej biblioteki •W czas i eł adowani abi bl i ot ekiur uchamany jest DllMain, w którym wykonujemy nasz kod Fault Injection •Testowanie programu w warunkach ekstremalnych •Symulowanie wszelkiego rodzaju bł ędów •Umożl i wi apr zedewszy st ki m znal ezi eni ebł ędówwkodzi eobsł ugi bł ędów •Pr zy kł ad:Hol odeck Wykrywanie zakl eszczeń • Potrzebne informacje na temat zakleszczenia: i dent y f i k at or yz akl esz cz ony chwąt ków,obi ekt y sy nchr oni z uj ące,f unkc j aWI NAPIpowoduj ąca zakleszczenie wraz z parametrami • Wy kor z y st uj et echni kępodmi anyadr es ów f unkcj isy st emowy chzwi ąz any chz sy nchr oni z acj ąwt abl i cyI AT( i mpor taddr ess tables) Application Verifier • Testuje: – – – – – – – Wykorzystanie niebezpiecznego API Wy j ąt ki –czy aplikacja nie "zamiata pod dywan" Uchwyty Sterta Blokady Pami ęć Wykorzystanie Thread Local Storage • Pot r af i sy mul ować: – Brak zasobów – Pr acępr zyogr ani cz ony c hpr zy wi l ej ac h • Wykorzystuje debuger, np. WinDBG • Wykorzystywany w testach platformowych np. Designed for Windows XP Analiza statyczna kodu •Anal i z uj ek odźr ódł owyal bok odpoś r edni •Wymusza stosowanie pewnych standardów •Wy kr y wapot enc j al nebł ędy •Możl i wośćdodawani awł as nyc hr eguł •PREfast dla kodu C/C++ •FXCop dla kodu .NET Pytania? Bibliografia • John Robbins - Debugging Applications for Microsoft .NET and Microsoft Windows • Microsoft Developer Network Library – http://msdn.microsoft.com/library/ • Mark Russinovich, Bryce Cogswell –SysInternals – http://www.sysinternals.com/ • http://kgdb.linsyssoft.com • Źr ódł aLi nuksa2. 4. 31 • http://www.urbanmyth.org/linux/ Dzi ękuj emyza uwagę