2009-06-30 7 views
3

Ich möchte die Art ändern, wie einige Typen entweder mit 'dt' oder '??' in einer ähnlichen Weise, wie Sie das mit autoexp.dat tun können. Gibt es eine Möglichkeit, dies zu tun?hat cdb/windbg ein Äquivalent zu autoexp.dat?

Zum Beispiel habe ich eine Struktur, etwa so:


struct Foo 
{ 
    union Bar 
    { 
     int a; 
     void *p; 
    } b; 
}; 

Und ich habe eine Reihe von ein paar hundert davon bekam, die ich alle weisen auf eine Struktur Bar kennen. Gibt es eine Möglichkeit, cdb zu sagen, dass in diesem Ausdruck "p" ein Zeiger auf Bar ist? Dies ist die Art von Dingen, die Sie mit Autoexp machen könnten. (Das konkrete Beispiel hier ist, dass ich eine Stash-Tabelle habe, die Schlüssel eines beliebigen Typs haben kann, aber ich weiß, dass es sich bei Schlüsseln um Strings handelt. Die Implementierung speichert sie als void-Zeiger).

Vielen Dank im Voraus!

Antwort

2

Ich glaube nicht, dass es so einfach wie autoexp.dat ist.

Sie haben ein paar mögliche Optionen - Sie können eine einfache Skriptdatei mit den Debuggerbefehlen schreiben, um die Datenstruktur auf die gewünschte Weise auszugeben und den Befehl "$<filename" (oder eine seiner Varianten) zu verwenden. In Kombination mit Benutzer-Aliases können Sie dies sehr einfach und natürlich nutzen.

Die zweite Option ist ein bisschen mehr beteiligt, aber mit ihr kommt viel mehr Kraft - schreiben Sie eine Erweiterung DLL, die Ihre Datenstruktur ablegt. Für etwas wie das, worüber du sprichst, ist das wahrscheinlich übertrieben. Aber Sie haben eine enorme Macht mit Debugger-Erweiterungen (in der Tat ist ein großer Teil der Leistung, die in den Debugging-Tools Paket kommt auf diese Weise implementiert). Das SDK ist im Lieferumfang des Debuggers enthalten, sodass Sie leicht feststellen können, ob Sie dies benötigen.

1

Sie können du oder da sagen, um dump memory als Unicode- oder ASCII-Strings zu haben.

+0

Wenn ich ein Array habe, bei dem ein Element auf eine Zeichenfolge verweist, die sich irgendwo im Speicher befindet, kann ich beim Drucken des Arrays 'da' an der Adresse dieses Zeigers aufrufen? – aaron

+0

Wenn Sie die Startadresse des Arrays kennen, sollten Sie in der Lage sein, den Versatz von der Startadresse zu dem gewünschten Element zu berechnen (sizeof (struct) * i) und dann den Offset des (DWORD aligned) -Elements innerhalb des Arrays hinzuzufügen Struktur. Sie können auch dt -r an der Adresse der Struktur ausführen, damit der Debugger alle Mitglieder rekursiv ablegt. –