
Computerprobleme. Wir alle haben sie früher oder später. Kennen Sie die Besonderheiten von Fehlern, Affirmationen, Fehler und mehr ist wichtig, um mehr über das vorliegende Problem zu verstehen. Erfahren Sie alles darüber.
Was ist ein Anspruch?
Wenn ein Entwickler mit dem Schreiben von Code beginnt, wird bald präsentieren if
Aussagen darin. ein if
Die Deklaration wird immer dann verwendet, wenn eine bestimmte Bedingung getestet werden muss. Als Beispiel, man könnte einen Pseudocode schreiben if
Erklärung zum nächsten Weg:
wenn (Wasserstand > Hochwassermarke) dann { raise_alert }
Mit anderen Worten, wenn der Wasserstand die Höchstmarke überschreitet, eine Warnung wird generiert. Aber vielleicht ist der Wassersensor defekt, also aktualisieren wir den Code entsprechend:
wenn (sensor_readout == unsinnig) dann {
raise_error
fail
}anders{
wenn (Wasserstand > Hochwassermarke) dann {
raise_alert
}
}
Genial, Jetzt erhalten wir einen Fehler und die Routine schlägt fehl, wenn sensor_readout keinen Sinn ergibt. Und nur, wenn sich Mut als vernünftig erweist (Wegen des else
Klausel, Mit anderen Worten, was in der gegenteiligen Situation zu tun ist), Fahren Sie fort, um den water_level mit dem high_water_mark zu überprüfen.
Trotz dieses, Vielleicht hat jemand den Sensor ausgeschaltet. So können wir noch eine Weile weitermachen. Wir können jedes erdenkliche Szenario abdecken und dennoch einige vermissen. Natürlich, wir könnten alle möglichen Situationen mit einer Kombination abdecken else
Klausel und vergewissern Sie sich, dass jede Bedingung mit einer anderen verglichen wird, aber auch in solchen Fällen, wir hätten einige Kombinationen von Variablen übersehen können.
Auch wenn wir nur eine begrenzte Anzahl von Variablen hätten, mit denen wir arbeiten konnten, die Zahl der möglichen Kombinationen, in denen ein Softwarepaket zu finden ist, ist recht zahlreich. Und was ist mehr, diese Art von if
Bedingte Tests treten in fast jeder Software ziemlich regelmäßig auf.
Ein bisschen mehr über dieses Dilemma nachdenken, wir verstehen schnell, dass wir (als Entwickler) wir könnten (wie alle Menschen machen wir Fehler) früher oder später Code einführen, der es der Software ermöglicht, in undefiniertem Gebiet zu laufen. Die Variable x wird auf einen bestimmten Wert gesetzt, die Variable und wird einer anderen zugewiesen, und das war im Code nicht vorgesehen.
Das ist genau die Situation, die eine Aussage machen kann, bis zu einem bestimmten punkt, zur Verfügung stellen. Eine Affirmation ist eine weitere Bedingung (betrachte es als etwas anderes if
Stellungnahme.) die besagt, wenn eine bestimmte seltsame Situation vorliegt / Selten / ungeplant / unvorhergesehen und, im Allgemeinen, behandelt eine solche Situation, indem das Programm gestoppt wird, anstatt in einem undefinierten Zustand weiterzulaufen / Unbekannt.
Obwohl das Netzwerk, das den Asset-Test zurückgibt, immer noch auf die Intelligenz und die Fähigkeiten des Entwicklers beschränkt ist, der die Assertion implementiert, eine Aussage kann oft länger als die begrenzten Grenzen von if
Anweisungen, die den Zustand mehrerer Variablen testen, oder es könnte ganz spezifisch gemacht werden, um bestimmte gefährliche Situationen zu vermeiden.
Als Beispiel, sagen wir unser kleiner Wassersensor ist in einem Regentank montiert. Weil, das Wasser sollte nie kochen. Trotz dieses, wenn unser Wassersensor einen Temperaturmesser hätte, wir könnten uns vergewissern, auch wenn es nie passieren würde / sollte nie passieren. Fügen wir dem Pseudocode, den wir oben begonnen haben, eine Assertion hinzu.
Statt Siedepunkt (100 Celsiusgrad), wir werden ein angemesseneres Maximum von anstreben 70 Celsiusgrad, die dennoch nie erreicht werden sollte, wenn man daran denkt, Regenwasser aufzufangen, wenigstens, gemäß unserer Meinung. erinnere dich an das Wort “Meinung”, da es wichtig wird, wenn man die Intelligenz des Entwicklers berücksichtigt, der den Claim umsetzt. (Mehr dazu weiter unten).
wenn (sensor_readout == unsinnig) dann { raise_error fail }anders{ behaupten (Wassertemperatur < 70.0){ raise_assert_message fail exit } wenn (Wasserstand > Hochwassermarke) dann { raise_alert } }
Wir schreiben die Aussage rückwärts. Der Code sollte angeben, dass die Wassertemperatur unter . ist 70 Grad Celsius. Wenn dies nicht der Fall ist, wird den Codeblock ausführen, wodurch eine Assertion-Nachricht generiert wird, und dann stürzt die Software ab und wird geschlossen.
Die Assertionen im eigentlichen Code sind dem obigen Beispiel ziemlich ähnlich. Sie prüfen, ob eine bestimmte Situation zutrifft oder nicht und, anschließend, halt (oder kontrolliert blockieren) das Programm / Software in Frage.
Häufig, diese Assets werden in den Protokolldateien der Anwendung oder sogar direkt in der Bildschirmausgabe aufgezeichnet. Überprüfen Sie sie und / oder suchen Sie oft nach einer Kopie der genauen Bestätigungsnachricht in Ihrer bevorzugten Suchmaschine (wenn der Fehler vorher gefunden wurde) führt Sie zu einem Fehlerbericht darüber.
Bestätigungsnachrichten sind oft Fehler, auch wenn es einfach nur Fehler in der Argumentation des Entwicklers sein können. Letztendlich, Wer sagt drinnen 1000 Jahre, Regen darf nicht überschreiten 70 Grad Celsius? (Ich hoffe nicht!)
Eine Assertion-Nachricht ist die Ausgabe der Assertion, die von den Entwicklern in den Code eingeführt wurde, Mit anderen Worten, die tatsächliche Textausgabe, die von der Software generiert und auf dem Bildschirm oder in Protokollen angezeigt wird. Als Beispiel, Stellen Sie sich vor, diese Bestätigungsmeldung wird für das obige Programm angezeigt.
Behaupten: (Wassertemperatur < 70): (88 < 70): falsch
Auch wenn es etwas kryptisch erscheint (ebenso wie einige Bestätigungsnachrichten), Beim genaueren Hinsehen wird uns das im zweiten Teil klar, water_temp
wurde getauscht gegen 88 und dass die Ausgabe ist false
(Mit anderen Worten, die Behauptung water_temp <70 falló debido a que el agua estaba a 88 grados y, por eso, la aserción desencadenó el mensaje de aserción). Sí, puede resultar un poco confuso.
Bewaffnet mit diesen neuen Fähigkeiten, das Debuggen einer Assertion-Nachricht, wenn Sie das nächste Mal eine sehen, wird viel einfacher. Darüber hinaus ist es möglich, Ihnen zu erleichtern, genau zu verstehen, was beim Stoppen der Anwendung schief gelaufen ist..
Was ist ein Fehler?
Computerfehler passieren ständig und aus den unterschiedlichsten Gründen. Sie treten sowohl auf Entwickler- als auch auf Benutzerebene und bei jedem Schritt dazwischen auf. Als Beispiel, ein DevOps-Ingenieur vergisst möglicherweise, eine erforderliche Datei einzufügen, oder der Unterzeichner eines Pakets verwendet möglicherweise den falschen Schlüssel zum Signieren der Software, und so weiter.
Zusammenfassend, ein Computerfehler kann mit der Computerhardware oder -software als Hindernis eingestellt werden. Es gibt einige Beispiele für einen Fehler, sogar im eingeschränkten Pseudocode oben. Wenn das sensor_readout == nonsensical
die Bedingung ist erfüllt, eine Fehlermeldung wird angezeigt.
Es gibt bestimmte Fehler, die häufiger auftreten als andere. Als Beispiel, Die Verwendung des falschen Pfads oder Dateinamens ist ein häufiger Fehler. Energiebezogene Probleme (als Beispiel, niedriger Batteriestatus) das sind auch recht häufige fehler.
Fehler sind ziemlich unterschiedlich und unterscheiden sich von Assertionsnachrichten, obwohl die Assertion-Nachricht selbst als Fehler angesehen werden kann, Oder besser, als undefinierte Situation, die nun die Behauptung abdeckt. In der Regel, ein Computerfehler übersetzt ziemlich gut in “Ich brauche einen Menschen, der dieses Problem löst”.
Wenn Computer intelligenter werden und die KI voranschreitet, hoffentlich treten weniger fehler auf, obwohl es viel Raum für Diskussionen und sogar für Argumente in diesem Bereich gibt.
Was ist ein Schock?
Ein Computerabsturz kann viele Formen annehmen. Wir alle kennen Microsoft Windows Blue Screens, dies geschah, wenn sich eine Anwendung schlecht benahm oder ein Kernteil des Betriebssystems oder der Hardware der Maschine ausfiel.
Trotz dieses, Meistens, ein Crash ist eine Softwareanwendung, die sich in einer undefinierten Situation befindet. Es gibt viele undefinierte mögliche Szenarien dieser Art. Es ist möglich, dass ein Computer versucht hat, in einen Bereich des Arbeitsspeichers zu schreiben, der bereits verwendet wurde, was sie selbst oder eine andere anwendung verärgert hat, oder vielleicht sind Sie auf ein Szenario gestoßen, in dem Sie versucht haben, durch Null zu dividieren (was unmöglich ist), oder eine ähnliche Situation.
Viele Betriebssysteme schreiben eine Kernel-Dump-Datei (wenn ja konfiguriert), was ermöglicht einem Entwickler und, manchmal, an einen Endbenutzer mit etwas Geschick, das fragliche Problem debuggen.
Wenn Sie mehr über das Debuggen erfahren möchten, wenn etwas schief geht, einschließlich Analyse von Kernel-Dump-Dateien, Vielleicht interessiert Sie unser Beitrag Debugging mit GDB: Einführung.
Ein Absturz kann auch die Folge einer Anwendung sein, die sich in einer undefinierten Situation befindet, was nicht durch einen Fehler gehandhabt wird (der einfachste Weg für eine App, etwas Falsches zu melden) oder eine Bestätigung (ein tieferes Hindernis, ursprünglich vom Entwickler als unmöglich ausgeschlossen, kommt aber trotzdem vor).
Zur selben Zeit, Beachten Sie, dass eine Programmkompilierung zum Testen, Mit anderen Worten, mit Debug-Informationen (einschließlich nur Behauptungen auf Debug-Ebene) eingebettet in die Endergebnis-Binärdatei, kann beim Erstellen einer Behauptung fehlschlagen, Wie ist der Fall, als Beispiel, mit MySQL. Server.
Ende
In diesem Beitrag, Wir erforschen die Konzepte von Affirmationen, Fehler und Abstürze, sowie wie sie zusammenhängen. Wir werfen einen detaillierten Blick darauf, wie Ansprüche innerhalb des Codes aussehen würden und wie sich dies auf ein reales Beispiel für die Überwachung von Wasserstand und Temperatur mit einem Wassersensor bezieht.. Das nächste Mal, wenn Sie auf eine Bestätigungsnachricht stoßen, schau mal genauer hin und viel Spaß beim Debuggen.