Påståenden, fel och kraschar: Vad är skillnaden?

0
197
Shutterstock/SkillUp

Datorproblem. Vi har alla dem förr eller senare. Att känna till och ta bort fel, påståenden, kraschar och mer är viktigt för att förstå mer om det aktuella problemet. Lär dig allt om det.

Vad är en påstående ?

När en utvecklare börjar skriva kod, de kommer snart att införa om uttalanden där. Ett if-uttalande används när ett visst tillstånd behöver testas. Till exempel kan man skriva en pseudokod om uttalande enligt följande:

if (water_level & gt; high_water_mark) then {raise_alert}

Med andra ord, om vattennivån går över det höga märket, höjs en varning. Men kanske är vattensensorn trasig, så vi uppdaterar koden så att den matchar:

if (sensor_readout == meningslöst) då {raise_error fail} annat {if (water_level & gt; high_water_mark) då {raise_alert}}

Bra, nu får vi ett fel och misslyckas med rutinen om sensor_readout är meningslöst. Och bara om värdet visar sig vara sensiskt (på grund av den andra klausulen & # 8212; dvs vad man ska göra i motsatt situation), fortsätt med att kontrollera vattennivån mot high_water_mark.

Men kanske någon har stängde av strömmen till sensorn. Vi kan fortsätta så här ett tag. Vi kan täcka alla tänkbara scenarier och ändå missa några. Visst, vi kan täcka alla möjliga situationer med en matchande annars klausul och verifiera att varje villkor kontrolleras mot en annan, men även i sådana fall kanske vi har missat några kombinationer av variabler.

Även om vi bara hade en begränsad uppsättning variabler att arbeta med, är antalet möjliga kombinationer som ett programvarupaket kan hitta sig i ganska stort. Och vad mer är, den här typen av villkorliga tester sker ganska regelbundet i nästan all programvara.

Att resonera lite längre om detta dilemma förstår vi snabbt att vi (som utvecklare) kanske (precis som alla människor gör fel) förr eller senare introducerar kod som låter programvaran springa till odefinierat territorium. Variabel x är inställd på ett specifikt värde, variabel y tilldelas till en annan, och det fanns ingen bestämmelse för detta i koden.

Detta är just den situationen som en påstående till viss del kan ge . En påstående är ett annat villkor (Tänk på det som ett annat if-uttalande.) Som hävdar om det finns en viss udda/ovanlig/oplanerad/oförutsedd situation och hanterar vanligtvis en sådan situation genom att stoppa programmet snarare än att fortsätta att köra med ett odefinierat/okänt tillstånd .

Även om nätet som tillgångstestet kommer att kasta fortfarande är begränsat till smarta kunskaper hos utvecklaren som implementerar påståendet, kan en påstående ofta göras bredare än de begränsade gränserna för om uttalanden testar tillståndet för olika variabler, eller det kan vara gjort ganska specifikt för att undvika vissa farliga situationer.

Låt oss till exempel säga att vår lilla vattensensor är monterad i en regntank. Vattnet bör därför aldrig koka. Om vår vattensensor hade en temperaturmätare kunde vi dock se till, även om det skulle/borde aldrig hända. Låt oss lägga till en påstående till den pseudokod som vi började ovan.

Istället för kokpunkten (100 grader Celsius) kommer vi att kontrollera om det är mer rimligt högst 70 grader Celsius, vilket borde fortfarande aldrig nås när man tänker på att fånga regnvatten, åtminstone, enligt vår åsikt. Kom ihåg ordet & # 8220; åsikt, & # 8221; eftersom detta blir viktigt när man överväger smarta utvecklare som implementerar påståendet. (Mer om detta nedan.)

if (sensor_readout == meningslöst) då {raise_error fail} else {assert (water_temp & lt; 70.0) {raise_assert_message fail exit} if (water_level & gt; high_water_mark) then {raise_alert}}

Vi skrev påståendet omvänd. Koden måste hävda att vattentemperaturen är mindre än 70 grader Celsius. Om det inte är det kommer det att utföra kodblocket, vilket kommer att ge ett meddelande, och då kommer programvaran att misslyckas och avslutas.

Påståenden i verklig kod är ganska lik exemplet ovan. De testar om en given situation gäller eller inte, och stoppar därefter (eller kraschar på ett kontrollerat sätt) programmet/programvaran till hands.

Ofta loggas dessa tillgångar till programmets loggfiler eller till och med direkt på skärmutgången. Granskning av dem och/eller sökning efter en kopia av det exakta meddelandet i din favoritsökmotor leder dig ofta (om felet hittades tidigare) till en felrapport om samma.

Påståendemeddelanden är ofta fel, även om de helt enkelt kan vara fel i utvecklarens resonemang. När allt kommer omkring, vem säger att regnet kanske inte blir varmare än 70 grader Celsius om 1000 år? (Vi hoppas dock inte!)

Ett påståendemeddelande är den utdata som återges av påståendet som utvecklarna införde i koden & # 8212; dvs den faktiska textutmatningen som genereras av programvaran och som visas på skärmen eller i loggarna. Föreställ dig till exempel att detta meddelande visas för programmet ovan.

Påstående: (water_temp & lt; 70): (88 & lt; 70): false

Även om det ser lite kryptiskt ut (som vissa påstående meddelanden är), ser vi lite närmare att vi i andra delen utbytt water_temp av 88 och att utmatningen är falsk (dvs, påstått vatten_temp & lt; 70 misslyckades eftersom vattnet var 88 grader, och därmed utlöste påståendet påståendet). Ja, det kan bli lite förvirrande.

Beväpnad med dessa nya färdigheter blir felsökning av ett meddelande nästa gång du ser en mycket enklare. Du kanske också tycker att det är lättare att förstå exakt vad som gick fel när applikationen stannade.

Vad är ett fel ?

Datorfel inträffar hela tiden och av en mängd olika skäl. De händer både på utvecklar- och användarnivå och vid varje steg däremellan. Till exempel kan en DevOps-ingenjör glömma att inkludera en nödvändig fil, eller en paketunderskrivare kan använda fel nyckel för att signera programvaran och så vidare.

Kort sagt kan ett datorfel definieras som ett problem med maskinvara eller programvara. Det finns några exempel på ett fel även i den begränsade pseudokoden ovan. När sensor_readout == meningslöst villkor är uppfyllt visas ett felmeddelande.

Det finns vissa fel som är vanligare än andra. Till exempel är att använda fel sökväg eller filnamn ett vanligt fel. Strömrelaterade problem (till exempel låg batterinivå) är också ganska vanliga fel.

Fel är helt separata och skiljer sig från påståendemeddelanden, även om påståendemeddelandet i sig kan ses som ett fel, eller snarare, som en odefinierad situation som nu täcks av påståendet. I allmänhet översätts ett datorfel vanligtvis till & # 8220; Jag behöver en människa för att åtgärda detta & # 8221; ganska bra.

När datorer blir mer intelligenta och AI utvecklas kommer förhoppningsvis färre fel att produceras, även om det finns mycket utrymme kvar för diskussioner och till och med argument inom det området.

Vad är en krasch ?

En datorkrasch kan ta många former. Vi är alla bekanta med Microsoft Windows blå skärmar, som tenderade att hända när en applikation uppträdde felaktigt eller någon kärndel av operativsystemet eller maskinens maskinvara skulle misslyckas.

För det mesta är dock en krasch en programvara som hamnade i en odefinierad situation. Det finns många sådana odefinierade scenarier möjliga. En dator kan ha försökt att skriva till ett RAM-område som redan används och därigenom upprört sig själv eller ett annat program, eller kanske det stötte på ett scenario där den försökte dela med noll (vilket är omöjligt) eller någon liknande situation.

Många operativsystem skriver en kärndumpfil (om den är konfigurerad), vilket gör det möjligt för en utvecklare och ibland en slutanvändare som är lite skicklig att felsöka problemet.

Om du vill lära dig mer om felsökning när saker går fel, inklusive analys av kärndumpfiler, kommer du sannolikt att hitta vår felsökning med GDB: Komma igång-artikeln som är av intresse.

En krasch kan också vara resultat av en applikation som hamnar i en odefinierad situation, som inte hanteras av ett fel (det lättaste sättet för en applikation att informera dig om att något är fel) eller ett påstående (en djupare fråga, ursprungligen utesluten av utvecklaren som omöjlig men fortfarande förekommer

Observera också att ett program som bygger för att testa & # 8212; dvs med felsökningsinformation (inklusive endast påståenden om felsökningsnivå) inbäddat i slutresultatet binärt & # 8212; kan krascha när det producerar en hävda, som är fallet, till exempel med MySQL-servern.

Packa upp

I den här artikeln undersökte vi begreppen påståenden, fel och kraschar samt hur de relaterar. Vi tog en djupgående titt på hur påståenden kan se ut inuti koden och hur detta relaterar till ett verkligt exempel på övervakning av vattennivå och temperatur med en vattensensor. Nästa gång du stöter på ett påståendemeddelande, ta en närmare titt och njut av felsökningen!