2009-03-16 3 views
0

여러 하위 프로세스를 생성하는 응용 프로그램이 있습니다. 자식을 시작하기 전에 stdOut을 만들고 stdErr이 로그 파일을 처리합니다 (예를 들어 procA를 시작하면 logA.log에 대한 핸들을 만듭니다). 자식 프로세스에서이 핸들을 설정합니다. ProcExplorer을 찾고으로핸들 생성시 어떻게 중단 할 수 있습니까?

, 나는 자식 프로세스가 로그 파일 (그래서 PROCA가 LOGA, logb에 등을 핸들을 가지고)에 핸들을 가지고 있음을 알 수있다. 이것은 나중에 문제를 만듭니다.

procA가 logB 핸들을 생성하는 시점을보고 싶습니다. 어떤 이상?

답변

1

하나의 가능한 솔루션은 파일에 대한 핸들이 부모 프로세스에 의해 만들어지는 모든 자식 프로세스간에 공유 될 수 있다는 것입니다.

각 자식 프로세스에서 다중 파일 핸들 (각 로그 파일에 하나씩)을 가질 수있는 방법을 보지 못했기 때문에 볼 수있는 유일한 솔루션입니다. 따라서 하나의 var 만 처리하도록 설계하면됩니다.

왜 자식 프로세스에서 핸들을 만들지 않습니까? 나는 그것이 가격에 대해 질문에 대답하지만 분명히 procA가 logA를 처리하기 만하면 자식 프로세스 procA에서 logA에 대한 핸들을 생성하는 것이 더 좋을 것입니다.

+0

감사합니다. 나를 올바른 길로 인도했습니다. 하위 프로세스는 상위 핸들을 공유합니다. 나는 당신의 솔루션으로 갈 수는 없지만 모든 열린 핸들을 나열하는 방법을 찾고 있습니다. –

+0

해결되었으므로 자식 프로세스는 출력 리디렉션의 부작용으로 부모 프로세스를 상속합니다. –

1

자식 프로세스 procA가 logB 핸들을 만들 때 디버거를 중단하는 방법을 묻는 중입니까? Process Explorer에 대해 언급 한 이후로 Windows를 사용한다고 가정합니다.

Image File Execution Options 레지스트리 키를 사용하여 procA.exe이 시작될 때마다 디버거를 시작하도록 지정하는 것이 한 가지 방법입니다. 디버거가 시작되면 logB에 대한 핸들을 만드는 코드에 중단 점을 설정 한 다음 프로세스를 계속 진행할 수 있습니다. 이 기능은 Visual Studio뿐만 아니라 WinDbg 또는 ntsd 또는 AQTime과 같은 프로파일 링 도구와 같은 모든 디버거에서 작동합니다.

이렇게하는 또 다른 방법은 디버거가 모든 하위 프로세스에 연결하도록 지시하는 것입니다. enable this behavior with WinDbg or ntsd에는 여러 가지 방법이 있습니다. 그런 식으로 부모 프로세스에 디버거를 연결하면 procA 하위 프로세스에 자동 연결되고 적절한 코드에 중단 점을 설정할 수 있습니다.

또 다른 방법은 logB 핸들을 만들 때 DebugBreak() 함수를 사용하여 중단 점 예외를 생성하도록 코드를 임시 수정 한 다음 JIT (just-in-time) 디버깅을 사용하여 디버거를 연결하는 것입니다. 예외 필터 표현식을 사용하지 않고 코드가 구조화 된 예외를 처리하는 경우 (나쁜 아이디어 임)이 방법은 효과가 없으며 놀라운 결과 (교착 상태, 메모리 누수 등)가 발생할 수 있습니다.

+0

좋은 디버깅 기술! –