Systeemdebugger. Handig debuggen van Windows-services. Definitie van programmeren. Stadia van het maken van een programma

De Windows Debugging Tools Suite bevat geavanceerde foutopsporingstools waarmee u intern kunt verkennen Windows-apparaat. Bij de zeer nieuwste versie Ontwikkelingskit inbegrepen als onderdeel software - Windows-software Ontwikkelingskit (SDK).

De tools in deze set kunnen worden gebruikt voor het debuggen van processen in zowel de gebruikersmodus als de kernelmodus.

OPMERKING. Hulpmiddelen voor foutopsporing voor Windows worden vrij vaak bijgewerkt en uitgebracht, ongeacht de besturingsversies Windows-systemen, dus kom regelmatig terug voor nieuwe versies.

Debugtools kunnen ook worden gebruikt om de gebruikersmodus aan een proces te koppelen en om de geheugenstatus van het proces te onderzoeken en/of te wijzigen. Wanneer u verbinding maakt met een proces, zijn er twee opties:

  • Invasief. Als u verbinding maakt met lopende proces er worden geen speciale instructies gegeven; de Windows-functie DebugActiveProcess wordt gebruikt om de debugger te verbinden met de code waarvoor fouten worden opgespoord. Dit schept voorwaarden voor het onderzoeken en (of) wijzigen van procesgeheugen, het instellen van breekpunten en het uitvoeren van andere debugging-functies. Met Windows kunt u stoppen met debuggen zonder het doelproces te onderbreken als de debugger wordt afgesloten zonder de werking ervan te onderbreken.
  • Onopvallend (niet-invasief). Met deze optie opent de debugger eenvoudigweg het proces met behulp van de OpenProcess-functie. Dit proces wordt niet als debugger aan een ander proces gekoppeld. Hierdoor kunt u het geheugen van het doelproces onderzoeken en/of wijzigen, maar u kunt dit niet instellen controlepunten.

U kunt ook dumpbestanden in de gebruikersmodus openen met de foutopsporingstools.

Om de kernel te debuggen kunnen twee debuggers worden gebruikt: één die in een opdrachtregelvenster draait (Kd.exe) en één die een grafische gebruikersinterface (GUI) heeft (Windbg.exe). Beide debuggers bieden dezelfde set opdrachten, dus de keuze is geheel een kwestie van persoonlijke voorkeur. Met deze tools kunt u drie soorten kernelfoutopsporing uitvoeren:

  • Open crashdumpbestand, gemaakt als gevolg van een systeemcrash.
  • Maak verbinding met een live, actief systeem en onderzoek de status van het systeem (of stel breekpunten in als u fouten in de stuurprogrammacode van het apparaat opspoort). Voor deze operatie zijn twee computers nodig: het doel en de master. De doelcomputer bevat het systeem waarvan fouten worden opgespoord, en de hoofdcomputer bevat het systeem waarop de foutopsporing wordt uitgevoerd. Het doelsysteem kan via worden verbonden met het mastersysteem nulmodem kabel, IEEE 1394 of ontwikkelingskabel USB-kabel 2.0. Het doelsysteem moet worden opgestart in de foutopsporingsmodus (door tijdens het opstarten op F8 te drukken en de foutopsporingsmodus te selecteren, of door het systeem zo te configureren dat het in de foutopsporingsmodus start met behulp van Bcdedit of Msconfig.exe). U kunt ook verbinding maken via een benoemde pipe, die wordt gebruikt bij het debuggen via een virtuele machine (gemaakt door tools zoals Hyper-V, Virtual PC of VMWare), door het gastbesturingssysteem bloot te stellen aan seriële poort als een benoemd kanaalapparaat.
  • Met Windows-systemen kunt u ook verbinding maken lokaal systeem en onderzoek haar toestand. Dit wordt "lokale kernelfoutopsporing" genoemd. Om te beginnen met het lokaal debuggen van de kernel met behulp van de WinDbg-foutopsporing, opent u het menu Bestand, selecteert u Kernel Debug, klikt u op het tabblad Lokaal en klikt u vervolgens op OK. Het doelsysteem moet worden opgestart in debug-modus. Een voorbeeld van het scherm dat in dit geval verschijnt, wordt getoond in Fig. 1.6. Sommige kernelfoutopsporingsopdrachten werken niet in de lokale kernelfoutopsporingsmodus (bijvoorbeeld de opdracht .dump, ontworpen om een ​​geheugendump te maken, hoewel een dergelijke dump kan worden gemaakt met behulp van het LiveKd-hulpprogramma dat hieronder wordt besproken).

Lokale kernel-foutopsporing

Om inhoud weer te geven interne structuur gegevens, inclusief informatie over threads, processen, I/O-verzoekpakketten en geheugenbeheerinformatie, kunt u, nadat u verbinding hebt gemaakt met de kernel-foutopsporingsmodus, een van de vele debugger-extensieopdrachten gebruiken (opdrachten die beginnen met een "!"-teken).

Uitstekende hulp referentiemateriaal Het bestand Debugger.chm, dat zich in de installatiemap van de WinDbg-foutopsporing bevindt, kan worden gebruikt. Het biedt documentatie voor iedereen functionaliteit en kernel-debugger-extensies. Bovendien kan de opdracht dt (display type) meer dan 1000 kernelstructuren formatteren, omdat de Windows-kernelsymboolbestanden type-informatie bevatten die de debugger kan gebruiken om structuren te formatteren.

Experiment: Type-informatie weergeven voor kernelstructuren.

Om kernelstructuren weer te geven waarvan de type-informatie is opgenomen in kernelsymbolen, typt u dt nt!_* in de kernel-debugger. Een gedeeltelijke voorbeelduitvoer ziet er als volgt uit:

lkd> dt nt!_*

nt!_IMAGE_NT_HEADERS

nt!_IMAGE_FILE_HEADER

nt!_IMAGE_OPTIONAL_HEADER

nt!_IMAGE_NT_HEADERS

nt!_LARGE_INTEGER

U kunt ook de opdracht dt gebruiken om naar specifieke structuren te zoeken, met behulp van de jokertekenfunctie van de opdracht. Als u bijvoorbeeld de structuurnaam voor het interruptobject zoekt, typt u de opdracht dt nt!_*interrupt*:

lkd> dt nt!_*onderbreken*

nt!_KINTERRUPT_MODE

nt!_KINTERRUPT_POLARITY

nt!_UNEXPECTED_INTERRUPT

Vervolgens kan, zoals in het volgende voorbeeld wordt getoond, de opdracht dt worden gebruikt om een ​​specifieke structuur op te maken:

lkd> dt nt!_kinterrupt

0x000 Type: Int2B

0x002 Grootte: Int2B

0x018 ServiceRoutine: Ptr64 niet-ondertekende char

0x020 MessageServiceRoutine: Ptr64 niet-ondertekende char

0x028 BerichtIndex: Uint4B

0x030 ServiceContext: Ptr64 Ongeldig

0x038 SpinLock: Uint8B

0x040 TickCount: Uint4B

0x048 ActualLock: Ptr64 Uint8B

0x050 Verzendadres: Ptr64 ongeldig

0x058 Vector: Uint4B

0x05c Irql: UChar

0x05d SynchroniserenIrql: UChar

0x05e ZwevendOpslaan: UChar

0x05f Verbonden: UChar

0x060 Nummer: Uint4B

0x064 ShareVector: UChar

0x065 Pad: Char

0x068-modus: _KINTERRUPT_MODE

0x06c Polariteit: _KINTERRUPT_POLARITY

0x070 Servicetelling: Uint4B

0x074 Aantal verzendingen: Uint4B

0x078 Rsvd1: Uint8B

0x080 TrapFrame: Ptr64_KTRAP_FRAME

0x088 Gereserveerd: Ptr64 Ongeldig

0x090 Verzendcode: Uint4B

Opgemerkt moet worden dat bij het uitvoeren van het dt-commando substructuren (structuren binnen structuren) standaard niet worden weergegeven. Om recursie van substructuren uit te voeren, moet u de schakelaar –r gebruiken. Gebruik deze sleutel bijvoorbeeld om het kernel-interrupt-object weer te geven, waarbij het formaat wordt weergegeven van de _LIST_ENTRY-structuur die is opgeslagen in het veld InterruptListEntry:

lkd> dt nt!_kinterrupt -r

0x000 Type: Int2B

0x002 Grootte: Int2B

0x008 InterruptListEntry: _LIST_ENTRY

0x000 Flink: Ptr64 _LIST_ENTRY

0x008 Knipperen: Ptr64 _LIST_ENTRY

0x000 Flink: Ptr64 _LIST_ENTRY

0x008 Knipperen: Ptr64 _LIST_ENTRY

In het helpbestand Debugging Tools for Windows wordt ook uitgelegd hoe u kernelfoutopsporingsprogramma's configureert en gebruikt. Aanvullende details over het gebruik van kernel-debuggers die rechtstreeks gericht zijn op schrijvers van apparaatstuurprogramma's kunt u vinden in de documentatie voor Ramen ingesteld Driverkit.

Na softwaremodules succesvol zijn vertaald, op specifieke adressen zijn geplaatst en aan elkaar zijn gekoppeld, kunt u een van de volgende methoden gebruiken om het programma te debuggen:

  • in-circuit-emulator
  • ingebouwde software-debugger
  • externe software-debugger
  • apparaat waarvoor fouten worden opgespoord met programma's die in het geheugen zijn opgenomen binaire code programma's

In-circuit-emulator met weergave taalvariabelen Programmeren op een computerscherm biedt aanzienlijke hulp bij het debuggen van programma's rechtstreeks op de apparatuur die wordt ontwikkeld. Deze foutopsporingsmethode biedt de handigste omgeving wanneer u het programma rechtstreeks kunt stoppen op het apparaat waarvoor fouten worden opgespoord, en de uitvoering van het programma rechtstreeks kunt regelen vanuit de brontekst van het programma, de status van externe poorten en interne variabelen, beide opgenomen in de chip en verklaard tijdens het schrijven brontekst programma's. Houd er rekening mee dat u bij het debuggen van een programma met behulp van een in-circuit-emulator het volgende moet opnemen: objectmodules symbolische informatie. De apparatuur die nodig is voor het debuggen van programma's wordt getoond in Figuur 1.


Figuur 1. Voorbeeld van een softwarefoutopsporingssysteem voor microcontrollers

Tot voor kort was een in-circuit-emulator een afzonderlijk apparaat dat was aangesloten op het bord dat werd ontwikkeld, in plaats van een microcontroller. Moderne microcontrollers bevatten vaak een ingebouwde emulator in het circuit. Tegelijkertijd is de JTAG-interface de handigste interface voor communicatie met een computer, hoewel sommige chipfabrikanten hun eigen interface aanbieden.

Bij gebruik van de geïntegreerde programmeeromgeving wordt deze meegeleverd gebruiksvriendelijke interface, zodat u eenvoudig fouten kunt opsporen in het programma dat wordt ontwikkeld. Momenteel is een interface vergelijkbaar met de Visual C-shell de de facto standaard geworden verschijning Een dergelijke softwareshell wordt getoond in Figuur 2.



Figuur 2. Een voorbeeld van het uiterlijk van de debugger van een geïntegreerd softwarefoutopsporingssysteem

Ingebouwde software-debugger, dat deel uitmaakt van de geïntegreerde programmeeromgeving, stelt u niet in staat de werking te controleren van de apparatuur die is aangesloten op de externe poten van de microcontroller, maar verlaagt aanzienlijk de kosten van het debugging-complex dat nodig is voor het schrijven van programma's voor microcontrollers. De signalen die de apparatuur naar de microcontroller moet sturen, worden door de programmeur zelf ingesteld (wat betekent dat er al in dit stadium fouten kunnen optreden als gevolg van juiste begrip bediening van de apparatuur). Het handmatig invoeren van deze signalen vertraagt ​​het foutopsporingsproces van de software aanzienlijk.

Externe software-debugger. In sommige gevallen wordt er geen geïntegreerde programmeeromgeving gebruikt, maar een aparte vertaler uit de geselecteerde programmeertaal. In dit geval kunt u elk programma gebruiken dat het geselecteerde type microcontroller emuleert. Omdat de objectformaten van verschillende vertalers enigszins van elkaar verschillen, wordt als invoerbestand een laadmodule in binair of hexadecimaal formaat gebruikt. In deze formaten is de foutopsporingsinformatie volledig afwezig, dus het debuggen van dergelijke programma's kan alleen worden gedaan met behulp van de ingebouwde disassembler en een afgedrukte (of geopend in een ander venster) programmalijst. Uiteraard is dit een nog ongemakkelijkere manier van debuggen vergeleken met het gebruik van een geïntegreerde programmeeromgeving en een in-circuit-emulator.

Programmeren van microcircuits. Wanneer u een programmafoutopsporingsmethode gebruikt, wordt er naar de voltooide laadmodule geschreven intern geheugen microcontrollerprogramma's met behulp van een programmeur (die in veel moderne microcontrollerchips zit). Hierna wordt het ontwikkelde apparaat grondig getest om fouten in de schakeling en het programma van dit apparaat op te sporen. Pas nadat deze tests met succes zijn doorstaan, wordt het programma als volledig geschreven en gedebugd beschouwd.

Genoeg bij het schrijven eenvoudige programma's soms wordt alleen deze gebruikt om programma's te debuggen laatste fase testen. Het detecteren, zoeken en elimineren van fouten met alleen deze methode is echter zeer arbeidsintensief! Dit is hetzelfde als proberen apparatuur op te zetten zonder instrumenten te gebruiken!

Deze documentatie is gearchiveerd en wordt niet langer onderhouden.

WinPE: foutopsporing in toepassingen

Voor het debuggen van toepassingen en de kernel in Windows PE kunt u Windows-foutopsporingsprogramma's gebruiken, zoals Ntsd.exe, Cdb.exe, Windbg.exe en ondersteunende tools. Foutopsporingstools zijn opgenomen in de Windows 10 SDK. Om foutopsporingshulpmiddelen beschikbaar te maken op de computer waarop Windows PE wordt uitgevoerd, moet u deze kopiëren naar lokale schijf of deel.

Als u Windows PE op afstand wilt debuggen, moet u mogelijk de ingebouwde firewall op uw computer uitschakelen:

wpeutil schakelt firewall uit

Foutopsporing in gebruikersmodus

Om foutopsporing in de gebruikersmodus uit te voeren, is de eenvoudigste manier om een ​​in-process server te starten op de computer waarop Windows PE draait en daar verbinding mee te maken met behulp van een foutopsporingsprogramma op een andere computer. Process Server is opgenomen in de foutopsporingsprogramma's in de Windows 10 SDK.

Een in-proces-server draaien in de gebruikersmodus

    Kopieer de Windows Debug Process Server Tool dbgsrv.exe vanuit de map Windows 10 SDK-foutopsporingshulpmiddelen (bijvoorbeeld C \Windows Kits\10.0\Debuggers\x64 files \Program (x86) naar een computer met Windows PE.

    IN opdrachtregel Windows PE schakelt de firewall uit.

    wpeutil schakelt firewall uit

    Start de Windows-in-process debugging-server en geef de verbindingsmethode met de computer op, bijvoorbeeld een TCP-poort:

    dbgsrv.exe –t tcp:poort=1234

    Activeren van de processerver (Windows-foutopsporing).

    Op externe computer Gebruik een in-process-server om processen in Windows PE op de doelcomputer aan te sluiten of uit te voeren:

    windbg -premote tcp:server=Server, poort=1234

    Zie De Intelligent Client activeren (Windows Debuggers) voor meer informatie.

U kunt de foutopsporing ook rechtstreeks uitvoeren op de computer waarop Windows PE wordt uitgevoerd. Hiervoor moet u echter elke keer dat u deze Windows PE-computer opnieuw opstart, de symbool- en bronpaden configureren. Wij raden u aan debuggen uit te voeren vanaf een computer die vol is Windows-versie zoals beschreven in deze procedure.

Deze procedure kan worden gebruikt als u startnet.cmd of setup.exe wilt omzeilen en direct vanaf de opdrachtregel naar foutopsporing wilt gaan. Hierdoor wordt initialisatie, inclusief installatie, volledig geëlimineerd en worden geen opdrachten zoals Wpeinit.exe uitgevoerd. De procedure moet online worden uitgevoerd op een aangesloten besturingssysteem.

Schakel foutopsporing in de gebruikersmodus in vóór initialisatie

    Verwijder het bestand winpeshl.ini, indien aanwezig. Als het bestand winpeshl.ini niet bestaat, is foutopsporing in de gebruikersmodus standaard beschikbaar.

    Houd ingedrukt tijdens het laden CTRL-toets totdat de opdrachtprompt verschijnt. De opdrachtregel verschijnt op het scherm.

    Begin met debuggen.

Foutopsporing in kernelmodus

Om foutopsporing in de kernelmodus uit te voeren, moet dit worden ingeschakeld voordat het systeem opstart. Het opstartconfiguratiebestand heeft een foutopsporingsoptie in de kernelmodus die kan worden ingeschakeld door het opdrachtregelprogramma bcdedit.exe te gebruiken om de opslag van opstartconfiguratiegegevens te wijzigen. Foutopsporing in de kernelmodus is alleen mogelijk met behulp van bcdedit.exe. Bcdedit.exe bevindt zich Windows-sectie in de map \Windows\System32.

De standaard debugger-opties zien er als volgt uit:

Identificatie (dbgsettings) debugtype Seriële debugpoort 1 baudrate 115200

Voordat u ISO-images maakt voor virtuele machines, schakel de kernel in met gegevensinvoer voor de opstartconfiguratie.

Voor informatie over het wijzigen van het standaard op(default.bcd), zie Hoe u het opkunt wijzigen met Bcdedit.

Schakel foutopsporing in de kernelmodus in

    Zoek het gegevensarchief voor de opstartconfiguratie, dat zich bevindt in een bestand met de naam bcd. Dit bestand bevindt zich in de opstartmap in de hoofdmap van het medium dat de Windows PE-image bevat.

    Voer bij de opdrachtprompt de volgende bcdedit-opdracht in om de debug-vlag in te stellen van de odie wordt gebruikt om de image op te starten waarop fouten moeten worden opgespoord.


Inleiding 2

Definitie van programmeren. Fasen bij het maken van een programma 3

Een programma debuggen 6

Probleem 2 en 3 9

Probleem 4 en 5 12

Conclusie 14

Lijst met gebruikte literatuur 15

Invoering

Computerapparatuur en computertechnologie zijn stevig verankerd geraakt in het menselijk leven. De ontwikkeling van wetenschappelijke en technologische vooruitgang is onmogelijk zonder automatisering van computerprocessen. Het was de noodzaak om computerprocessen te automatiseren die de eerste aanzet vormden voor de ontwikkeling van programmeren.

Traditionele programmeertechnologie werd bij het ochtendgloren gevormd computertechnologie, toen gebruikers beperkte computerbronnen tot hun beschikking hadden en de programma-ontwikkelaar tegelijkertijd de hoofdgebruiker was. Onder deze omstandigheden werd de belangrijkste aandacht besteed aan het verkrijgen van effectieve programma's in de zin van optimaal gebruik van computerbronnen.

Tegenwoordig, wanneer de reikwijdte van computertoepassingen enorm is uitgebreid, wordt de ontwikkeling en werking van programma's in de regel door verschillende mensen uitgevoerd. Daarom komen naast de efficiëntie ook andere belangrijke kenmerken van programma's naar voren, zoals begrijpelijkheid, goede documentatie, betrouwbaarheid, flexibiliteit, onderhoudsgemak, enz. Het probleem van het ontwikkelen van programma's met dergelijke kwaliteiten wordt verklaard door de complexiteit van het programmeerproces.

Om een ​​programma te maken, wordt het noodzakelijk om zich aan bepaalde principes en nieuwe programmeertechnologieën te houden.

Tegenwoordig speelt programmeren, dankzij de voortdurende vooruitgang van de computertechnologie, een grote rol cruciale rol in het menselijk leven.

Definitie van programmeren. Stadia van het maken van een programma

Om een ​​computer een probleem te laten oplossen, moet hij instructies ontvangen van een persoon over hoe hij het probleem moet oplossen; een reeks van dergelijke instructies voor een computer die gericht is op het oplossen van een probleem, wordt een programma genoemd.

Programmeren is het proces waarbij computerprogramma's of software worden gemaakt met behulp van programmeertalen. Programmeren combineert elementen van fundamentele wetenschappen zoals wiskunde, hogere wiskunde en techniek.

Een programmeertaal is een formeel tekensysteem dat is ontworpen om programma's te schrijven. Sinds de creatie van de eerste programmeerbare machines heeft de mensheid meer dan acht en een half duizend programmeertalen bedacht. Elk jaar wordt hun aantal aangevuld met nieuwe. Weet alleen hoe hij bepaalde talen moet gebruiken klein aantal hun eigen ontwikkelaars, anderen worden bekend bij miljoenen mensen. Professionele programmeurs gebruiken soms meer dan een dozijn verschillende programmeertalen in hun werk.

Bij het maken van een programma kunnen de volgende reeks fasen worden onderscheiden:

Fase 1. Probleemstelling: in deze fase wordt een persoon betrokken die een goed inzicht heeft in het onderwerpgebied van het probleem. Hij moet het doel en de doelstellingen duidelijk definiëren, een mondelinge beschrijving geven van de inhoud van het probleem en een algemene benadering voor de oplossing ervan voorstellen, de aard en essentie analyseren van alle grootheden die in het probleem worden gebruikt, en de omstandigheden bepalen waaronder het wordt opgelost. Met andere woorden: in dit stadium wordt de toestand van het probleem gevormd. Deze fase is erg belangrijk, omdat het succes van de implementatie van het gemaakte programma vooral afhangt van het juiste begrip van de doelen en vereisten.

Fase 2. Probleemanalyse en modellering: Het doel van deze fase is een wiskundig model of wiskundige formulering. In dit stadium worden de volgende punten uitgevoerd

1) De brongegevens en hun typen worden bepaald.

2) De oplossing voor het probleem wordt beschreven in de vorm van analytische afhankelijkheden (vergelijkingen, functies).

3) De definitieve gegevens en hun typen worden bepaald.

Op deze manier wordt een wiskundig model gevormd met een bepaalde nauwkeurigheid, aannames en beperkingen. In dit geval kunnen, afhankelijk van de specifieke kenmerken van het probleem dat wordt opgelost, verschillende delen van de wiskunde en andere disciplines worden gebruikt.

Fase 3. Algoritmisering van het probleem en opstellen van een blokdiagram: uitgevoerd op basis van een wiskundige beschrijving van het programma. Op in dit stadium een algoritme voor het oplossen van het probleem wordt samengesteld volgens de acties gespecificeerd door de geselecteerde oplossingsmethode. Het gegevensverwerkingsproces wordt opgedeeld in afzonderlijke, relatief onafhankelijke blokken, en de volgorde van uitvoering van de blokken wordt vastgelegd. Er wordt gewerkt aan een blokdiagram van het algoritme.

Fase 4. Programmeren: In deze fase wordt het algoritme voor het oplossen van het probleem vertaald in een specifieke programmeertaal. Voor het programmeren worden meestal talen op hoog niveau gebruikt, dus het gecompileerde programma vereist vertaling in machinetaal. Na een dergelijke vertaling wordt het bijbehorende machineprogramma uitgevoerd.

Fase 5. Debuggen en testen van een programma: bestaat uit het vinden en elimineren van syntactische en logische fouten in het programma.

Tijdens de syntactische controle van het programma identificeert de vertaler constructies en combinaties van symbolen die onaanvaardbaar zijn vanuit het oogpunt van de regels voor de constructie of het schrijven ervan die in een bepaalde taal worden aangenomen. De computer geeft foutmeldingen aan de programmeur, en het type en de vorm van dergelijke berichten zijn afhankelijk van het type taal en de versie van de gebruikte vertaler. Na het elimineren van syntaxisfouten wordt de logica van het programma tijdens de uitvoering ervan gecontroleerd met specifieke brongegevens.

Fase 6. Uitvoering van een gedebugd programma en analyse van de resultaten: na het debuggen van het programma kan het worden gebruikt om een ​​applicatieprobleem op te lossen. In dit geval wordt het probleem meestal meerdere keren opgelost op een computer voor verschillende sets initiële gegevens. De verkregen resultaten worden geïnterpreteerd en geanalyseerd door de specialist of gebruiker die de taak heeft gesteld.

Debuggen van het programma

Ondanks het feit dat het maken van een programma in verschillende fasen plaatsvindt, is de fase van het debuggen en testen van het programma de belangrijkste en meest tijdrovende fase. Het is in dit stadium dat alle logische en synthetische fouten in het gemaakte programma worden geëlimineerd.

Debuggen is een activiteit gericht op het opsporen en corrigeren van fouten in een programma.

Testen is het proces waarbij een programma wordt uitgevoerd op een bepaalde set gegevens waarvan het resultaat van de toepassing vooraf bekend is of waarvan de gedragsregels van deze programma's bekend zijn. Debuggen kan dus worden voorgesteld als de herhaalde herhaling van drie processen: testen, waardoor de aanwezigheid van een fout kan worden vastgesteld, het zoeken naar de locatie van de fout in het programma, en het bewerken van het programma en de documentatie om verwijder de gedetecteerde fout. Al het bovenstaande kan dus worden weergegeven door de formule:

Debuggen = Testen + Fouten vinden + Bewerken.

Het succes van debuggen wordt grotendeels bepaald door de rationele organisatie van het testen. Bij het debuggen vinden en elimineren we vooral die fouten waarvan de aanwezigheid tijdens het testen wordt vastgesteld. Zoals al opgemerkt, kan testen op zijn best de juistheid van een programma niet bewijzen; het kan de aanwezigheid van een fout erin aantonen. Er doen zich dus twee problemen voor. Ten eerste: bereid een dergelijke reeks tests voor om, indien mogelijk, groter aantal fouten. Hoe langer het testproces duurt, hoe hoger de kosten van het programma worden. Vandaar de tweede taak: het einde van het debuggen bepalen. Een teken dat het debuggen kan worden voltooid, is de volledige dekking van de tests die door het programma zijn doorlopen, en het relatief zelden voorkomen van fouten in het programma dat wordt getest in de laatste fase van het testproces.

Er zijn verschillende benaderingen en manieren om fouten op te sporen; het belangrijkste hulpmiddel zijn ingebouwde software-debuggers, die een gebruikersinterface bevatten voor de stapsgewijze uitvoering van het programma: statement voor statement, functie voor functie, met stops op sommige regels broncode of wanneer een bepaalde toestand wordt bereikt.

Naast het gebruik van ingebouwde softwaredebuggers zijn er ook andere methoden voor het debuggen van een programma: het gebruik van een in-circuit emulator, het debuggen van externe softwaredebuggers en een gedebugd apparaat met de binaire code van het programma vastgelegd in het programmageheugen.

Een in-circuit emulator met programmeertaalvariabelen die op het computerscherm worden weergegeven, biedt aanzienlijke hulp bij het debuggen van programma's rechtstreeks op de apparatuur die wordt ontwikkeld. Deze foutopsporingsmethode biedt de handigste omgeving wanneer u het programma rechtstreeks kunt stoppen op het apparaat waarvoor fouten worden opgespoord, en de uitvoering van het programma rechtstreeks kunt regelen vanuit de brontekst van het programma, de status van externe poorten en interne variabelen, beide opgenomen in de chip en gedeclareerd bij het schrijven van de brontekst van het programma. Tot voor kort was een in-circuit-emulator een afzonderlijk apparaat dat was aangesloten op het bord dat werd ontwikkeld.

De ingebouwde softwaredebugger, die deel uitmaakt van de geïntegreerde programmeeromgeving, vereenvoudigt het proces van het debuggen van een programma aanzienlijk. Maar tegelijkertijd vertraagt ​​het aanzienlijk.

Externe software-debugger. In sommige gevallen wordt er geen geïntegreerde programmeeromgeving gebruikt, maar een aparte vertaler uit de geselecteerde programmeertaal. Omdat de objectformaten van verschillende vertalers enigszins van elkaar verschillen, wordt de laadmodule in binair formaat als invoerbestand gebruikt.

Het debuggen van programma's bestaat uit het controleren van de juiste werking van het programma en de hardware. Een programma dat geen syntaxisfouten bevat, kan echter logische fouten bevatten die voorkomen dat het programma de beoogde functies uitvoert. Logische fouten kunnen verband houden met het programma-algoritme of met een misverstand over de werking van de apparatuur die op de microcontrollerpoorten is aangesloten.

Met de debugger die in de geïntegreerde programmeeromgeving is ingebouwd, kunt u fouten in die delen van de programmacode debuggen die niet afhankelijk zijn van de werking van apparatuur die geen deel uitmaakt van de microcontrollerchip. Het verwijst meestal naar de evaluatie van wiskundige uitdrukkingen of de conversie van datarepresentatieformaten. foutopsporing" programma's, d.w.z. detectie en correctie van fouten die zijn gemaakt wanneer Programmering Primaire middelen debuggen ...

  • Pascal Foutopsporing programma's

    Samenvatting >> Computerwetenschappen

    Logische operatoren en lusoperatoren. Foutopsporing programma's. Een verkorte vorm van de if-instructie is... if. Milieu betekent programmeren Voor debuggen programma's Borland Pascal-omgeving... verschillende ingebouwde apparaten hulpmiddelen debuggen programma's. Met sommigen van hen...

  • Programma voor het berekenen van lonen en belastingen voor werknemers van het bedrijf

    Samenvatting >> Economie

    Software: studie van probleemstelling; programmeren En debuggen programma's; beschrijving testgeval; samen met... computertijd op debuggen programma's bepaald door de werkelijke tijd te vermenigvuldigen debuggen programma's voor de prijs...

  • Uitvoering en debuggen programma's in een geïntegreerde omgeving programmeren Turbo Pascal (MS-Dos)

    Laboratoriumwerk >> Informatica, programmeren

    Praktisch gebruik van geïntegreerde omgevingen programmeren met het doel te vervullen en debuggen programma's in Pascal-taal. THEORETISCHE... INFORMATIE Basiscomponenten van het systeem programmeren Turbo...

  • 2. Actieve foutopsporingstools

    2.1. Architectuur van actieve foutopsporingstools

    Over het algemeen bestaat een cross-debugger uit 2 hoofdmodules: een manager op het toolplatform en een debugging-agent aan de doelzijde. De manager zorgt ervoor gebruikersinterface, dat wil zeggen, voor het ontvangen van opdrachten, het verwerken ervan en het verzenden ervan naar de doelzijde, evenals voor het ontvangen, verwerken en uitgeven van informatie van de agent die rechtstreeks werkt met het systeem waarvan fouten worden opgespoord. De mogelijkheden van de foutopsporingsagent zijn afhankelijk van de kenmerken van de systeemarchitectuur, namelijk:

    Beschikt het systeem over ingebouwde foutopsporingstools (in dit geval hoeft de agent alleen de juiste functies aan te roepen en de resultaten naar de manager te sturen);

    Welke mogelijkheden biedt het voor het maken van handlers (om de gebeurtenissen die plaatsvinden te controleren, heeft de agent mogelijk zijn eigen handler nodig);

    Welke functieaanroepen mag de agent uitvoeren?

    Bovendien moet de foutopsporingsagent de mogelijkheid ondersteunen om informatie te ontvangen en te verzenden van pseudo-agents die zijn ingebouwd in de code van de programma's waarvan fouten worden opgespoord. De foutopsporingsagent kan uit verschillende modules bestaan. De ene verzamelt bijvoorbeeld gegevens, de andere voert filtering uit en de derde verzendt gegevens naar de manager.

    De algemene structuur van de actieve cross-debugger wordt getoond in Fig. 2.

    Rijst. 2. Actieve cross-debugger

    Laten we eens kijken naar het manager-agent-protocol met behulp van de VxGDB-debugger (Wind River Systems, doelsysteem-VxWorks). Dit protocol is gebaseerd op RPC (Remote Procedure Call). Managerverzoeken kunnen als volgt worden geclassificeerd:

    Hierbij valt te denken aan een verzoek om een ​​module te laden, een verzoek om informatie hierover te verkrijgen opstartbestand en een verzoek om informatie over het symbool te verkrijgen.

    Dit zijn verzoeken om een ​​taak te starten, stoppen en verwijderen, om aan te koppelen en los te koppelen lopende taak, om een ​​breekpunt in te stellen en te verwijderen, om door te gaan met het uitvoeren van een gestopte taak.

    3. ptrace-verzoeken

    De debug-agent emuleert de ptrace-functie en geeft er de juiste lees- en schrijfverzoeken aan door.

    Uit het boek Debugging Real-Time Systems [Review] auteur Kostyukhin K A

    2.1. Architectuur van actieve debugging-tools Over het algemeen bestaat een cross-debugger uit 2 hoofdmodules: een manager op het toolplatform en een debugging-agent aan de doelzijde. De manager dient om de gebruikersinterface te bieden, dat wil zeggen om opdrachten te ontvangen

    Uit het boek Computerwetenschappen en informatietechnologie: collegeaantekeningen auteur Tsvetkova AV

    4. Registers debuggen Dit is erg interessante groep registers bedoeld voor hardware-foutopsporing. Hardware-foutopsporingstools verschenen voor het eerst in de i486-microprocessor. In hardware bevat de microprocessor acht debug-registers, maar in werkelijkheid alleen

    Uit het boek Computerwetenschappen en informatietechnologie auteur Tsvetkova AV

    46. ​​Debug Registers Dit is een zeer interessante groep registers ontworpen voor het debuggen van hardware. Hardware-foutopsporingstools verschenen voor het eerst in de i486-microprocessor. In hardware bevat de microprocessor acht debug-registers, maar in werkelijkheid alleen

    Uit het boek Office 2007. Multimediacursus auteur Medinov Oleg

    De actieve cel opmaken U kunt de presentatie van gegevens in elke cel of bereik naar eigen inzicht aanpassen, dat wil zeggen: de actieve cel of het geselecteerde bereik opmaken. Om naar toe te gaan deze modus, voer de opdracht uit contextmenu Celformaat

    Uit het boek Windows Script Host voor Windows 2000/XP auteur Popov Andrej Vladimirovitsj

    Bijlage 3 Tools voor het ontwikkelen en debuggen van scripts In principe kunt u scripts maken in Windows Kladblok of binnen teksteditors bestandsshells zoals Verre manager, en debug ze door variabele waarden op de juiste plaatsen in het script op het scherm weer te geven (de Echo-objectmethode

    Uit het boek Applicatieontwikkeling in Linux-omgeving. Tweede editie auteur Johnson Michaël K.

    Hoofdstuk 7 GeHoewel C dat ongetwijfeld is standaard taal programmeren in Linux-systemen, heeft het een aantal functies die programmeurs ervan weerhouden code te schrijven die geen subtiele fouten bevat, die later erg voorkomen

    Uit het boek VBA voor Dummies door Steve Cummings

    Toetscombinaties voor foutopsporing in tabel. Tabel 9.1 geeft een overzicht van de toetscombinaties die worden gebruikt bij het opsporen van fouten. Ik zal ze allemaal in detail bespreken verderop in dit hoofdstuk. Code-uitvoering per regel (stap voor stap). Regel voor regel uitvoering van code zonder regel voor regel uitvoering

    Uit het boek Programmeren van PDA's en smartphones op het .NET Compact Framework auteur Klimov Alexander P.

    Programma's voor het debuggen van toepassingen In dit hoofdstuk worden de hulpprogramma's besproken die nodig zijn voor het succesvol programmeren van toepassingen mobiele apparaten. Misschien wel de belangrijkste van deze hulpprogramma's is de Device Emulator-software-emulator. Daarnaast de compositie Visuele studio 2005 inbegrepen

    Uit het Linux-boek: Volledige gids auteur Kolisnichenko Denis Nikolajevitsj

    21.1.7. Foutopsporingsopties Als u een debugger zoals gdb wilt gebruiken om fouten in uw programma op te sporen, specificeert u de optie -g wanneer u de compiler aanroept. Deze optie wordt in het gecompileerde bestand geplaatst foutopsporingsinformatie, waardoor de bestandsgrootte aanzienlijk toeneemt. Dat is waarom

    Uit het boek Linux Programmeren met Voorbeelden auteur Robbins Arnold

    15.2. Compileren voor foutopsporing Om de broncode-debugger te gebruiken, de debugger uitvoerbaar bestand moet worden gecompileerd met de compileroptie -g. Deze optie zorgt ervoor dat de compiler extra foutopsporings-ID's in de objectcode insluit; dat is

    Uit het boek Programmeren voor Linux. Professionele aanpak door Mitchell Mark

    15.4. Programmeren voor het debuggen Er zijn veel technieken beschikbaar om het debuggen van de broncode eenvoudiger te maken, variërend van eenvoudig tot complex. In deze sectie zullen we er een aantal bekijken

    Uit het boek UNIX: Ontwikkeling netwerktoepassingen auteur Stevens Willem Richard

    15.7. Regels voor foutopsporing Foutopsporing is geen zwarte magie. De principes en technieken kunnen door iedereen worden geleerd en consequent worden toegepast. Voor dit doel raden wij het boek Debugging van David J. Agans (ISBN: 0-8144-7168-4) aan. Het boek heeft een website die de regels samenvat en

    Uit het boek Beschrijving van de PascalABC.NET-taal auteur RuBoard-team

    A.2.6. Foutopsporingstools kiezen We hebben vier verschillende, onderling incompatibele tools bekeken voor het diagnosticeren van onjuiste gebruiksscenario's. dynamisch geheugen. Geen enkele tool kan gegarandeerd alle fouten vinden, maar het is beter dan volledige afwezigheid

    Uit het boek De ideale programmeur. Hoe word je eenl? auteur Martin RobertS.

    Bijlage B Foutopsporingstechnieken Deze bijlage bevat enkele richtlijnen en technieken voor het opsporen van fouten in netwerktoepassingen. Geen van de bovenstaande methoden is een wondermiddel voor iedereen mogelijke problemen Er zijn echter veel tools waarmee

    Uit het boek van de auteur

    Sectie Foutopsporing In versie 4.9 van het Programmeringstakenboek zijn er hulpmiddelen verschenen waarmee u foutopsporingsinformatie rechtstreeks in het takenboekvenster kunt weergeven (in speciale sectie debuggen). De behoefte daaraan extra fondsen ontstaat vooral bij het werken met

    Uit het boek van de auteur

    Tijd voor foutopsporing Om een ​​onbekende reden beschouwen ontwikkelaars het debuggen niet als een natuurlijk onderdeel van het ontwikkelingsproces. Het lijkt hen dat debuggen verwant is aan een fysiologische behoefte: ze doen het simpelweg omdat het onvermijdelijk is. De tijd voor het opsporen van fouten kost het bedrijf echter precies