2013-07-07 2 views
1

다른 프로세스에 의해 생성 된 오류있는 프로세스를 디버그하려고합니다. 나는 __debugbreak(); __asm int 3; 이미지 파일 실행을 시도했지만 아무것도 작동하지 않는 것 같습니다. 누구든지 코드에서 디버거를 부착하는 방법에 대한 아이디어가 있습니까?C++ 다른 프로세스가 디버깅하는 방법

+0

왜 코드에서 디버거를 연결해야합니까? 일반 첨부를 처리 할 수만 있습니까? – asafrob

+0

프로세스가 다른 프로세스에서 생성됩니다. 디버거가 원래 디버거에 연결되어 있고 생성 된 디버깅해야합니다. – qballer

답변

2

가끔 사용하는 사람은 그 (NULL, "부착", MB_OK를 "첨부")

당신은 SDK 및 사용법 #include "WINDOWS.H"링크를해야합니다

메시지 박스이지만, 그것에 관한 것입니다. 메시지 상자가 나타나서 확인을 클릭 할 때까지 기다립니다. 그 시점에서 디버거를 연결하고 중단 점을 설정 한 다음 확인을 클릭하십시오.

생성 된 프로세스의 응답을 기다리는 생성 프로세스의 시간 워치 독이없는 한 작동합니다. 있다면 VS를 시작하고 연결할 수 있도록 시간 초과를 늘려야 할 수도 있습니다.

0

__debugbreak() 대신 DebugBreak을 사용하지 않은 이유가 무엇입니까?

는 여기가 시작되지 않은 디버거 등장 경우 했어 description of the differences

하지만 세션 VS/버전 첨부하는 것에 대해 나에게 묻지 숨겨진 대화 상자가 실제로이 있었다. 이 문제가 발생하지 않도록 창을 통해 alt-tab을 확인하십시오. 다른 건 내가 때때로 생성 된 프로세스의 시작 부분에 트릭 를 사용하지 작동하는 경우

+0

그 링크에 따르면 유일한 차이점은 사용 가능한 호출 스택을 얻기 위해 시스템 심볼을 사용할 수 있어야하고 다른 하나는 사용하지 말아야한다는 것입니다. 그 외에도, 그들은 동일합니다. 그렇다면 왜 __debugbreak()를 사용하지 않겠습니까? –

+0

동의 함 -이 기능이 작동하지 않는 이유는 없지만 제출자가 아니기 때문에 다른 API 호출이 어떻게되는지 궁금합니다. 시스템 심볼은 일반적으로 VS/symsrv를 통해 설치하고 설치하는 것이 좋습니다. – holtavolt

+0

나는 그것들 둘 다 작동시키지 않으려 고 노력했다. – qballer

3

은 내가

while(1) 
{ 
    Sleep(1000); // +Breakpoint 
} 

가 시작된 후 프로세스에 연결하고 통과 가기 위해 "설정 다음 문"을 사용하여 넣어 고리.

나는 보통

문제가 해결 된 후에이 코드를 제거해야합니다 윈도우 서비스의 ONSTART()를 디버깅하는 데 사용합니다.

2

Visual Studio에서는 CreateProcess와 함께 DEBUG_ONLY_THIS_PROCESS 플래그를 사용합니다. windbg로 전환하거나 코드에서 디버거를 연결할 수 있습니다. 예 : 활성 VisualStudio.DTE.11.0 객체를 가져온 다음 _DTE :: Debugger를 호출하여 디버거를 가져오고 Debugger :: LocalProcesses를 호출하여 프로세스 목록을 가져옵니다. 원하는 프로세스 (예 : 파일 이름 또는 생성 시간)를 찾은 다음 Process :: Attach를 호출하십시오.

+0

Visual Studio에서 프로세스와 프로세스가 생성하는 모든 프로세스를 디버그 할 수있는 방법이 없습니까? – bames53

+0

은 Microsoft Connect에 대한 많은 요청을 보았으나 아무런 조치도 취하지 않았으며 재 설계하기가 어려웠습니다. –

관련 문제