BUG: Breakpoints Not Hit in ATL MMC Snap-In
ID: Q193513
|
The information in this article applies to:
-
The Microsoft Active Template Library (ATL) 3.0, used with:
-
Microsoft Visual C++, 32-bit Editions, version 6.0
-
The Integrated Debugger
SYMPTOMS
The debugger may not break on your breakpoints when you try to debug an ATL
MMC (Microsoft Management Console) Snap-In on a Windows NT 4.0 machine.
CAUSE
The ATL Object Wizard adds code that registers objects differently. The
About object uses the DECLARE_REGISTRY() macro for registering itself.
Other objects in the same Snap-In use an .rgs file. As a result, the About
object is registered using a long file name (in the InprocServer32 key).
Other objects are registered with a short file name.
MMC first creates the About object and loads the DLL with the long file
name. When other objects are created by MMC, the DLL is reloaded in a
different memory location with the short file name. Debugger breakpoints
(int 3 instructions) are inserted in the context of the first DLL, so any
code executed in the context of the second DLL won't have any int 3
instructions, and therefore breakpoints are not hit.
RESOLUTION
You can use one of the following four workarounds:
Workaround 1
Use a directory and project name that does not use long file names.
Workaround 2
Change the About object to use the .rgs file as shown below:
- Create a new registry file and edit it as follows (replacing the CLSID and class name):
HKCR
{
MyClassAbout.1 = s 'MyClassAbout Class'
{
CLSID = s '{22A88065-391D-11D2-8164-00C04F7948A7}'
CurVer = s 'MyClassAbout.1'
}
NoRemove CLSID
{
ForceRemove
{22A88065-391D-11D2-8164-00C04F7948A7} = s 'MyClassAbout Class'
{
ProgID = s 'MyClassAbout.1'
VersionIndependentProgID = s 'MyClassAbout.1'
ForceRemove 'Programmable'
InprocServer32 = s '%MODULE%'
{
val ThreadingModel = s 'Both'
}
}
}
}
- Save the new registry file as MyClassAbout.rgs and import this file into
your project resource. Change its id to IDR_MYCLASSABOUT.
- Replace the DECLARE_REGISTRY line in the About class with the following:
DECLARE_REGISTRY_RESOURCEID(IDR_MYCLASSABOUT)
- Rebuild all.
Workaround 3
Unregister the DLL and comment out the object entry for the About object
when debugging.
Workaround 4
Use _asm int 3 or DebugBreak or ATLASSERT(0) to break into the debugger and
set/re-enable your break points.
STATUS
Microsoft has confirmed this to be a problem in the Microsoft products listed
at the beginning of this article.
Additional query words:
snapin
Keywords : kbDebug kbVC600bug kbATL300 kbATL300bug kbfaq kbGrpDSTools
Version : WINDOWS:3.0
Platform : WINDOWS
Issue type : kbbug