3.8. Fejlfinding

Nogle gange er programmer ret dårlige til at forklare, hvorfor det gik galt. Kommandoen strace er god til at fejlsøge med. Det gælder specielt ved fejl som:

Her vil strace ofte kunne give dig en idé om, hvad der skete lige inden fejlen indtrådte, og med lidt held kan du ud af dette gætte, hvad der gik galt. Måske mangler du en fil eller måske bruger programmet den forkerte version af et library.

strace står for system trace og viser alle de kald, der er til library-rutiner. Hvis man vil se, hvilke kald ls laver, så skriver man:

[tyge@hven ~]$ strace ls

Det går hurtigt op for een, at der kommer ret meget output. Da problemerne ofte er fil-relateret, så kan man nøjes med at få vist de fil-relaterede systemkald:

[tyge@hven ~]$ strace -e trace=file ls

Hvis programmet starter andre processer (f.eks. ved at kalde andre programmer), så kan man strace disse med '-ff'. Prøv at se forskellen på disse to:

[tyge@hven ~]$ strace time ls
[tyge@hven ~]$ strace -ff time ls

Hvis du strace'r programmer, der kører under X, så vil du ofte få utroligt meget output. Du kan proppe det i en fil ved at redirigere stderr:

[tyge@hven ~]$  strace -ff time ls 2>/tmp/fil

En anden mulighed er at starte strace fra en shell i emacs:

[tyge@hven ~]$ emacs
M-x shell
[tyge@hven ~]$ strace ...

Herved får du mulighed for at bladre i outputtet med det samme.