Wenn ein assert()
Aufruf fehlschlägt, was ist der Exitcode und wo wird er dokumentiert?Wenn assert() fehlschlägt, was ist der Programmbeendigungscode?
Antwort
C99-Standard besagt, dass assert
Anrufe abort
und die abort
Sachen Staaten dies über den Rückgabecode:
Eine Implementierung definierte Form des Status erfolglose Beendigung der Host-Umgebung mittels der Funktion zurückgegeben wird Anruf erhöhen (SIGABRT).
Es ist in Abschnitt 7.2.1.1 (assert) und 7.20.4.1 (abort) des c99 Standards here dokumentiert.
Viele UNIX-Systeme geben 128 plus die Signalnummer (SIGABRT ist Signalnummer 6) zurück, so dass Sie 134 erhalten können. Was auch immer Sie erhalten, sollte durch die C-Implementierung dokumentiert werden.
Zum Beispiel siehe here für gcc. Obwohl es ziemlich still darüber ist, was in die aufrufende Umgebung zurückkehrt. Von den spezifischen Abschnitten here:
Einige Auswahlmöglichkeiten werden von der Bibliothek und dem Betriebssystem (oder einer anderen Umgebung bei der Erstellung für eine freistehende Umgebung) getroffen; Details finden Sie in der Dokumentation.
Und here:
Das Verhalten der meisten dieser Punkte sind abhängig von der Implementierung der C-Bibliothek, und nicht von GCC selbst definiert.
So ist die Glibc Doco here auf Programm Beendigung (insbesondere die Ausfahrt Status-Bit). Es erwähnt Konventionen, aber keine festen Regeln.
Es ist implementierungsspezifisch. Sie können dies tun:
int main()
{
assert(0);
}
es dann laufen:
> ./a.out
> echo $?
1 (<- or whatever)
Das wird zumindest sagen, was für Ihr Setup zu erwarten. Ich bin Gettitng 134 auf ein paar Linux-Boxen mit gcc und g ++.
Sie sollten Ihre Antworten immer mit einem bestimmten Verweis auf den Standard sichern. – wilhelmtell
Compiler folgen nicht immer dem Standard zum T. (Ich sehe dich an Microsoft) Es ist zwar gut zu wissen, was der Standard sagt - es ist aber genauso gut zu wissen, was Compiler wirklich machen. Was sie tun sollten, ist nicht immer das, was sie tatsächlich tun. Das und der Standard ist nicht wirklich frei. –
Ich arbeitete mit Posix Message Queues Ich habe den gleichen Fehler mq_open wurde mit Fehler 38 (ENOSYS) fehlgeschlagen.
Die Arbeit ist um den Kernel mit POSIX MESSGE QUEUE in der Kernel-Konfiguration aktiviert wiederherzustellen.
Dies wird den Kernel mit POSIX-Nachrichtenwarteschlange Unterstützung bauen und es funktionierte für mich.
Thank
Ich denke, Sie wollten diese Antwort auf eine andere Frage stellen. –
ich nicht die eigentliche Spezifikation für sie (POSIX ist ziemlich schwer zu suchen), finden aber ich einen Hinweis gefunden hat.
Eine ausgelöste Assertion führt zu einem Exit-Status, der dem entspricht, was auch immer EXIT_FAILURE
expandiert (reference).Da es sich um Linux handelt, handelt es sich auch um POSIX, das das Verhalten von c99 weiter definiert.
- 1. Wenn Assert fehlschlägt, gibt es einen Fehler?
- 2. Was ist die Strategie, wenn die Assertion fehlschlägt
- 3. Was passiert, wenn der shared_ptr-Konstruktor fehlschlägt?
- 4. Wenn mysql_query() fehlschlägt, was tun?
- 5. Was passiert, wenn Öffnen fehlschlägt?
- 6. Was passiert, wenn update_all fehlschlägt?
- 7. phpunit 3.7: Was ist mit der @ assert Annotation passiert?
- 8. Fortsetzung der Ausführung, selbst wenn die Assert-Anweisung in Selen mit Junit 4-Framework fehlschlägt
- 9. Oozie Workflow was passiert ist, wenn eine Aktion fehlschlägt
- 10. Warum verursacht die SetNetworkID von RakNet, dass ein Assert fehlschlägt?
- 11. Was passiert, wenn ein Trigger fehlschlägt?
- 12. Ist Assert und Unit-Testing inkompatibel?
- 13. Assert in Try..Catch Block ist gefangen
- 14. Was ist die RSpec-Syntax entspricht für Assert (Minitest)
- 15. Kann ich MySQL erfolgreich ausführen, wenn eine Unterabfrage fehlschlägt und fehlschlägt, wenn die Unterabfrage erfolgreich ist?
- 16. Assert, dass Anfrageverb ist POST
- 17. Java Assert Double ist NaN
- 18. ASSERT vs. ATLASSERT vs. assert
- 19. Was passiert mit Dateideskriptoren in Python 3, wenn .close() fehlschlägt?
- 20. Was tun, wenn ein Posix-Close-Call fehlschlägt?
- 21. assert funktioniert nicht, wenn in der Klasse Instanz angehoben
- 22. Capybara assert-Element ist leer
- 23. Abbrechen onListItemClick() wenn onCreateContextMenu() fehlschlägt
- 24. was bewirkt, dass imagecreatetruecolor() fehlschlägt?
- 25. Warnen, wenn gespeicherte Prozedur fehlschlägt
- 26. wenn die strdup-Funktion fehlschlägt?
- 27. Funktionsaufruf innerhalb der Assert == schlecht?
- 28. Assert Fehler wird ausgelöst, wenn Piktoons3 spotten
- 29. _vti_bin Lists.asmx; Was ist, wenn ein Anmeldeversuch für den Web-Service zum ersten Mal fehlschlägt?
- 30. Was bewirkt, dass die scaleX-Methode der Imager-Klasse fehlschlägt?
Das ist eine fantastische Antwort, und 134 ist genau das, was ich bekomme. –
Die mit der Dokumentation für GCC verknüpfte Seite scheint nichts von Interesse zu enthalten, noch kann ich das Zitat finden, das Sie gemacht haben. –
Sie könnten den Glibc-Doco-Link so ändern, dass er direkt auf diesen verweist, es sei denn, ich habe etwas übersehen. http://www.gnu.org/s/libc/manual/html_node/Exit-Status.html#Exit-Status –