在启动时将调试器附加到进程

3 com debugging activex visual-studio

我试图跟踪我们处理com对象的错误.我们的程序是从我们的activeX控件启动的,当应用程序再次关闭时会出现一些问题.我想在我们的应用程序首次从OCX启动时,将visual studio(2008)调试器附加到我们的应用程序中.我怎样才能做到这一点?

一些细节:

a)OCX和应用程序主要用c/c ++编写,只有一点c ++/cli(在启动应用程序时没有任何作用)
b)如果我在程序运行时附加到程序,我会在olelock退出时得到一个断言的.cpp

void AFXAPI AfxOleUnlockApp()  
{  
   AFX_MODULE_STATE* pModuleState = AfxGetModuleState();  
   ASSERT(pModuleState->m_nObjectCount != 0);  <--- Triggers this
   if (InterlockedDecrement(&pModuleState->m_nObjectCount) == 0)  
   {  
      // allow application to shut down when all the objects have  
      //  been released  
      ::AfxOleOnReleaseAllObjects();  
    }  
}
Run Code Online (Sandbox Code Playgroud)

因此,当我首次从OCX启动时,我想将调试器附加到我们的程序中,这样我就可以尝试跟踪COM对象的生命周期.或许还有另一种方法来追踪这些物体?

Joe*_*Joe 7

gflags 是一般情况下你会考虑的复杂场景.特别是此页面用于在启动时无条件地调试应用程序.

但是,我认为这对你想要的东西来说太过分了.我通常只是在我的程序中转储一些代码,如果它是在DEBUG模式下构建并且在代码启动时按下F1键,它将等待附加调试器.像这样的代码不应该留下来,但它非常方便.

#ifdef _DEBUG
if ( ::GetAsyncKeyState( VK_F1 ) )
{
    while ( !::IsDebuggerPresent() )
        ::Sleep( 100 );
    ::DebugBreak();
}
#endif
Run Code Online (Sandbox Code Playgroud)