__asm
{
int 3
}
위와 같은 코드를 실행해보면 Visual C++ Debugger가 정확히 해당 위치에서 멈추는 것을 볼 수 있다. 그러면 위와 같은 코드 대신 좀 더 직관적인 코드를 만드는법은 없을까? 매크로 구문을 이용하면 된다. 단, 이와 같은 구문은 디버그 모드에 한정하여 쓰는 것이 좋겠다.
#define BREAKPOINT __asm \
{ \
int 3 \
} \
inline void SetBreakPoint(void)
{
#ifdef DEBUG
BREAKPOINT
#endif
}
위와 같이 코드를 작성하고 따로 헤더 파일로 분리해 놓은 다음 SetBreakPoint 함수만 원하는 곳에 걸어두기만 하면 된다. SetBreakPoint 안에서 걸리는게 아니냐고 묻는다면 걱정하지 않아도 된다. 왜냐면 inline 함수이기때문이다. 익히 알다시피 inline 함수는 Call Stack에 영향을 주지 않는 함수이다.
그리고 SetBreakPoint 함수를 릴리즈 모드에서 사용할 경우 아무것도 실행하지 않게된다. 그러므로 #ifdef ~ #endif 전처리기 구문을 굳이 써놓지 않더라도 무방하다.
출처: http://www.debuglab.com/knowledge/int3.html
'Software Development > .NET Framework' 카테고리의 다른 글
| [VS.NET] 자동 생성되는 COM Interop 어셈블리에 강력한 이름 적용하기 (0) | 2006/12/30 |
|---|---|
| 정규 표현식 자습서 [개정판] (3) | 2006/12/16 |
| Visual C++ Debugger가 Breakpoint를 감지하는 원리 (1) | 2006/12/12 |
| Object.ToString() 메서드와 NUnit (0) | 2006/12/11 |
| NUnit으로 ActiveX 컨트롤을 테스트하는 방법에 대한 고찰 (0) | 2006/12/06 |
| NUnit으로 ActiveX 컨트롤을 테스트하는 방법 (0) | 2006/12/04 |