0%

Opdrachten, configuratie en fouten · oefening

Vind welke laag misging

De snelste vraag bij probleemoplossing is niet “wat zal ik proberen?”, maar “hoe ver kwam het verzoek?” Een foutmelding is bewijs over de laatste laag die nog werkte. Zo gelezen verandert een muur van rode tekst in een locatie.

Lees fouten op volgorde

Loop voor de startvoorbeelden in deze cursus vier vragen langs:

  1. Opdracht opzoeken: heeft de shell het genoemde programma gevonden en gestart?

  2. Pad opzoeken: heeft dat programma het opgegeven doel gevonden?

  3. Toestemming: stond het besturingssysteem de handeling toe?

  4. Programma: heeft het programma zijn eigen werk afgemaakt?

Begin bij de eerste fout die het bewijs aanwijst. Dit zijn categorieën voor diagnose, geen vier fasen die elk programma precies één keer doorloopt. Rechten kunnen verhinderen dat een programma start, en een draaiend programma kan later mislukken bij het openen van een ander bestand. Lees de volledige melding om de mislukte handeling te vinden. Het schema stelt dezelfde vragen: COMMAND FOUND? (opdracht gevonden?), PATH FOUND? (pad gevonden?), ALLOWED? (toegestaan?) en PROGRAM COMPLETED? (programma voltooid?). Een ja leidt verder (YES → next), tot het klaar is (DONE); de onderste vakken koppelen de mislukte laag aan de Engelse foutmelding.

Een stroomschema voor probleemoplossing controleert achtereenvolgens het opzoeken van de opdracht, het opzoeken van het pad, de toestemming en het voltooien van het programma. Het koppelt elke fout aan de melding die daarbij hoort.
AanwijzingMislukte laagEerste nuttige stap
pythno: command not foundOpdracht opzoekenControleer de spelling en vraag de shell daarna waarnaar die naam verwijst.
can't open file '/workspace/data/report.py'Pad opzoekenVergelijk het geprobeerde pad met je huidige locatie en de werkelijke structuur.
permission deniedToestemmingBekijk het exacte doel en de handeling. Begin niet met het verruimen van rechten.
Een traceback met een bestandsnaam en regelnummerProgrammaLees de laatste regel van de traceback en bekijk daarna die programmaregel.

Elke melding vertelt je ook wat al is gelukt. Een traceback bewijst dat de shell Python heeft gevonden en dat Python het bestand heeft gevonden. Een melding dat Python zijn bronbestand niet kan openen laat zien dat Python is gestart, maar het bestand op het geprobeerde pad niet kon bereiken. Het pad kan verkeerd zijn of het bestand kan ontbreken. Een melding dat de opdracht niet is gevonden bewijst dat geen van beide zo ver kwam.

Een traceback somt op waar een fout optrad terwijl Python draaide. De laatste regel noemt de fout en geeft een melding. Een traceback die eindigt met PermissionError: ... Permission denied betekent bijvoorbeeld dat Python is gestart en dat daarna een handeling binnen het programma werd geweigerd. Een traceback die eindigt met FileNotFoundError wijst op een bestand dat het draaiende programma niet kon vinden. Installeer Python niet opnieuw alleen omdat een latere bestandsbewerking mislukte.

Oefenen met diagnose

Reset de werkruimte van hoofdstuk 7 en begin in /workspace. Die bevat een werkende report.py, een bewust defecte broken-report.py en een map data.

Veroorzaak drie van de vier fouten zelf en lees de vierde in een weergave van terminaluitvoer.

python missing-report.py
python broken-report.py
pythno report.py

De laatste melding van Bash zegt pythno: command not found. Die melding komt van de shell. Voor die regel is Python nooit gestart.

Voor een rechtenfout is een bestand nodig waarvan de rechten verkeerd staan. Deze cursus vraagt je niet om dat te maken. Lees in plaats daarvan deze terminaluitvoer en deel de fout alleen op basis van de formulering in:

bash: ./locked-tool: Permission denied

Let erop dat de shell ./locked-tool goed genoeg vond om het te proberen. Er was niets verkeerd gespeld en er ontbrak geen pad. Het besturingssysteem weigerde de geprobeerde handeling. Rechteninstellingen inspecteren en wijzigen valt hier bewust buiten de les. De nuttige beginnersstap is het bewijs indelen zonder blindelings rechten te verruimen.

Oefening: deel alle vier in

Schrijf nadat je alle vier de gevallen hebt gezien op bij welke laag elk geval misging. Maak destination/diagnosis.txt met vier regels, één per geval, in deze volgorde:

  1. pythno report.py

  2. python missing-report.py

  3. ./locked-tool geweigerd

  4. python broken-report.py

Gebruik voor elk geval exact één van deze labels: command-lookup, path-lookup, permission of program. Het bewijsbestand moet precies vier niet-lege regels hebben in deze vorm:

case1=<layer>
case2=<layer>
case3=<layer>
case4=<layer>

Schrijf de eerste regel met Set-Content in PowerShell of > in Bash. Voeg de andere drie daarna toe met Add-Content of >>. Lees het resultaat met Get-Content of cat en controleer de volgorde voordat je je werk indient. Laat beide meegeleverde programma’s exact zoals ze zijn.

De controle kan de vier labels en de meegeleverde oefenbestanden beoordelen, maar kan je terminal niet opnieuw afspelen. Veroorzaak de fouten en lees wie er spreekt. Anders zijn die vier overgeschreven woorden vooral een bewijsbestand aan het spelen.

Twijfel je tussen twee lagen, ga dan terug naar de fouttekst en vraag welk programma die heeft gemaakt. Het antwoord zit bijna altijd in wie er spreekt: de shell, de starter, het besturingssysteem of het programma zelf.

Je voert python report.py uit. De terminal toont een traceback die regel 12 van report.py noemt. Welke conclusie wordt ondersteund voordat je iets verandert?

Een teamgenoot meldt alleen: "Het project start niet." Wat kun je het beste als eerste vragen?

Je hebt nu een werkwijze in plaats van een lijst gokjes. Het laatste hoofdstuk opent met een vage melding over iets dat ontbreekt en vraagt je te bewijzen wat er werkelijk mis is.