Category Archives: Debugging

VS2012 Migration #3: autoexp and NoStepInto Replacements

In the past I blogged quite a few times about two immensely useful albeit mostly-unofficial debugger features: watch modification via autoexp.dat, and step-into modification via NoStepInto registry key. A long while ago I raised two suggestions at MS UserVoice, to … Continue reading

Posted in Debugging, VC++ | 3 Comments

Entry Point Not Found, and other DLL Loading Problems

Occasionally I come across DLL load problems: The verbosity of the error messages varies greatly. In their raw form these include at least the DLL name, but as various frameworks come into play (for the error message above, it’s .net) … Continue reading

Posted in Debugging, Win32 | 17 Comments

_DllMain@12 already defined

We recently faced this linkage error: error LNK2005: _DllMain@12 already defined in MSVCRT.lib(dllmain.obj) Searching gives ~36K results as of July 2012, many of which seem high quality (StackOverflow, MS, CodeProject etc.), and I was certain it would be a simple … Continue reading

Posted in Debugging, MFC | 6 Comments

Viewing types, part 3: Exceptions

Last time a way was shown to use internal RTTI mechanics to view C++ type names without direct debugger aid. There is one place in particular where such type names carry substantial information, and that is c++ exceptions. These can … Continue reading

Posted in Debugging, VC++ | Leave a comment

Viewing types, part 2: the manual way

Compiling with /d1reportAllClassLayout, even an empty file, dumps many compiler-intrinsic types. Six of these are interesting in the present context:  _PMD, _TypeDescriptor, _s__RTTIBaseClassDescriptor2, _s__RTTIBaseClassArray, _s__RTTIClassHierarchyDescriptor, and _s__RTTICompleteObjectLocator. Most of this machinery exists solely for multiple inheritance, and virtual inheritance in … Continue reading

Posted in Debugging, VC++ | 3 Comments

Viewing types, part 1: The Normal way

Suppose C derives from B, which derives from A: Now create A-pointers which point to children types, B and C, and watch them in VS: The types in square brackets are the most derived types of the referenced objects. How … Continue reading

Posted in Debugging, VC++ | Leave a comment

Blank Variable Watch, or OMF Errors

During a debugging session I faced a weird situation where the code compiled and ran just fine, yet some class members appeared blank at the watch window, and others showed – CXX0033: error in OMF type information Skip to the … Continue reading

Posted in Debugging, VC++ | Leave a comment

StepOver Revisited

Andy Pennell exposed in 2004 (and I mentioned in 2009) a very useful undocumented VC feature: when you wish to avoid stepping into nagging functions (ctors, refcounts, whatever), you can specify them in the StepOver registry key. It supports RegExp’s … Continue reading

Posted in Debugging, VC++ | Leave a comment

Breaking on Data Read

Edit: As of windows 10 the details and code below do not work. A working alternative is detailed at a newer post.   You’re probably familiar with Data Breakpoints, and rightfully so: It’s extremely useful to know where a value changes. … Continue reading

Posted in Debugging, VC++, Win32 | 6 Comments

g_dwLastErrorToBreakOn: Watching Errors on VS Revisited

Raymond Chen posted about SetLastError recently, and an interesting discussion ensued. One comment in particular caught my eye: The easiest way to catch a specific last error value in debugger is to set ntdll!g_dwLastErrorToBreakOn to that value. A good while … Continue reading

Posted in Debugging, Win32 | 2 Comments