======= Debuggen mit der autoexp.dat ====== Die ''autoexp.dat'' beschreibt eigene Datentypen für Visual Studio für den Debugger und erlaubt die Beschreibung der Tooltipps beim Debuggen. Die Datei selbst befindet sich - je nach installierter Visual Studio Version - in ''$(VSInstallDir)\Common7\Packages\Debugger'', bzw. unter Visual Studio 6 unter ''$(VS6InstallDir)\Common\MSDev98\Bin''. Bei sind es die Pfade ''C:\Programme\DevStudio\Common\MSDev98\Bin'' für VC6 und ''C:\Programme\Microsoft Visual Studio 8\Common7\Packages\Debugger'' für Visual Studio 2005. Ich erstelle nun ein Projekt mit folgender Quelltext und setze einen Breakpoint auf ''std::cout << l'' in der ''main''-Funktion: #include class Point { friend std::ostream & operator <<( std::ostream &, Point const & ); private: int _very, _important, _data; int _x, _y; public: Point( int x, int y ) : _x( x ), _y( y ) {} void move( int x, int y ) { _x += x; _y += y; } }; class Line { private: friend std::ostream & operator <<( std::ostream &, Line const & ); Point _source, _target; public: Line( Point const & src, Point const & trgt ) : _source( src ), _target( trgt ) {}; }; std::ostream & operator << ( std::ostream & os, Point const & rhs ) { os << "Point(" << rhs._x << "/" << rhs._y << ")"; return os; } std::ostream & operator << ( std::ostream & os, Line const & rhs ) { os << "Line(" << rhs._source << " -> " << rhs._target << ")"; return os; } int main() { Point p(1,2); p.move( 1, 5 ); Line l( p, Point( 47, 11 )); std::cout << l; // <--- BreakPoint } Es liefert folgende Ausgabe: Line(Point(2/7) -> Point(47/11)) Möchte ich nun die Schritte nachvollziehen, so kann ich die Maus über das ''p'' halten und sehe folgendes: \\ {{:windows:faq:autoexp1.png|}} \\ Mich interessiert an dieser Stelle vorrangig die Position des Punktes, diese wird jedoch verdeckt durch andere Variablen, die mich derzeit weniger interessieren. Hierauf lässt sich mit der Datei ''autoexp.dat'' Einfluss nehmen, in dem ich dem Debugger erkläre, wie er einen Datentyp ''Point'' zu beschreiben hat. Hierzu füge ich folgende Zeile in die Datei ''autoexp.dat'' ein. Point = Point( <_x>, <_y> ) Zunächst wird der Datentyp benannt und dem Datentyp anschließend ein Text zugewiesen, in diesem Fall 'Point( <_x>, <_y> )'. Ausdrücke, die in ''<'' und ''>'' stehen, werden dabei innerhalb der Klasse ausgewertet. In diesem Fall werden also die Werte ''_x'' und ''_y'' eingefügt: \\ {{:windows:faq:autoexp2.png|}} \\ Diese Ausdrücke werden jedoch nicht zwangsweise übernommen, wie der Blick auf die Variable ''l'' vom Typ ''Line'' zeigt: \\ {{:windows:faq:autoexp3.png|}} \\ Auch hier erweitern wir die ''autoexp.dat'' um eine Zeile für diesen Datentyp. Es dürfen nämlich auch die Punkt('.') und Pfeiloperatoren ('->') verwendet werden: Line = Line( (<_source._x>, <_source._y>) -> (<_target._x>, <_target._y>) ) Und hier haben wir das Ergebnis: \\ {{:windows:faq:autoexp4.png|}} \\ Die Beschreibungen des ''Points'' werden jedoch beim Aufklappen durchaus berücksichtigt, wie folgende Ausgabe zeigt: \\ {{:windows:faq:autoexp5.png|}} \\ In der ''autoexp.dat'' finden sich Anleitungen für weitere Konfigurationsmöglichkeiten, zum Beispiel lässt sich der Datentyp angeben, wie der Datentyp ausgegeben wird (z.B. char * als Pointer (hexadezimale Zahl) <_text,x> oder String <_text,s>).