2012-03-03 3 views
2

com 객체 처리시 버그를 추적하려고합니다. 우리의 프로그램은 우리의 ActiveX 컨트롤에서 실행되며, 앱이 다시 닫히면 몇 가지 문제가 발생합니다. OCX에서 처음 실행될 때 Visual Studio (2008) 디버거를 앱에 첨부하고 싶습니다. 어떻게해야합니까?시작시 프로세스에 디버거 연결하기

일부 세부 정보 :

A) OCX하고 조금 C++에서 주로 C/C로 작성된 응용 프로그램 ++/CLI (즉, 응용 프로그램의 발사)
B에있는 아무 역할을하지 않음) 난에 연결하는 경우 프로그램은 그래서 난의 수명을 추적하기 위해 시도 할 수

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에서 시작되는 우리의 프로그램에 디버거를 연결하고 싶습니다 내가 olelock.cpp에서 출구에 주장을 얻을 실행되는 동안 COM 개체. 아니면 이러한 객체를 추적하는 또 다른 방법이 있을까요?

답변

5

gflags은 일반적으로 복잡한 시나리오에서 살펴볼 내용입니다. 특별히 this page이 실행되면 앱을 무조건 디버깅합니다.

그러나 나는 이것이 당신이 원하는 것에 대해 과잉이라고 생각합니다. 보통 디버그 모드가 디버그 모드로 빌드되어 있고 코드가 시작될 때 F1 키를 누르면 디버거가 연결될 때까지 기다릴 것입니다. 이와 같은 코드는 남지 않아야하지만 꽤 편리합니다.

#ifdef _DEBUG 
if (::GetAsyncKeyState(VK_F1)) 
{ 
    while (!::IsDebuggerPresent()) 
     ::Sleep(100); 
    ::DebugBreak(); 
} 
#endif