Ich versuche fehlgeschlagene Behauptungen in meinem Programm zu erfassen. Ich verwende eine Bibliothek, die direkte Aufrufe von assert() statt einer benutzerdefinierten Funktion oder eines Makros ausführt. In dieser Bibliothek versuche ich derzeit, mehrere Probleme im Zusammenhang mit der Portierung zu finden. Alles was dazugehört wurde mit Debug-Symbolen in g ++ kompiliert.Was ist der richtige Weg, um fehlgeschlagene Behauptungen in gdb zu brechen?
Die beste Lösung, die ich gefunden habe, bricht an der Datei: Zeile der Assert, mit der Bedingung der Assert-Ausdruck. Dies ermöglicht das Anhalten der Assert, bevor es fehlschlägt, ist aber eine schreckliche Lösung. Es erfordert ein spezielles Setup für jede möglicherweise fehlgeschlagene Assertion, funktioniert nicht von meiner IDE und ist im Allgemeinen viel zu viel Aufwand.
Wie kann ich auf brechen jede Assertion fehlgeschlagen so gdb & gcc verwenden, die Prüfung der Aufrufliste und Variablen im Rahmen des assert Anruf erlaubt?
Es wäre noch besser, wenn die Lösung mir erlauben würde, den Fehler der Assert zu verwerfen und weiter zu laufen.
In Windows in Visual Studio ist das Brechen das Standardverhalten eines fehlgeschlagenen 'assert'. Ich bin überrascht, dass das in der * nix-Welt nicht der Fall ist - was macht ein gescheitertes 'assert' dort normalerweise? – Angew
In gdb können Sie vor dem Ausführen des Programms 'break abort' (oder nur' b abort') verwenden, um einen Breakpoint bei der Funktion abort() einzufügen. Dadurch können Sie zumindest eine Rückverfolgung durchführen, wenn eine Assertion fehlschlägt (vorausgesetzt, sie ruft 'abort()' auf, wenn dies der Fall ist; einige Implementierungen können stattdessen 'exit()' aufrufen. Nicht sicher über die weitere Ausführung. – notmyfriend
Normalerweise funktioniert dies standardmäßig, da assert() Aufrufe abbricht, und abort das Signal SIGABRT auslöst, und gdb bricht dieses Signal standardmäßig ab und erlaubt Ihnen, den Stapel zu prüfen, den Stapel nach oben/unten zu bewegen, z. zu Ihrer Funktion, die die assert() - und inspect-Variablen usw. enthält. – nos