[Visual Studio] 코드로 중단점을 걸어보자 Lu's…〃 Programing。


 디버깅을 할 때 중단점은 굉장히 중요한 요소이다. 원하는 위치에, 원하는 조건과 원하는 때(호출된 위치)에 프로그램을 중단시킬 수 있기 때문이다.

 Visual Studio에선, 중단점/책갈피/열린 파일 등의 정보는 .suo(solution user option) 파일에 저장이 된다. 이 파일은 협업 시 공유할 필요가 없다.

 협업 중, 또는 코드만 보관하는 등 중단점을 저장할 방법이 없다면 debugapi.h 에 있는 함수를 사용하여 중단점을 걸 수 있다.



WINBASEAPI VOID WINAPI DebugBreak(VOID);

라고 돼 있는 함수이고, 자세한 내용은 MSDN 참고.



 끝, 인줄 알았지만 할 게 더 남았다. 이 함수를 호출하면 중단점이 트리거 되는데, 문제는 디버깅을 하지 않을 때 발생한다.

해당 함수는 중단점을 무조건 실행하기 때문에 디버거가 연결되지 않으면 죽어버린다. 

따라서 현재 프로세서가 디버거와 연결되어 있는지 확인할 필요가 있다.

 당연히, 그런 코드 역시 존재한다. debugapi.h에 위치한다.



WINBASEAPI BOOL WINAPI IsDebuggerPresent(VOID);

자세한 내용은 MSDN 참고.


 
 요약하자면, 코드 수준에서 중단점을 찍는 방법은 다음 코드와 같다.



    if (IsDebuggerPresent()) DebugBreak();



x86, x64 플랫폼에서 사용이 가능하니 __asm int 3; 같은 코드는 naver...



 + debugapi.h 는 winbase.h 에 포함되어 있고, winbase.h 는 windows.h 에 포함되어 있다.
 + 디버깅 중 출력이 필요한 일이 있다면 콘솔 창을 쓰지 말고 OutputDebugString() 함수를 쓰자




덧글

댓글 입력 영역