Присоединение отладчика к процессу при запуске - PullRequest
3 голосов
/ 03 марта 2012

Я пытаюсь отследить ошибку в нашей обработке com-объектов.Наша программа запускается с нашего элемента управления ActiveX, и при закрытии приложения возникает некоторая ком-проблема.Я хотел бы присоединить отладчик visual studio (2008) к нашему приложению, когда оно впервые запускается из OCX.Как я могу это сделать?

Некоторые подробности:

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();  
    }  
}

Поэтому я хотел бы присоединить отладчик к нашей программе, когда она перваязапущен из OCX, поэтому я могу попытаться отследить время жизни COM-объектов.Или, может быть, есть другой способ отследить эти объекты?

1 Ответ

7 голосов
/ 03 марта 2012

gflags - это то, на что вы могли бы обратить внимание для сложных сценариев в целом.В частности, эта страница для безоговорочной отладки приложения при его запуске.

Тем не менее, я думаю, что это излишне для того, что вы хотите.Обычно я просто выкидываю некоторый код в мою программу, который будет ждать подключения отладчика, если он был построен в режиме DEBUG, и при запуске кода нажимается клавиша F1.Код, подобный этому, не должен остаться, но он довольно удобен.

#ifdef _DEBUG
if ( ::GetAsyncKeyState( VK_F1 ) )
{
    while ( !::IsDebuggerPresent() )
        ::Sleep( 100 );
    ::DebugBreak();
}
#endif
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...