2014-03-24 3 views
4

맵 파일을 사용하여 자체의 커버리지 데이터를 생성 할 수있는 코드를 작성했으며 다른 애플리케이션을 디버깅 할 필요가 없으며 추가 분석을 위해 Cobertura 보고서 및 OpenCover와 호환되는 XML 보고서를 생성 할 수 있습니다. 및 그래픽 보고서.프로세스 종료 콜백

사실 지금까지 보고서를 수동으로 생성하는 함수를 호출해야하고 아이디어는 프로세스가 종료되자 마자 자동으로 생성하는 것입니다.

첫 번째 방법은 RtlExitUserProcess/RtlExUserThread/ExitProcess에서 후크를 쓰는 것이었지만 각 함수는 프로세스를 강제 종료 (예 : taskkill을 사용하여 종료)하거나 Ctrl 키를 사용하여 응용 프로그램 콘솔 창을 닫으면 + C 동작이 변경됩니다.

응용 프로그램이 끝날 때 항상 호출되는 안정적인 콜백을 만들 수있는 방법이 있습니까? 다른 앱을 디버깅 할 때와 마찬가지로 프로세스가 종료되면 자세한 정보가 포함 된 디버그 이벤트가 수신됩니다.

미리 감사드립니다.

+1

나의 이해는 당신이 "kill process"/ "task kill"에 연결될 수 없다는 것이며, 여기에 백업 된 것으로 보인다. http://stackoverflow.com/questions/838261/handling-end-process-of- a-windows-app – Graymatter

답변

5

아니요, 자신의 프로세스 종료를 연결할 수 없습니다. 가능하면 악의적 인 (또는 버그가있는) 프로그램이 그것을 후킹 할 수 있으며, 그 후 해지를 따르기를 거부합니다. 디버거는 별도의 프로그램이므로 디버거와 다릅니다.

귀하의 프로그램을 작성한 적이 있습니까? 관련 부서의 finalization 섹션에보고 코드를 입력하기 만하면됩니다. Delphi RTL은 프로그램이 종료 될 때이를 호출합니다. 일반적으로 단위가 초기화 된 역순으로 이루어지며, 일반적으로 단위가 인 순서는입니다. 프로그램 초기에 분석 장치를 사용하면 가능한 한 많은 데이터를 캡처 할 수 있도록 종료 시퀀스의 마지막 단계에서 최종화됩니다.

+0

+1 나에게서. 또한 Ctrl + C는 [SetConsoleCtrlHandler] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms686016%28v=vs.85%29.aspx)에서 처리 할 수 ​​있습니다. –