Debug-Klasse mit Assertions



  • Hallo,

    ich suche eine Debug-Klasse, die etwas ähnliches wie eine Assertion ermöglicht,
    wobei aber _global_ konfigurierbar sein soll, wie darauf reagiert wird. Pseudo-
    code:

    debugClass.setBehavior(JUST_WARN);
    debugClass.myAssert(bool someCondition,string message);
    

    Ein 'false' sollte dann je nach Konfiguration von debugClass entweder zum
    Abbruch führen oder bloß ein Warning schreiben und weiter machen oder auch
    eine Exception werfen. Ich nehme an, daß ähnliche Debug-Klassen schon fertig
    existieren?

    Danke



  • Musst du das Verhalten während der Laufzeit ändern können? Dann musst du dich noch um Multithreading etc. kümmern. Einfacher wäre es, mit dem Präprozessor die richtige Variante auszuwählen:

    #ifdef MY_ASSERT_CALL_ABORT
      #define MY_ASSERT(expr) assert(expr);
    // etc.
    


  • Die C Standardbibliothek hat etwas schönes: assert.h

    Das arbeitet mit #define s und den #if s wie Michael schon angesprochen hat.

    Falls du #defines nicht leiden kannst, man kan sicherlich den code in funktionen per #ifndef NODEBUG ausschneiden, der compiler sollte den Aufruf gänzlich wegschmeißen, und es regnet optimierten code duch die CPU, die zufrieden und gelassen lächelt. (oder nicht?)

    Kann jetzt keinen funktionierenden Code garantieren, aber....

    // myownasserts.h
    
    // before of this inclusion you set the tag NODEBUG
    
    class AssertAttack
    {
    public:
        inline static bool assert_int_equality(int a, int b)
        {
            #ifndef NODEBUG
            return a == b;
            #endif
        }
    
        // etc
    };
    


  • lk schrieb:

    Die C Standardbibliothek hat etwas schönes: assert.h

    In C++ nehmen wir jedoch #include <cassert>
    😉



  • 314159265358979 schrieb:

    lk schrieb:

    Die C Standardbibliothek hat etwas schönes: assert.h

    In C++ nehmen wir jedoch #include <cassert>
    😉

    Nein nein, ich meinte jetzt nicht man solle die C version verwenden. Insbesondere da ich immer noch mit printf() debugge und assertions nicht kenne.


Anmelden zum Antworten