Integrierten Debugger erweitern



  • Hallo,

    ich würde gern den integrierten Debugger des Codegear RAD Studio 2007 erweitern. Mich ärgert, dass die STL so nachlässig behandelt wird und möchte für den Debugger etwas nachrüsten. Z.B. soll für std::string der Inhalt angezeigt werden, für Container die Anzahl der Elemente, etc.
    Nach einiger Recherche im Inet habe ich herausgefunden, dass es die OpenTools API gibt, mit der man einiges machen kann, aber wegen fehlender Doku und für meinen Fall unpassenden Beispielen werde ich aus dem Ganzen nicht schlau.
    Ist mein Vorhaben überhaupt umsetzbar? Und wenn ja, wie?



  • Sitzt du doch noch ein wenig auf den alten Tools fest? 🙂

    Vor ein paar Releases (in XE, glaube ich) wurden tatsächlich Debugger-Visualizer eingeführt, die im Prinzip so etwas erlauben, wie du es dir vorstellst. Leider haben die Entwickler dabei mehr an Delphi gedacht als an C++: nämlich kann ein Visualizer eine Liste von Strings registrieren, die mit dem Typnamen einer Variable (und ggf. den Typnamen der Vorfahren) verglichen werden. Für Klassen in Delphi geht das halbwegs gut, aber C++-Code ist nicht so vererbungslastig, und außerdem ist das String-Matching für C++-Typen kein Spaß, wie man an dem std::string-Visualizer sieht, der ab XE im Quelltext mitgeliefert ist:

    const
      StdStringVisualizerTypes: array[0..1] of string =
      (
        'std::basic_string<char, std::char_traits<char>, std::allocator<char> >',
        'std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >'
      );
    

    Du kannst dir denken, wie fragil das ist. Und natürlich ist dieser Mechanismus völlig untauglich für Containertypen.

    Das heißt noch nicht, daß dein Vorhaben nicht umsetzbar wäre. Die OTAPI kann schon einiges, aber man erreicht natürlich deutlich mehr, wenn man direkt mit den IDE-Klassen interagiert. Für die sind naheliegenderweise keine Headerdateien veröffentlicht worden, so daß so ein Eingriff in C++Builder 2007 sehr viel Reverse-Engineering erfordern würde. Aber Delphi 2010 hat die erweiterte RTTI eingeführt, die Strukturinformation beinahe auf dem Niveau von .NET Reflection bietet, und die Entwickler der IDE haben nicht daran gedacht, die Generierung der RTTI für die IDE selbst zu deaktivieren; deshalb sind sehr viele interne Klassen über die RTTI sichtbar und zugänglich. Wenn du also auf eine neuere Version aktualisieren könntest, wäre dein Vorhaben umsetzbar.

    Vor längerer Zeit hatte ich mal einen generisches Debugger-Visualizer-Plugin geschrieben, mit dem man etwas flexibleres Pattern-Matching betreiben konnte. (Überhaupt habe ich an einigen IDE-Erweiterungen herumgebastelt, aber irgendwann die Motivation verloren. Das Fernziel meiner Bemühungen war, Code-Completion asynchron aufzurufen, damit man mit dem Tippen nicht warten muß, bis der Compiler fertig ist; aber das ist noch ein längerer Weg bis dahin, und ich habe keine Ahnung, ob sich mit Clang an den entsprechenden Interfaces etwas geändert hat.) Wenn's dich ernsthaft interessiert, kann ich mal die Überbleibsel dieser Projekte ausgraben.



  • Hallo audacia, danke für die Antwort, irgendwie wusste ich, dass da was von dir kommen würde. Und ja, ich hänge noch an alten Tools fest, daran wird sich wohl auch nichts ändern fürchte ich. Es sei denn, Embarcadero kriegen irgendwann ihren Linker in den Griff.
    Da ich vom CG2007 nicht wegkomme helfen mir auch keine Lösungen für XE und aufwärts, trotzdem danke für dein Angebot.


Anmelden zum Antworten