Programfelsökning

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 7 april 2022; kontroller kräver 4 redigeringar .

Felsökning  är ett steg i utvecklingen av ett datorprogram , där fel upptäcks, lokaliseras och elimineras. För att förstå var felet uppstod måste du:

Det finns två kompletterande felsökningstekniker:

Platsen för felsökning i utvecklingscykeln för ett program

En typisk utvecklingscykel, som upprepas många gånger under ett programs livstid, ser ut ungefär så här:

  1. Programmering  - införande av ny funktionalitet i programmet, korrigering av befintliga fel .
  2. Testning (manuell eller automatiserad; av en programmerare, testare eller användare; " rök ", i black box- läge eller modulärt ) - upptäckt av ett fel.
  3. Att återskapa ett fel är att ta reda på under vilka förhållanden ett fel uppstår. Detta kan visa sig vara en knepig uppgift när man programmerar samtidiga processer och med några ovanliga buggar som kallas heisenbugs .
  4. Debugging  - Hitta orsaken till ett fel.

Verktyg

Felsökning kräver ofta hög kompetens och betydande resurser. Förmågan hos en programmerare att felsöka är en viktig faktor för att hitta källan till ett problem, men svårigheten att felsöka är starkt beroende av programmeringsspråket och de verktyg som används, särskilt debuggers .

Felsökningsverktyg

En debugger är ett mjukvaruverktyg som låter programmeraren observera körningen av programmet som undersöks, stoppa och starta om det, köra det i slow motion, ändra värden i minnet och till och med, i vissa fall, gå tillbaka i tiden.

Användbara verktyg i händerna på en programmerare kan också vara:

Att använda programmeringsspråk på hög nivå gör vanligtvis felsökningen lättare om sådana språk innehåller till exempel undantagshanteringsmöjligheter som gör det mycket lättare att hitta källan till problemet. På lågnivåspråk kan buggar leda till subtila problem som minneskorruption och minnesläckor . Då kan det vara ganska svårt att avgöra vad som var den ursprungliga orsaken till felet. I dessa fall kan komplexa tekniker och felsökningsverktyg krävas.

"Vårt personliga val är att försöka att inte använda debuggers, förutom att se anropsstacken eller värdena för ett par variabler . En anledning till detta är att det är mycket lätt att gå vilse i detaljerna i komplexa datastrukturer och programexekveringsvägar. Vi tycker att det är mindre produktivt att gå igenom ett program än att tänka hårt och kodkontrollera sig själv vid kritiska punkter.

Att klicka på operatörer tar mer tid än att titta på operatörernas meddelanden för att utfärda felsökningsinformation, placerad på kritiska punkter. Det är snabbare att bestämma var en debug-sats ska placeras än att gå igenom viktiga delar av koden, även om vi antar att vi vet var dessa avsnitt är. Ännu viktigare är att felsökningssatser bevaras i programmet, och felsökningssessioner är övergående.

Blind vandring i felsökaren är troligen improduktivt. Det är mer användbart att använda en debugger för att ta reda på tillståndet för programmet där det gör ett misstag, och sedan tänka på hur ett sådant tillstånd kan uppstå. Debuggers kan vara komplexa och förvirrande program, särskilt för nybörjare, för vilka de kommer att vara mer förbryllande än användbara ... "

“Felsökning är svårt och kan ta oförutsägbart lång tid, så målet är att kringgå det mesta. Tekniker som kan hjälpa till att minska felsökningstiden inkluderar bra design, bra stil , kontroll av gränstillstånd, validering av initiala påståenden och kodens rimlighet, defensiv programmering , väldesignade gränssnitt, begränsad användning av globala variabler, automatiska kontroller och kontroller. Ett uns av förebyggande är värt massor av botemedel."

Brian Kernighan och Rob Pike

Verktyg som minskar behovet av felsökning

En annan riktning är att göra felsökning så sällan som möjligt. För detta gäller:

Kodsäkerhet och felsökning

Det kan förekomma så kallat odokumenterat beteende i programkoden  – allvarliga fel som inte dyker upp under den normala programkörningen, men som är mycket farliga för hela systemets säkerhet vid en riktad attack. Oftast är detta resultatet av programmeringsfel. De mest kända exemplen är SQL-injektion och buffertspill . I det här fallet är uppgiften att felsöka:

Det finns sådana metoder:

Se även

Anteckningar

Litteratur

Länkar