Tracer-Klasse Vorstellung



  • Wie ich schon in einem Interview bekannt gab habe sogar ich mich von Windows abgewendet, ist einfach ein ewiges rumgekrampfe.

    Ich finde die Tracer-Klasse so eher weniger nützlich, da sie nur sehr wenige Informationen bereit stellt, wenn ich Probleme haben mit dem Lebenszyklen von Objekten, dann brauche ich eigentlich immer noch zusätzlich ein Stacktrace und mehrere Checkpoints an kritischen Stellen um zu wissen wo gerade wie verzweigt wurde, sonst weiß ich ja nachher gar nicht wo etwas schief gegangen ist.

    Einfach den Speicher nach Leaks zu überwachen bietet ja inzwischen jeder Compiler im Debug-Modus an, ebenso Speicherchecks (also Index-Out-Of-Bounds oder Off-By-One Fehler).

    Am angenehmsten unter Windows finde ich das Erstellen eines Minidumps, mit dem enthaltenen Fehler, dann kann man ganz in Ruhe sich hinsetzen und den Fehler analysieren, ist für mich also das ultimative Tracert, wenn man so will.

    Falls du Linux benutzt, hast du dir mal strace angesehen, eine Ausgabe wie sie dort erfolgt beinhaltet auch weit mehr Informationen als dein Trace-Tool. Schau dir das mal an und versuch das in deine Bibliothek mitaufzunehmen.

    P.S. Ist der Header im ersten Posting die gesamte Trace-Bibliothek?



  • Hey super danke, genauso so eine Kritik brauchte ich, damit kann ich wunderbar weiterarbeiten um das zu verbessern. Andere Frage, würdet ihr noch weitere Funktionen hinzufügen??

    @.filmor
    Wie meinst du das mit dem "nicht öffentlich geerbt"? Was muss ich da anders machen?



  • Falls dich das Thema interessiert, solltest du dich mal mit aspektorientierter Programmierung befassen. C++ bietet hierfür leider keinen Support (D übrigens genauso wenig). Es gibt allerdings einige Aufsätze wie zB AspectC++. Damit lassen sich Sachen wie Debug-Handling viel sauberer implementieren, weil sie von der eigentlichen Programmlogik getrennt werden.

    Bezüglich "nicht öffentlich geerbt", .filmor meint, deine Klasse Tracer ist keine typische Basisklasse, also ist der virtuelle dtor überflüssig. Virtuelle dtors machen ja nur dort Sinn, wo vererbt wird, also die Klasse als Basisklasse benutzt wird, und das öffentlich (public). Wird nicht öffentlich vererbt, kann auf die Instanz der Basisklasse auch nicht zugegriffen werden und non-virtual bietet keine potenzielle Gefahr.



  • Aber wenn ich, angenommen ich mache es, jede meiner neugeschriebenen Klassen von der Tracer Klasse erben lasse ist es dann keine Basisklasse? Oder ist es deswegen keine Basisklasse weil ich in keiner meiner erbenden Klasse eine Methode von der Tracerklasse überschreibe??



  • Firefighter schrieb:

    Aber wenn ich, angenommen ich mache es, jede meiner neugeschriebenen Klassen von der Tracer Klasse erben lasse ist es dann keine Basisklasse?

    Doch. Nur sollst du ja nicht öffentlich erben. Oder möchtest du Zugriff auf die Basisklasse (Tracer) in der erbenden Klasse erlauben? Ich persönlich würde das eher als falsches Design empfinden. Deine Tracer Klasse soll ja im Hintergrund arbeiten, ohne dass jemand etwas davon mitbekommt, richtig?



  • stimmt...da hast du natürlich vollkommend recht. Aber ich will ehrlich sein, kann ich denn eine Klasse private erben lassen? habe bissher nur public erben lassen, geht private wirklich?



  • Statt

    class Derived : public Base
    {...};
    

    nimmst du eben

    class Derived : private Base
    {...};
    

    😉



  • Ok aber kann ich denn dan trotzdem noch den Konstruktor von Trace aufrufen? weil den brauche ich doch oder net? Laut meiner Codefiles, wird ja der Tracer konstruktor benutzt.?



  • Firefighter schrieb:

    Ok aber kann ich denn dan trotzdem noch den Konstruktor von Trace aufrufen? weil den brauche ich doch oder net? Laut meiner Codefiles, wird ja der Tracer konstruktor benutzt.?

    Bei private Ableitung, kannst du alles benutzen, was in der Base unter public ist, sofern also der c-tor public ist, geht das.



  • Alles klar, damit ist mein Wissensdurst vorläufig gestillt. Danke an alle die hier einen qualifizierten Kommentar da gelassen haben 🙂


Anmelden zum Antworten