C:
Utskrift av feilsøkingsdata
Hvordan:
I C er den vanligste måten å skrive ut feilsøkingsutdata på ved å bruke printf
-funksjonen fra standard I/U-biblioteket. printf
-funksjonen tillater formatert utdata til standard utenhetsenhet, som typisk er skjermen. Her er et enkelt eksempel:
#include <stdio.h>
int main() {
int x = 5;
printf("Debug: Verdien av x er %d\n", x);
// Programlogikken din her
return 0;
}
Eksempel på utdata:
Debug: Verdien av x er 5
For en mer sofistikert feilsøkingsutskrift, ønsker du kanskje å inkludere filnavn og linjenummerinformatjon. Dette kan gjøres ved å bruke de forhåndsdefinerte makroene __FILE__
og __LINE__
slik:
#define DEBUG_PRINT(fmt, args...) fprintf(stderr, "DEBUG: %s:%d: " fmt, __FILE__, __LINE__, ##args)
int main() {
int testverdi = 10;
DEBUG_PRINT("Testverdien er %d\n", testverdi);
// Programlogikken din her
return 0;
}
Eksempel på utdata:
DEBUG: example.c:6: Testverdien er 10
Merk at i dette eksemplet bruker vi fprintf
for å skrive ut til feilstrømmen (stderr
), som ofte er mer passende for feilsøkingsmeldinger.
Dypdykk
Historisk sett har feilsøkingsteknikker i C vært manuelle og grunnleggende, på grunn av språkets nærhet-til-maskinvaren filosofi og alder. Mens moderne språk kanskje inkluderer sofistikerte innebygde feilsøkingsbiblioteker eller i stor grad stoler på funksjoner i integrerte utviklingsmiljøer (IDEer), tyr C-programmererne ofte til å manuelt sette inn printf-uttrykk som vist ovenfor for å spore programkoden sin under kjøring.
En ting man bør være forsiktig med når det gjelder feilsøkingsutskrifter er deres potensial til å forårsake rot i utdata og føre til ytelsesproblemer, spesielt hvis de ved et uhell blir liggende igjen i produksjonskoden. Av disse grunnene kan bruk av betinget kompilering (f.eks., #ifdef DEBUG ... #endif
) være en bedre tilnærming, slik at feilsøkingssetninger kan inkluderes eller ekskluderes basert på kompileringstidsflagg.
Videre finnes det nå mer avanserte verktøy og biblioteker tilgjengelige for C-feilsøking, som GDB (GNU Debugger) og Valgrind for oppdaging av minnelekkasjer. Disse verktøyene tilbyr en mer integrert tilnærming til feilsøking, uten behovet for å endre kode ved å sette inn utskriftssetninger.
Likevel kan ikke enkelheten og den umiddelbare tilbakemeldingen fra printf
-feilsøking undervurderes, noe som gjør den til et nyttig verktøy i utviklerens verktøykasse, spesielt for de som nettopp lærer seg detaljene i C.