Kaip veikia operacinės sistemos branduolio derinimo priemonė. Kaip veikia derinimo priemonė „Windows 7“ branduolio derinimo režimo vykdymo laikas

Įvadas

1. Windows derintuvų tipai

2. Vartotojo režimo derinimo priemonės

3. Branduolio režimo derinimo priemonės

3.1 WDEB386 derinimo priemonė

3.2 Debugger I386KD

3.3 Win DBG Debugger

3.4 SoftICE derinimo priemonė

4. Bendras klausimas derinimas

5. Automatinis paleidimas programos derinimo priemonėje

5.1 Pertraukti sparčiuosius klavišus

Išvada

Literatūra

Įvadas

Išmokti, kaip veikia programinės įrangos įrankiai, yra sunkiausia derinimo proceso dalis. Tik suprasdami įrankių galimybes ir apribojimus galite gauti daugiau iš jų ir praleisti mažiau laiko derindami. Apskritai derinimo priemonės yra labai naudingos, tačiau gali sukelti gana subtilių problemų, kurios veda programuotoją į aklavietę. Šiame skyriuje parodyta, kas yra derintuvas ir kaip įvairūs derintuvai veikia Win32 operacinėse sistemose (Microsoft 32 bitų Windows operacinėse sistemose).

Tuo pačiu metu mes sutelksime dėmesį į tas ypatingas derinimo priemonių savybes, kurios įjungiamos, kai pastarųjų valdomas koks nors programinės įrangos procesas. Taip pat paaiškinama, kaip galite patobulinti tam tikras 32 bitų „Windows“ operacinių sistemų funkcijas, kad būtų lengviau derinti. Bus pristatyti du patentuoti derintuvai, kurių šaltinio kodą rasite pridedamame kompaktiniame diske. Pirmasis (MinDBG) turi pakankamai galimybių, kad būtų vadinamas derintuvu. Antrasis (WDBG) yra derinimo priemonės pavyzdys Microsoft Windows, kuri daro beveik viską, ką daro tikras sistemos derintuvas, įskaitant manipuliavimą simbolių lentelėmis, lūžio taškų tvarkymą, išardiklio kodo generavimą ir derinimą su grafine vartotojo sąsaja (GUI). Aptardami WDBG, parodysime, kaip veikia lūžio taškai, ir aptarsime, kokie yra įvairūs simbolių failai.

Prieš pereidami prie pagrindinės šio skyriaus medžiagos, apibrėžkime du standartinius terminus, kurie bus dažnai naudojami šioje knygoje: pagrindinis (arba bazinis) deriklis (derintuvas) ir antraeilis deriklis (debuggee). Paprastais žodžiais tariant, pagrindinis derintuvas yra procesas, galintis derinti ir valdyti kitą procesą, o pagalbinis derintuvas yra procesas, vykdomas po pagrindiniu derintuvu. Kai kuriose operacinėse sistemose pagrindinis derintuvas vadinamas pirminiu procesu, o pagalbinis derintuvas – antriniu procesu.

Debugger (debugger, angliškas debugger from bug) – kompiuterio programa, skirtas rasti klaidų kitose programose, operacinės sistemos branduoliuose, SQL užklausose ir kitų tipų koduose. Derintuvas leidžia atsekti, stebėti, nustatyti arba keisti kintamųjų reikšmes, kai kodas veikia, nustatyti ir pašalinti lūžio taškus ar stabdymo sąlygas ir dar daugiau.

Dauguma kūrėjų yra labiau susipažinę su vartotojo režimo derinimo priemonėmis. Nenuostabu, kad šio režimo derintuvai yra skirti derinti vartotojo režimo programas. Puikus vartotojo režimo derinimo pavyzdys yra „Microsoft Visual C++“ derinimo priemonė. Branduolio režimo derintuvai, kaip rodo jų pavadinimas, yra derintuvai, leidžiantys derinti branduolį Operacinė sistema. Jas pirmiausia naudoja tie, kurie rašo (ir, žinoma, derina) įrenginių tvarkykles.

2. Vartotojo režimo derinimo priemonės

Vartotojo režimo derintuvai yra skirti derinti bet kurią vartotojo režimu veikiančią programą, įskaitant visas GUI programas, taip pat kai kurias ne tokias. reguliarios programos, kaip ir Windows 2000 paslaugos. Paprastai tokio tipo derintuvai palaiko grafinę vartotojo sąsają (GUI1). Pagrindinis ženklas tokie derintojai – jie naudoja Win32 derinimo programų programavimo sąsają (debug API). Kadangi operacinė sistema pavaldų derintuvą pažymi kaip „veikiantį specialiuoju režimu“, galite naudoti „IsDebuggerPresent“ API funkciją, kad sužinotumėte, ar jūsų procesas veikia derintuvo režimu.

Teikiant „Win32“ derinimo API, yra numanomas susitarimas: kai procesas vykdomas naudojant derinimo API (taigi paverčia jį vergu), pagrindinis derinimo įrankis negali atsijungti nuo to proceso. Šis simbiozinis ryšys reiškia, kad išjungus pagrindinį derintuvą, išeina ir pagalbinis derintuvas. Pagrindinis derintuvas derina tik pagalbinį derintuvą ir visus jo sukurtus procesus (jei pagrindinis derintuvas palaiko antrinius procesus).

GUI – grafinė vartotojo sąsaja. - Per.

Vertintoms kalboms ir vykdymo laiko sistemoms, kurios naudoja Virtuali mašina, visą derinimo aplinką užtikrina pačios virtualios mašinos, jos nenaudoja Win32 derinimo API. Kai kurie šių tipų aplinkų pavyzdžiai yra „Microsoft“ arba „Sun“ „Java“ virtualios mašinos (JVM), „Microsoft“ žiniatinklio programų scenarijų aplinka ir „Microsoft Visual Basic“ p-kodo interpretatorius.

Debugger branduolio operacinė sistema

„Visual Basic“ derinimą apžvelgsime 7 skyriuje, tačiau žinokite, kad sąsaja p-kodo vizualinis Pagrindinis nėra dokumentuotas. Mes nesigilinsime į „Java“ ir scenarijų derinimo sąsajas; šios temos nepatenka į šios knygos taikymo sritį. Daugiau informacijos apie „Microsoft JVM“ derinimą ir profiliavimą rasite „Java“ programų derinimas ir profiliavimas MSDN. Tokių sąsajų rinkinys yra labai turtingas ir įvairus ir leidžia visiškai valdyti JVM veikimą. Norėdami gauti informacijos apie scenarijaus derinimo priemonės rašymą, žr. MSDN temą „Aktyvaus scenarijaus derinimo API objektai“. Kaip ir JVM, scenarijaus derinimo objektai suteikia turtingą sąsają scenarijui pasiekti ir dokumentuoti.

Stebėtinai daug programų naudoja Win32 derinimo API. Tai apima: Visual C++ derinimo priemonę, kuri išsamiai aprašyta 5 ir 6 skyriuose; „Windows“ derintuvas (WinDBG), kuris bus aptartas kitame skyriuje (apie branduolio režimo derintuvą); BoundsChecker programa iš Compuware NuMega; Platformos SDK HeapWalker programa; Platformos SDK priklauso programa; „Borland Delphi“ ir „C++ Builder“ derintuvai, taip pat „NT Symbolic Debugger“ (NTSD). Esu tikras, kad yra daug daugiau.

3. Branduolio režimo derinimo priemonės

Branduolio režimo derintuvai yra tarp procesoriaus ir operacinės sistemos. Tai reiškia, kad sustabdžius branduolio režimo derintuvą, operacinė sistema taip pat visiškai sustoja. Nesunku suprasti, kad operacinės sistemos sustabdymas yra naudingas, kai dirbate su laikmačiais ir laiko nustatymo problemomis. Tačiau, išskyrus vieną derintuvą, kuris bus aptartas toliau (šio skyriaus skyriuje „SoftlCE Debugger“), negalite derinti vartotojo režimo kodo naudodami branduolio režimo derinimo priemones.

Branduolio režimo derintuvų nėra daug. Štai keletas iš jų: „Windows 80386 Debugger“ (WDEB386), „Bernel Debugger“ (1386KD), „WinDBG“ ir „SoftlCE“. Kiekvienas iš šių derinimo priemonių yra trumpai aprašytas tolesniuose skyriuose.

3.1 WDEB386 derinimo priemonė

WDEB386 yra „Windows 98“ branduolio režimo derinimo priemonė, platinama kaip platformos SDK dalis. Šis derinimo įrankis naudingas tik kūrėjams, rašantiems tvarkykles virtualūs įrenginiai Windows 98 (VxD). Kaip ir dauguma branduolio režimo derintuvų, skirtų „Windows“ operacinėms sistemoms, WDEB386 derintuvui veikti reikia dviejų įrenginių ir nulinio modemo kabelio. Reikalingos dvi mašinos, nes tiksliniame kompiuteryje veikia derinimo priemonės dalis ribotas priėjimasį savo aparatinę įrangą, kad ji siųstų išvestį ir gautų komandas iš kito įrenginio.

WDEB386 derintuvas turi įdomią istoriją. Jis prasidėjo kaip vidinis „Microsoft“ fono įrankis „Windows 3.0“ eroje. Jį buvo sunku naudoti ir nebuvo pakankamai derinimo palaikymo pirminis kodas ir kitų malonių savybių, kuriomis mus sugadino Visual C++ ir Visual Basic derintuvai.

„Dot“ (DOT) komandos yra svarbiausia WDEB386 savybė. Naudojant pertraukimą INT 41, WDEB386 galima išplėsti, kad būtų pridėtos komandos. Šis išplečiamumas leidžia VxD tvarkyklių autoriams sukurti pasirinktines derinimo komandas, kurios suteikia jiems lengvą prieigą prie informacijos savo virtualiuose įrenginiuose. „Windows 98“ derinimo versija palaiko daugybę DOT komandų, kurios leidžia bet kuriuo derinimo proceso metu stebėti tikslią operacinės sistemos būseną.

3.2 Debugger I386KD

„Windows 2000“ skiriasi nuo „Windows 98“ tuo, kad tikroji branduolio režimo derinimo priemonė yra NTOSKRNL dalis. EXE - pagrindinio veikiančio branduolio failas Windows sistemos 2000. Šį derintuvą galima įsigyti tiek nemokamos (išleistos), tiek išbandytos (derinimo) operacinės sistemos konfigūracijose. Norėdami įjungti branduolio režimo derinimą, nustatykite įkrovos įkrovos parinktį /DEBUG į BOOT. INI ir papildomai įkrovos įkrovos parinktis /DEBUGPORT, jei reikia nustatyti branduolio režimo derinimo prievadą į kitą reikšmę nei numatyta (COM1). I386KD veikia savo kompiuteryje ir bendrauja su Windows mašina 2000 per nulinį modemo kabelį.

Branduolio režimo derinimo priemonė NTOSKRNL. EXE valdo tik centrinį procesorių, kad būtų galima derinti operacinę sistemą. Didžioji dalis derinimo darbų – simbolių apdorojimas, išplėsti lūžio taškai ir išmontavimas – atliekami 1386KD pusėje. Vienas „Windows“ laikas NT 4 įrenginio tvarkyklės rinkinys (DDK) dokumentavo nulinio modemo kabelio protokolą. Tačiau „Microsoft“ to nebedokumentuoja.

1386KD galia akivaizdi, kai žiūrite į visas komandas, kurias jis siūlo pasiekti vidinei Windows būsena 2000. Žinios apie tai, kaip įrenginių tvarkyklės veikia Windows 2000, padės programuotojui stebėti daugelio komandų išvestį. Nepaisant visos galios, i386KD beveik niekada nenaudojamas, nes tai yra konsolinė programa, kurią labai varginantis naudoti atliekant pradinį derinimą.

3.3 Win DBG Debugger

WinDBG yra derinimo priemonė, kuri yra platformos SDK dalis. Taip pat galite atsisiųsti iš #"897008.files/image001.gif">

1 pav. GFLAGS programos išvestis. EXE

Sąrašas 4-1. Windows 2000 krūvos sunaikinimo pavyzdys

negalioja pagrindinis (negalioja)

HANDLE hHeap = HeapCreate (0, 128, 0);

// Paskirstykite atmintį 10 baitų blokui.

LPVOID pMem = HeapAlloc(hHeap, 0,10);

// Įrašykite 12 baitų į 10 baitų bloką (krūvos perpildymas).

memset (pMem, OxAC,

// Paskirkite naują 20 baitų bloką.

LPVOID pMem2 = HeapAlloc(hHeap, 0, 20);

// Į antrą bloką įrašyti 1 baitą.

char * pUnder = (char *) ((DWORD) pMem2 - 1);

// Atlaisvinkite pirmąjį bloką. Šis kreipimasis į HeapFree bus

// suaktyvina pertraukos tašką derinimo krūvos kode

// Operacinė sistema.

HeapFree(hHeap, 0, pMem);

// Atlaisvinkite antrą bloką. Atminkite, kad šis skambutis nebus

// pateikia klaidų pranešimus

HeapFree(hHeap, 0, pMem2);

// Atlaisvinkite manekeno bloką. Atminkite, kad šis skambutis nebus

// pateikia klaidų pranešimus

Jei pažymėsite tuos pačius langelius, kaip ir 4.1 pav., ir pakartosite HEAPER vykdymą. EXE, gausite šią, išsamesnę išvestį:

PAGEHEAP: procesas 0x490 sukūrė derinimo krūvą 00430000

(vėliavos 0xl, 50, 25, 0, 0): procesas 0x490 sukurta derinimo krūva 00CF0000

(žymės Oxl, 50, 25, 0, - 0): procesas 0x490 sukurta derinimo krūva 01600000

(žymės Oxl, 50, 25, 0, 0): aptiktas uodegos užpildo pažeidimas: 0x01606FF0dydis 0x0000000dydis 0x00000010at Ox01606FFA: bandymas nurodyti bloką, kuris nėra priskirtas

Sąrašo turinys paaiškinamas vėliavėlių pavadinimais, nustatytais Global Flags skydelyje.

GFLAGS programos aptarimas. EXE, noriu atkreipti dėmesį į vieną labai naudingą parinktį – Show Loader Snaps. Jei pažymėsite šį langelį ir paleisite programą, pamatysite tai, kas vadinama programos momentine nuotrauka, kuri rodo, kur Windows 2000 įkelia DLL failus ir kaip pradeda organizuoti importavimą. Jei reikia tiksliai pamatyti, ką Windows 2000 įkrovos įkroviklis daro įkeldamas programą (ypač jei joje kyla problemų), šios parinkties įjungimas gali būti labai naudingas veiksmas. Norėdami gauti daugiau informacijos apie įkrovos įkrovos momentines nuotraukas, žr. Matto Pietreko stulpelį „Po gaubtu“ 1999 m. rugsėjo mėn. „Microsoft Systems Journal“ leidinyje.

5. Debugeryje automatiškai paleiskite programas

Sunkiausia derinti programas, kurias paleidžia kitas procesas. Ši kategorija yra užpulta „Windows“ paslaugos 2000 ir neprocesiniai COM serveriai (COM out-of-process serveriai). Norėdami priversti derinimo priemonę prijungti prie proceso, daugeliu atvejų galite naudoti DebugBreak API funkciją. Tačiau dviem atvejais ši funkcija neveiks. Pirma, kartais ji neveikia su Windows 2000 paslaugomis. Jei reikia derinti paslaugos paleidimą, iškvietus DebugBreak bus pridėtas derintuvas, tačiau tuo metu, kai derintuvas paleidžiamas, gali būti pasibaigęs paslaugos laikas ir Windows 2000 sustos. tai. Antra, DebugBreak neveiks, kai reikia derinti neprocesinį COM serverį. Jei iškviečiate DebugBreak, COM klaidų tvarkytojas užfiksuos pertraukos taško išimtį ir nutrauks COM serverį. Laimei, „Windows 2000“ leidžia nurodyti, kad programa turėtų būti paleista derinimo priemonėje. Ši savybė leidžia pradėti derinti nuo pat pirmosios instrukcijos. Tačiau prieš įjungdami šią ypatybę Windows 2000 paslaugai, įsitikinkite, kad paslauga sukonfigūruota bendrauti su darbuotoju Windows stalas 2000.

Ypatybę Run with Debugger galima įjungti dviem būdais. Paprasčiausias yra paleisti GFLAGS įrankį. EXE ir pasirinkite radijo mygtuką VaizdasFailas Galimybės(žr. 4.1 pav.). Įvedę į redaguojamą lauką I magasFailasvardas programos dvejetainio failo pavadinimo žymės langelis Derintuvas grupėje Vaizdas DerintuvasGalimybės) ir redaguojamame lauke, esančiame šalia šio žymimojo laukelio, įveskite visą derinimo priemonės kelią.

Daugiau sunkus kelias: reikia rankiniu būdu nustatyti reikiamus parametrus atitinkamose registro dalyse (naudojant RegEdit redaktorių). Under_LOCAL_MACHINE\PROGRAMINĖ ĮRANGA\Microsoft\Windows NTXDabartinė versija\Vaizdo plytelės vykdymo parinktys

sukurkite dalinį raktą, kurio pavadinimas yra toks pat kaip jūsų programos failo pavadinimas. Pavyzdžiui, jei programos pavadinimas yra FOO. EXE, tada dalinio registro rakto pavadinimas taip pat yra FOO. EXE. Šiame daliniame rakte sukurkite naują eilutės parametrą, pavadintą Debugger. Dialogo lange Keisti eilutės parametras Naudodami klaviatūrą įveskite visą (įskaitant katalogo kelią) pasirinkto derintuvo failo pavadinimą. Jei nurodėte GFLAGS. EXE ir nustatykite kai kurias pasaulines parinktis, programos rakte pastebėsite eilutės reikšmę GiobaiFiag.

Dabar, kai paleidžiate programą, derinimo priemonė automatiškai įkeliama ir paleidžiama. Galimybės komandinė eilutė derintuvui taip pat gali būti nurodytas parametre Debugger eilutė (po derinimo programos pavadinimo). Pavyzdžiui, norėdami naudoti WinDBG derintuvą ir automatiškai pradėti derinimą, kai tik paleidžiama WinDBG, dialogo lange derinimo eilutės parametro keitimui reikia įvesti reikšmę d: \platform sdk\bin\windbg. ex-g.

5.1 Pertraukti sparčiuosius klavišus

Kartais reikia greitai pereiti į derintuvą. Jei derinate konsolės programas, tada klavišų paspaudimus +arba +bus padaryta speciali išimtis (pavadinta DBG_CONTROL_C). Ši išimtis nukreips jus tiesiai į derinimo priemonę ir leis pradėti derinti.

Naudinga „Windows 2000“ ir „Windows NT 4“ savybė yra galimybė bet kada pereiti prie derinimo priemonės, taip pat ir GUI programose. Vykdydami derintuvą, paspauskite klavišą rezultatai (pagal numatytuosius nustatymus) iškviečiant funkciją DebugBreak. Įdomus šio klavišo valdymo aspektas yra tas, kad net jei naudojate jį kaip greitintuvą ar kitaip tvarkote šio klavišo klaviatūros pranešimus, jis vis tiek prijungs jus prie derinimo priemonės.

„Windows NT 4“ sistemoje spartusis klavišas pertraukia priskirtas pagal numatytuosius nustatymus, tačiau sistemoje Windows 2000 galite nustatyti, kurį klavišą naudoti šiems tikslams. Kodėl registro skiltyje

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\AeDebug

Nustatykite parametrą userDebuggerHotKey į rakto kodą (VK_*). Pavyzdžiui, naudoti raktą Norėdami prisijungti prie derinimo priemonės, turėtumėte nustatyti UserDebuggerHotKey reikšmę į 0x91. Pakeitimai įsigalioja iš naujo paleidus kompiuterį.

Išvada

Apžvelgėme pagrindines derinimo ypatybes, jo tipus ir tipus, bendrą derinimo problemą, taip pat klaidas ir kaip jas aptikti.

Esami derintuvai vaidina svarbų vaidmenį kuriant programinę įrangą, kai ieškoma loginių klaidų, teikia platų įrankių spektrą, įskaitant šaltinio kodo palaikymą, programų vykdymo sekimą, dinaminės atminties modifikavimą ir kt. ir tt


Literatūra

1.. aspx?.aspx?id=553022>

2. https://ru. wikipedia.org/wiki/%D0%9E%D1%82%D0%BB%D0%B0%D0%B4%D1%87%D0%B8%D0%BA

http://bourabai. kz/alg/debug4. htm

4. Kostyukhin K. – REALIOJI LAIKO SISTEMŲ DERINIMAS. Apžvalga

Terminas „branduolio derinimas“ reiškia branduolio vidinės duomenų struktūros tyrimą ir (arba) nuoseklų branduolio funkcijų sekimą. Šis derinimas yra labai naudingas būdas ištirti vidų „Windows“ įrenginiai, nes leidžia rodyti vidinę sistemos informaciją, kurios negalima naudoti jokiomis kitomis priemonėmis, ir suteikia aiškų vaizdą apie kodo eigą branduolyje.

Prieš svarstydami įvairių būdų branduolio derinimas, panagrinėkime rinkinį failų, kurių reikės norint atlikti bet kokį tokį derinimą.

Branduolio derinimo simboliai

Simbolių failuose yra funkcijų ir kintamųjų pavadinimai, taip pat duomenų struktūrų dizainas ir formatas. Juos generuoja susiejimo programa, o derintojai juos naudoja, kad nurodytų šiuos pavadinimus ir rodytų juos derinimo seanso metu. Ši informacija paprastai nėra saugoma dvejetainiame kode, nes jos nereikia, kai kodas vykdomas. Tai reiškia, kad be jo dvejetainis kodas yra mažesnis ir veikia greičiau. Tačiau tai taip pat reiškia, kad derindami turite užtikrinti, kad derintuvas turėtų prieigą prie simbolių failų, susijusių su dvejetainiais vaizdais, nurodytais derinimo sesijos metu.

Norėdami naudoti bet kurį branduolio režimo derinimo įrankį, kad ištirtumėte Windows branduolio duomenų struktūros vidines dalis (procesų sąrašą, gijų blokus, įkeltų tvarkyklių sąrašą, atminties naudojimo informaciją ir kt.), teisingus failus simboliai ir bent jau branduolio dvejetainio vaizdo simbolių failas – Ntoskrnl.exe. Simbolių lentelės failai turi atitikti dvejetainio vaizdo, iš kurio jie buvo išgauti, versiją. Pavyzdžiui, jei įdiegta Windows paketas Pakeitimų paketas arba koks nors pataisas, atnaujinantis branduolį, reikia atitinkamai atnaujinti simbolių failus.

Atsisiųskite ir įdiekite simbolius skirtingos versijos„Windows“ nėra sunku, tačiau atnaujinti simbolius taisymui ne visada įmanoma. Paprasčiausias būdas gauti derinimui reikalingą simbolių versiją yra susisiekti su specialiai tam skirtu Microsoft simbolių serveriu, naudojant specialią derinimo priemonėje nurodyto simbolio kelio sintaksę. Pavyzdžiui, dėl šio simbolio kelio derinimo įrankiai atsisiunčia simbolius iš internetinio simbolių serverio ir išsaugo vietinę kopiją c:\symbols:srv*c:\symbols*http://msdl.microsoft.com/download/ simboliai

Išsamias simbolių serverio naudojimo instrukcijas rasite derinimo įrankių pagalbos faile arba internete adresu http://msdn.microsoft.com/en-us/windows/hardware/gg462988.aspx.

chPF OELPFPTSCHE KHLBBOYS RP TBVPFE U PFMBDLPK SDTB U BCHBTYKOSHNY DBNRBNY RBNSFY. lBL RTBCHYMP, CHBN OHTSOP VKDEF ЪBDBFSH PDOP YЪ KHUFTPKUFCH RPDLBYULY, RETEYUYUMEOOSCHI CH ZHBKME /etc/fstab . uvtpu pvtbpch RBNSFY O KHUFTPKUFCHB, OE SCHMSAEYEUS KHUFTPKUFCHBNY RPDLBYULY, OBRTYNET, MEOFSHCH, CH DBOOSCHK NPNEOF OE RPDDETSYCHBAFUS.

Pastaba: yURPMSHHKFE LPNBODH dumponas (8) DMS KHLBBOYS SDTH NEUFB, ZDE OHTsOP UPITBOSFSH BCHBTYKOSHCHE DBNRSCH. rPUME OBUFTPKLY RP LPNBODE apsikeitimas (8) TBDEMB RPDLBYULY DPMTSOB VSHFSH CHSHCHBOB RTPZTBNNNB sąvartynas . pVSHYUOP LFP CHSHRPMOSEPHUS ЪBDBOYEN RETENOOOPK dumpdev CH ZHBKME rc.conf (5). еUMY ЪБДБOB ьФБ RATENEOOBS, FP RPUME UVPS RTY RETCHPK NOPZPRPMSHЪPCHBFEMSHULPK RETEЪBZTHЪLE VHDEF BCHFPNBFYUEULY ЪBRHEEOOB RTPZTBNNNB savecore (8). pOB UPITBOIF BCHBTYKOSHCHK DBNR SDTB CH LBFBMPZ, ЪBDBOOSCHK CH RETENEOOOPK dumpdir ZHBKMB rc.conf . rP KHNPMYUBOYA LBFBMPZPN DMS BCHBTYKOSCHI DBNRPCH SCHMSEFUS /var/crash .

mYVP CHSC NPTSEFE ЪBDBFSH KHUFTPKUFCHP DMS UVTPUB PVTBB RBNSFY SCHOP YUETE RBTBNEFT dump CH UFTPLE konfigūracija LPOZHYZHTBGYPOOPZP ZHBKMB CHBYEZP SDTB. fBLPK URPUPV YURPMSHЪPCHBFSH OE TELPNEODHEFUS Y PO DPMTSEO YURPMSHЪPCHBFSHUS, FPMSHLP EUMY CHSCH IPFYFE RPMKHYUBFSH BCHBTYKOSHCH PVTBYSH RBNSFY SDTB, LPTYFPВBCHBTHBTHBKTTYVPOPPE ЪLE.

Pastaba: dBMEE FETNYO gdb PYOBYUBEF PFMBDYUYL gdb , ЪBRHEEOOSCHK CH „TETSINE PFMBDLY SDTB“. RETEIPD CH LFPF TETSYN DPUFYZBEFUS ЪBRHULPN gdb U RBTBNEFTPN -k . h TETSYNE PFMBDLY SDTB gdb YЪNEOSEF UCHPЈ RTYZMBYEOYE APIE (kgdb) .

Patarimas: Eumi Chechi yurpmshhef FreeBSD Cetui 3 ymi tbooaa, Cheshchiki DPMTSOSH Cheshrpmeifsh Huyuye PFMBDPZP SDTB LPNBODPK STRIP, Hufbobchmychbfsh PFMSHYP PFMBDPUOP:

# cp branduolys kernel.debug # strip -g branduolys

bFPF YBZ OE FBL KhTS Y OEPVIPDYN, OP TELPNEODKHEN. (PhP FreeBSD 4th VPMEE RPJDOYI TEMYBI LFPF YBZ CHSHRPMOSEFUS BCHFPNBFYUEULY CH LPOGE RTPGEUUB RPUFTPEOOYS SDTB gamintojas PVSHYUOSCHN PVTBBPN, OVTTBCH make install .

ъBNEFSHFE, YuFP CH UFBTSHCHETUISI FreeBSD (DP 3.1, OE CHLMAYUBS LFPF TEMY), YURPMSHKHEFUS SDTB CH ZHTNBFE a.out, RPFPNH YI FBVMYGSH UYNCHPMPCH CH DMTSOSCH TBURPRBMBZFPSOPSHUS. u VPMSHYPK FBVMYGEK UYNCHPMPCH CH OE HUEYOOOPN PFMBDPUOPN SDTE LFP YЪMYYOSS FTBFB. rPUMEDOYE TEMYYSH FreeBSD YURPMSHJHAF SDTB CH ZHTNBFE ELF, ZHE LFP OE SCHMSEFUS RTPVMENPK.

eUMY CHSH FEUFYTHEFE OPCHPE SDTP, ULBTSEN, OBVYTBS YNS OPCHPZP SDTB CH RTYZMBYYEOYY UBZTHYUYLB, OP CHBN OHTSOP ЪBZTHTSBFSH Y TBZTHTSBFSH Y LTBPCPHMS O TBVPCHPPTHPPNHN, Y DTHZYN HOLGYPOYTPCHBOYA, ЪBZTHTSBKFE EZP FPMSHLP CH PDOPRPMSHЪPCHBFEMSHULPN TETSYNE RTY RPNPEY ZHMBZB -s , KHLBSCCHBENPZP RTY ЪBZTHЪLE , B ЪBFEN CHSHRPMOYFE FBLYE YBZY:

# fsck -p # mount -a -t ufs # kad jūsų /var/crash failų sistema būtų įrašoma # savecore -N /kernel.panikuotas /var/crash # išeiti # ...į kelių vartotojų

bFB RPUMEDPCHBFEMSHOPUFSH KHLBSCCHBEF RTPZTBNNE savecore (8) APIE YURPMSHЪPCHBOYE DTHZPZP SDTB DMS YЪCHMEYUEOYS UYNCHPMYUEULYI YNEO. YOBYUE POB VHDEF YURPMSHЪPCHBFSH SDTP, TBVPFBAEEE CH DBOOSHCHK NPNEOF Y, ULPTEE CHUEZP, OYUEZP OE UDEMBEF, RPFPNH YuFP BCBTYKOSHCHK PVTB RBSHHFUSFY YNCHPMSCH SDTB VHDFFUSFY YNCHPMSCH SDTB.

b FERETSH, RPUME UVTPUB BCHBTYKOPZP DBNRB, RETEKDYFE CH LBFBMPZ /sys/compile/WHATEVER Y ЪBRKHUFYFE LPNBODH gdb -k . yЪ RTPZTBNNSH gdb UDEMBKFE CHPF SFP:

Simbolio failas kernel.debug exec-file /var/crash/kernel.0 core-file /var/crash/vmcore.0 Y CHBMS - CHCH NPTSEFE PFMBTSYCHBFSH BCHBTYKOSHK DBNR, YURPMSHЪHS YUIPDOSCH FBLCEFPBEMBYu SDTB MAVPC DTHZPK RTPZTBNNPK.

chPF TsKHTOBM LPNBOD UEBOUB TBVPFSH gdb, YMMAUFTYTHAEIK bfh RTPGEDHTH. dMYOOSCH UFTPLY VSHMY TBPTCHBOSH DMS KHMHYUYEOYS YUYFBVEMSHOPUFY Y DMS KHDPVUFCHB UFTPLY VSHCHMY RTPOKHNETPCHBOSHCH. CHUE PUFBMSHOPE SCHMSEFUS FTBUUYTPCHLPK PYYVLY, TEBMSHOP CHPOYLOKHCHYEK PE CHTENS TBVPFSCH OBD DTBKCHETPN LPOUPMY pcvt.

1:Scenarijus pradėtas 1994 m. gruodžio 30 d., penktadienį, 23:15:22 sys/compile/URIAH/kernel ...atlikta. 5:IdlePTD 1f3000 6:panika: nes tu sakei! 7: dabartinė PCB esant 1e3f70 8: Nuskaitomi simboliai, skirti ../../i386/i386/machdep.c...atlikta. 9: (kgdb) kur 10:#0 įkrova (arghowto=256) (../../i386/i386/machdep.c, 767 eilutė) 11:#1 0xf0115159 panikoje () 12:#2 0xf01955bied (diediedied ) (../../i386/i386/machdep.c line 698) 13:#3 0xf010185e, esantis db_fncall () 14:#4 0xf0101586, esantis db_command (-266509132, -3 6, 1:07) 101711 db_command_loop () 16:#6 0xf01040a0, db_trap () 17:#7 0xf0192976 kdb_trap (12, 0, -272630436, -266743723) 18:#6 0xf01040a0 į db_trap () 18:#9 19ce60 colių trap_pfault ( ...) 20:#10 0xf019cb2f spąstuose (...) 21:#11 0xf01932a1 išimties atveju:calltrap () 22:#12 0xf0191503 cnopen (...) 23:#13 0xf4 in13o 0xf4 24: #14 0xf012d014 in vn_open () 25:#15 0xf012a183 in open () 26:#16 0xf019d4eb in syscall (...) 27: (kgdb) aukštyn 10 28: Skaitymas in/i.3/6 simboliais. /i386 /trap.c...atlikta. 29:#10 0xf019cb2f spąstuose (kadras=(tf_es = -260440048, tf_ds = 16, tf_\ 30:edi = 3072, tf_esi = -266445372, tf_ebp = -266445372, tf_ebp = -3:7_26:2 0396, t f_ebx = - 266427884, tf_edx = 12, tf_ecx = -266427884, tf\ 32:_eax = 64772224, tf_trapno = 12, tf_err = -272695296 = -272695296, tf_err = -272695296, -3:f 26646936 8, tf_flags = 66066, tf_esp = 3072, tf_\ 34:ss = -266427884)) (../../i386/i386/trap.c 283 eilutė) 35:283 (void) trap_pfault(&frame, FALSE); 36: (kgdb) frame frame->tf_ebp frame->tf_eip 37:Simbolių skaitymas, skirtas ../../i386/isa/pcvt/pcvt_drv.c...atlikta. 38:#0 0xf01ae729 programoje pcopen (dev=3072, flag=3, mode=8192, p=(struct p\ 39:roc *) 0xf07c0c00) (../../i386/isa/pcvt/pcvt_drv.c eilutė 403) 40:403 return ((*linesw.l_open)(dev, tp)); 41: (kgdb) sąrašas 42:398 43:399 tp->t_state |= TS_CARR_ON; 44:400 tp->t_cflag |= CLOCAL; /* negali būti modemas (:-) */ 45:401 46:402 #if PCVT_NETBSD || (PCVT_FREEBSD >= 200) 47:403 return ((*linesw.l_open)(dev, tp)); 48:404 #else 49:405 return ((*linesw.l_open)(dev, tp, flag)); 50:406 #endif /* PCVT_NETBSD || (PCVT_FREEBSD >= 200) */ 51:407 ) 52: (kgdb) spausdinti tp 53: Simbolių skaitymas ../../i386/i386/cons.c...atlikta. 54:$1 = (struct tty *) 0x1bae 55: (kgdb) spausdinti tp->t_line 56:$2 = 1767990816 57: (kgdb) aukštyn 58:#1 0xf0191503 naudojant cnopen (dev=0x0000=3, 0x000000 , p=(st\ 59:ruct proc *) 0xf07c0c00) (../../i386/i386/cons.c 126 eilutė) 60: return ((*cdevsw.d_open)(dev, flag, mode, p) ); 61: (kgdb) aukštyn 62:#2 0xf0132c34 spec_open () 63: (kgdb) aukštyn 64:#3 0xf012d014 vn_open () 65: (kgdb) aukštyn 66:#4 0xf012a186) (kg) aukštyn 68:#5 0xf019d4eb in syscall (frame=(tf_es = 39, tf_ds = 39, tf_edi =\ 69: 2158592, tf_esi = 0, tf_ebp = -272638436, tf_ebp = -272638436, 2 t 7:0 2 = 7086 , tf_edx = 1, tf_ecx = 0, tf_eax = 5, tf_trapno = 582, \ 71:tf_err = 582, tf_eip = 75749, tf_cs = 31, tf_flags = 582, tf_7 = 582, \ tf_6 = 4 p 39)) (. ./../i386/i386/trap.c line 673) 73:673 error = (*calp->sy_call)(p, args, rval); 74: (kgdb) aukštyn 75: pasirinktas pradinis kadras; tu negali pakilti. 76: (kgdb) quit 77: # exit 78:exit 79: 80:Scenarijus padarytas 1994 m. gruodžio 30 d. penktadienį 23:18:04

lPNNEOFBTYY L CHSHCHYYERTYCHEDEOOPNH TSHTOBMKH:

UFTPLB 6:

ьФП DBNR, CHSFSHCHK RTY RPNPEY DDB (UNPFTY OITSE), RPPFPNH LPNNEOFBTYK L BCHBTYKOPNH PUFBOPCHH YNEEF YNEOOP CHYD ``kadangi tu sakei!'' Y FTBUUYTPCHLB UFELB ZMHVPLUBBTYK; PDOBLP YOBYUBMSHOPK RTYYUYOPK RETEIPDB CH DDB VSHMB BCHBTYKOBS PUFBOPCHLB RTY CHPOYLOPCHEOYA PYYVLY UFTBOIGSC RBNSFY.

UFTPLB 20:

lFP NEUFPOBIPTSDEOOYE ZHKHOLGYY trap() CH FTBUUYTPCHLE UFELB.

UFTPLB 36:

rTYOKHDIFEMSHOPE YURPMSHЪPCHBOIE OPChPK ZTBOYGSCH UFELB; FERTSH LFP OE OHTSOP. rTEDRPMBZBEFUS, YuFP ZTBOYGSCH UFELB KHLBSCCHBAF APIE RTBCHYMSHOP TBURPMPTSEOYE, DBCE CH UMHUBE BCHBTYKOPZP PUFBOPCHB. zMSDS APIE UFTPLH YUIPDOPZP LPDB 403, NPTsOP ULBBFSH, YuFP CHEUSHNB CHETPSFOP, YuFP MYVP CHYOPCHBF DPUFHR RP KHLBBFEMA ``tp", MYVP VSHM CHSHCHIPD ЪBNB ZТBOYCHB.

UFTPLB 52:

rPIPTSE, YuFP CHYOPCHBF KHLBBFEMSH, OP ON SCHMSEFUS DPRKHUFYNSCHN BDTEUPN.

UFTPLB 56:

pDOBLP, PYUECHYDOP, YuFP PO KHLBSHCHCHBEF APIE NHUPT, FBL YuFP NSCH OBYMY OBYKH PYYVLH! (DMS FEI, LFP OE ЪOBLPN U LFPC YUBUFSHHA LPDB: tp->t_line UMHTSYF DMS ITBOEOYS TETSYNB LBOBMMB LPOUPMSHOPZP KHUFTPKUFCHB, Y LFP DPMTSOP VShchFSH DPUFMEBFPOSHLYuOPPEMPEMPENB

Kartais pasitaiko situacija, kai „Windows“ laukia branduolio derintuvo įkėlimo laiko. Matote tekstą „Windows start“, bet ne logotipą.

Jei dabar pridedu derintuvą, paleidžiama Windows 7 logotipo animacija. Po to logotipas pradeda pulsuoti. Šiuo metu atsisiuntimo procesas nebevyksta. CPU apkrova sumažinama iki minimumo. Paprastai laukiu kelias minutes, bet nieko neįvyksta.

Taip nutinka ne visada. Tačiau jei taip atsitiks, VM nustatymas iš naujo nepadės. Norėdami išspręsti šią problemą, turiu naudoti paleidimo taisymą. Deja, tai trunka amžinai.

Turite idėjų, ką galėčiau padaryti, be paleidimo taisymo?

Iš anksto dėkoju!

3

2 atsakymai

Norėdami išspręsti problemą, su kuria susiduriate, įkrovos metu tiesiog paspauskite F10. Ir pašalinti / derinti ir susijusius parametrus. Tada paspauskite enter.

Patarimas: nenaudokite /debug kaip numatytosios įkrovos meniu parinkties. Nukopijuokite įkrovos konfigūraciją į naują įrašą. Tada nustatykite derinimo režimą. „Windows“ nežino, kada naudosite derinimo priemonę. Todėl jis turi laukti.

Norėdami derinti branduolį, turite prisijungti prie kompiuterio naudodami Nulinis modemo kabelis arba modemo prijungimas. Kompiuteris, atliekantis derinimą, bus vadinamas „Host“, o probleminis kompiuteris – „Target“.

Abu kompiuteriai turi veikti vienodai Windows versijos, o tikslinio kompiuterio simbolių failai turi būti įdiegti pagrindiniame kompiuteryje. Simbolių failai pateikiami Windows diegimo kompaktiniame diske, kataloge Support\Debug.

Norėdami įjungti derinimą, turite atlikti BOOT.INI failo pakeitimus tiksliniame kompiuteryje.

1. Pakeiskite BOOT.INI failo atributus:

attrib c:\boot.ini –r –s

2. Redaguokite šį failą ir į eilutę Windows paleidimas pridėkite parametrą /debug (kad nurodytų sistemai paleisti RAM branduolio derintuvas paleidžiant „Windows“.). Papildomi parametrai yra /Debugport, kuris nurodo sistemai, kurį COM prievadą naudoti (numatytasis yra COM2) ir /Baudrate - nurodo duomenų perdavimo spartą (numatytasis yra 19200 bodų, bet 9600 yra geresnis). Pavyzdžiui:


multi(0)disk(0)disk(0)partition(0)\WINDOWS="Windows NT" /debug /debugport=com2 /baudrate=9600

3. Išsaugokite failą.

4. Nustatykite ankstesnius BOOT.INI failo atributus:

attrib c:\boot.ini +r +s

IN šiame pavyzdyje Tikslinis kompiuteris leido prisijungti per COM2 prievadą 9600 bps greičiu.

Pagrindiniame kompiuteryje turi būti sukonfigūruoti derinimui reikalingi nustatymai. Be to, reikia įdiegti simbolių failus. Norėdami juos įdiegti, eikite į diegimo kompaktinio disko katalogą \support\debug ir įveskite šią komandą:

expndsym : <целевой диск и каталог>

Pavyzdžiui:

expndsym f: d:\simboliai

Diegimas gali užtrukti. Atminkite, kad jei pakeitimų paketai buvo įdiegti tiksliniame kompiuteryje, tų paketų simbolių failai taip pat turi būti įdiegti pagrindiniame kompiuteryje. Naujinimo paketų simbolių failus galima atsisiųsti iš „Microsoft“ svetainės.

Kitas žingsnis – nustatyti aplinkos kintamuosius, reikalingus derinimui, pvz., kintamuosius, nurodančius simbolių failų vietą ir pan. Toliau pateikiamas šių kintamųjų aprašymas.

Sistemos kintamųjų aprašymas

Šių kintamųjų apibrėžimas gali būti įtrauktas paketinis failas kad nebūtų įvedamos atitinkamos komandos kiekvienos įkrovos metu:

aidas išjungti
set_nt_debug_port=com2
set_nt_debug_baud_rate=9600
nustatyti _nt_symbol_path=d:\ymbols\i386
set _nt_log_file_open=d:\debug\logs\debug.log

Dabar reikia nukopijuoti programinė įranga branduolio, esančio support\debug\ kataloge, derinimas<процессор>diegimo kompaktiniame diske (support\debug\I386). Lengviausias būdas yra nukopijuoti visą katalogą, nes jis yra mažas (apie 2,5 MB). I386 platformai naudojamas derinimo įrankis, kuris pateikiamas kaip failas I386KD.EXE. Derinimo priemonė paleidžiama naudojant komandą I386KD. Norėdami įvesti komandą, paspauskite klavišų kombinaciją ir palaukite, kol pasirodys komandų eilutė kd>.

Dalintis