VS-Tipps & Tricks: Format Specifier in den Debugger Fenstern

Beim Debuggen Variablen im Watch-Window oder im Quick-View anzeigen zu lassen ist gängige Praxis und jeder etwas fortgeschrittene Entwickler wird diese Funktionen des Visual-Studios nutzen.

Üblicherweise wählt der Debugger eine Darstellungsform, die für die Variable geeignet ist. Besonders für STL Datentypen hat sich hier einiges getan seit VC-2005.

Dennoch kann man dem Debugger für manche Datentypen noch einen Format Specifier mitgeben, der einem die Arbeit beim Debuggen extrem erleichert.
Format Specifier erlauben es eine Variable entsprechend Ihrer Verwendung zu interpretieren. Typisch hier wäre eine Windows Nachricht. Als Integer sagt einem 0x0129 nicht viel, aber WM_NCCREATE einiges. Wenn man hinter die Variable nMsg im Watch-Fenster einfach aus nMsg,wm erweitert erhält man sofort die Nachricht als symbolischen Wert angezeigt.

Ich will hier nicht alle aber wenigstens ein paar sehr nützliche und weniger bekannte Format Specifier aufzählen:

! – Raw format
hr – HRESULT in Klartext
su -Unicode
s8 – UTF8
wm – Windowsnachricht
wc – Fensterstil
<n> – Anzahl der Arrayelemente

Am schönsten sieht man die Wirkung an dem folgenden Code und den nachfolgenden Bildern der Watch-Windows:

int g_ai[] =
{
  4711,
  815,
  1234
};

int _tmain(int argc, _TCHAR* argv[])
{
  std::list lst;
  lst.push_back(1);
  lst.push_back(2);
  DWORD dwHResult = 2147943623;
  void *szUnicode = L"Unicode ÄÖÜäöü";
  char *szUTF8Code = "Umlaute AE=\xc3\x84 OE=\xc3\x96 UE=\xc3\x9c.";
  UINT winmsg = 125;
  DWORD winstyle = 0xA6730000;
  int *pi = g_ai;

  DebugBreak();
  return 0;
}

Hier das Ganze die Daten im Watchwindow ohne Formatspecifier:

Watch1

Hier das Ganze mit:

Watch2

Weitere Links dazu:
http://msdn.microsoft.com/en-us/library/75w45ekt.aspx
http://blogs.msdn.com/vcblog/archive/2006/08/04/689026.aspx

3 Gedanken zu „VS-Tipps & Tricks: Format Specifier in den Debugger Fenstern“

  1. Hi Martin,
    es gibt noch weitere Format specifiers, in Deinen Linkverweisen nicht dokumentiert.
    Diese möchte ich dem abitionierten Nutzer nicht vorenthalten:

    eax
    zeigt den Rückgabewert einer Win32-API Funktion an. Dies ist vor allem dann nützlich, wenn im Quelltext keine Variable dafür vorgesehen bzw. zugewiesen wird ist (ideal für „quick debugging“ ohne neu compilieren zu müssen)

    @err
    zeigt den aktuellen Wert des GetLastError() an.
    Mit der Kombination @err,hr wird dieser auch gleich als Klartext angezeigt

    Diese Format Specifier funktionieren auf jeden Fall seit Visual Studio 6

    Gruß
    Martin

  2. Hallo Martin,
    Sehr gut erklaert.
    Leider funktioniert „s8“ bei mir nicht:

    Microsoft Visual Studio 2008
    Version 9.0.30729.1 SP

    szUTF8Code,s8 error: unknown format specifier ’s8′
    szUTF8Code 0x00018738 „Umlaute AE=Ä OE=Ö UE=Ãœ.“ char*

    Hast du vielleicht dafuer eine Erklaerung?
    Danke, mfG Alfred

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.