Program debugging

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 7. april 2022; checks kræver 4 redigeringer .

Debugging  er et trin i udviklingen af ​​et computerprogram , hvor fejl opdages, lokaliseres og elimineres. For at forstå, hvor fejlen opstod, skal du:

Der er to komplementære fejlfindingsteknologier:

Stedet for fejlretning i et programs udviklingscyklus

En typisk udviklingscyklus, der gentages mange gange i løbet af et programs levetid, ser nogenlunde sådan ud:

  1. Programmering  - introduktion af ny funktionalitet i programmet, rettelse af eksisterende fejl .
  2. Test (manuel eller automatiseret; af en programmør, tester eller bruger; " røg ", i sort boks -tilstand eller modulær ) - påvisning af en fejl.
  3. At gengive en fejl er at finde ud af, under hvilke forhold en fejl opstår. Dette kan vise sig at være en vanskelig opgave ved programmering af samtidige processer og med nogle usædvanlige fejl kendt som heisenbugs .
  4. Debugging  - Find årsagen til en fejl.

Værktøjer

Fejlretning kræver ofte høj dygtighed og betydelige ressourcer. En programmørs evne til at debugge er en vigtig faktor for at finde kilden til et problem, men sværhedsgraden ved fejlretning afhænger i høj grad af programmeringssproget og de anvendte værktøjer, især debuggere .

Fejlfindingsværktøjer

En debugger er et softwareværktøj, der gør det muligt for programmøren at observere udførelsen af ​​det undersøgte program, stoppe og genstarte det, køre det i slowmotion, ændre værdier i hukommelsen og endda i nogle tilfælde gå tilbage i tiden.

Også nyttige værktøjer i hænderne på en programmør kan være:

Brug af programmeringssprog på højt niveau gør normalt fejlfinding lettere, hvis sådanne sprog for eksempel indeholder undtagelseshåndteringsfaciliteter, der gør det meget nemmere at finde kilden til problemet. I sprog på lavt niveau kan fejl føre til subtile problemer såsom hukommelseskorruption og hukommelseslækager . Så kan det være ret svært at fastslå, hvad der var den oprindelige årsag til fejlen. I disse tilfælde kan komplekse teknikker og fejlfindingsværktøjer være påkrævet.

"Vores personlige valg er at prøve ikke at bruge debuggere, undtagen at se opkaldsstakken eller værdierne af et par variabler . En grund til dette er, at det er meget nemt at gå tabt i detaljerne i komplekse datastrukturer og programudførelsesstier. Vi finder det mindre produktivt at træde gennem et program end hård tænkning og kodekontrol på kritiske punkter.

Det tager mere tid at klikke på operatører end at se operatørernes beskeder for at udstede fejlretningsoplysninger, placeret på kritiske punkter. Det er hurtigere at beslutte, hvor en debug-sætning skal placeres, end det er at gå gennem kritiske sektioner af kode, selv hvis vi antager, hvor disse sektioner er. Endnu vigtigere er det, at debug-sætninger bevares i programmet, og debugger-sessioner er forbigående.

Blind vandring i debuggeren er højst sandsynligt uproduktivt. Det er mere nyttigt at bruge en debugger til at finde ud af tilstanden af ​​det program, hvor det laver en fejl, og så tænk på, hvordan en sådan tilstand kan opstå. Debuggere kan være komplekse og forvirrende programmer, især for begyndere, for hvem de vil være mere forvirrende end nyttige ... "

“Fejlretning er svært og kan tage uforudsigeligt lang tid, så målet er at omgå det meste. Teknikker, der kan hjælpe med at reducere fejlretningstiden, omfatter godt design, god stil , kontrol af grænsetilstande, validering af indledende påstande og rimelighed af kode, defensiv programmering , veldesignede grænseflader, begrænset brug af globale variabler, automatiske kontroller og kontroller. En ounce forebyggelse er et ton kur værd."

Brian Kernighan og Rob Pike

Værktøjer, der reducerer behovet for fejlretning

En anden retning er at gøre fejlfinding så sjælden som muligt. For dette gælder:

Kodesikkerhed og debugging

Der kan være tale om såkaldt udokumenteret adfærd i programkoden  – alvorlige fejl, som ikke optræder under det normale programafviklingsforløb, men som er meget farlige for hele systemets sikkerhed ved et målrettet angreb. Oftest er dette resultatet af programmørfejl. De mest berømte eksempler er SQL-injektion og bufferoverløb . I dette tilfælde er opgaven med at fejlfinde:

Der er sådanne metoder:

Se også

Noter

Litteratur

Links