C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[583] 코딩으로 브레이크 포인트 걸기.
김태선 [jsdkts] 10718 읽음    2006-03-10 16:32
알아도 몰라도 별 상관 없는 팁인데,
코딩으로 브레이크 포인트 거는 방법에 관한 것입니다.

    asm int 3;
디버그 모드에서 실행하면 이 코드에서 브레이크포인트가 걸려 멈추고
빌더나 VC는 해당 소스 라인을 보여줍니다.

    DebugBreak();
이건 API 함수에서 지원하는 브레이브포인트 거는 함수입니다.
함수의 내용은
    asm int 3;
    asm ret;
이게 다입니다.

하지만 코드가 ntdll 안에 있기 때문에, 소스라인이 보여지는 것이 아니라
빌더의 CPU 창이 뜨게 됩니다. 소스가 없으니 CPU 창이 뜨는 것이지요.

asm int 3; 이나 DebugBreak(); 공히 CPU에 브레이크포인트를 거는 것에
불과하므로, F9나 F7, F8 로 계속 프로그램 실행을 진행할 수 있습니다.

주의할 점은 디버그모드가 아닌 상태에서 int 3; 은
"프로그램에 문제가 발생해서 종료합니다. 오류상태를 MS에 통보할까요 하는 OS가 뿌리는
어플 강제 종료 메시지 창을 만나게 됩니다.

이걸 어디에 쓰면 좋을까요?
ㅡㅡ;
BloodWolf [cyberpd]   2006-03-10 18:02 X
asm { int 3; } 호출하면, 에러메시지가 발생하고, 그 메시지창의 '디버그'를 누르면 시스템에 지정되어 있는 디버거에 현재 실행되는 소스코드 라인부터 디버깅 할 수 있도록 해줍니다. 그럼, 런타임 실행중에 오류나 나는 부분이 있으면 자동으로 디버거를 호출할 수 있겠죠. 주로 사용자 정의 assert와 함께 많이 쓰이는것으로 알고 있습니다. 관련 내용은 예전 'Game Programming Gems' 서적 시리즈에서 봤습니다.

[참고] http://www.gpgstudy.com/forum/viewtopic.php?t=5334
김태선 [jsdkts]   2006-03-10 22:16 X
좋은 정보군요.
WARSHIP [warship]   2006-03-11 10:21 X
좋은 정보였습니다 ^^

+ -

관련 글 리스트
583 코딩으로 브레이크 포인트 걸기. 김태선 10718 2006/03/10
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.