Auto-Expanding User-Defined (and STL) Types in the Debugger

Have you ever wondered why CStrings, CPoints, and CRects always display
their contents in the debugger, while std::strings and your own data
types don’t? I have, especially since I’ve started using the Standard
Library. I find it especially annoying to click on the little plus sign
to view the contents of a std::string object.

In Visual C++ 5 (and probably 6, although I don’t have it to test), there
is an undocumented feature that controls this display (called
auto-expansion). It is controlled by a file named AutoExp.DAT in the
DevStudioSharedIDEBin directory. That file is pretty much
self-documenting. An excerpt from the file reads:

“While debugging, Data Tips and items in the Watch and Variable windows
are automatically expanded to show their most important elements. The
expansion follows the format given by the rules in this file. You can add
rules for your types or change the predefined rules.”

To resolve my frustration with std::string, I simply added the following
lines in the [AutoExpand] section of the file:

; from string
std::basic_string<char,std::char_traits<char>,std::allocator<char>> =<_Ptr,s>

Note that the spacing (or lack thereof) is important. Also note that I
was not able to use just std::string or std::basic_string<. I
needed to use the fully expanded type, including all template parameters.

If you use Unicode and std::wstring, you’ll need an entry such as the
following (untested):

std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t>> =<_Ptr,su>

You’ll also need to change the DisplayUnicode setting to 1 in the
[Unicode] section of the file so that Unicode strings are automatically
expanded as text, rather than arrays of unsigned short.

More by Author

Must Read