The debugger may not break on breakpoints when you try to debug an ATL Microsoft Management Console (MMC) Snap-In on a Windows NT 4.0 computer
Article ID: 193513
Article Last Modified on 9/2/2005
APPLIES TO
- Microsoft ActiveX Template Library 3.0, when used with:
- Microsoft Visual C++ 6.0 Enterprise Edition
- Microsoft Visual C++ 6.0 Professional Edition
- Microsoft Visual C++ 6.0 Standard Edition
This article was previously published under Q193513
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
computer.
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.
WORKAROUND
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 that this is a problem in the Microsoft products that are listed
at the beginning of this article.
Additional query words: snapin
Keywords: kbtshoot kbnoupdate kbdebug kbprb kbfaq kbpending KB193513