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
[599] TRACE로 디버깅 정보를 찍을때 소스파일 함수명 소스줄 번호가 같이 찍히게 하려면? (수정함)
김태선 [jsdkts] 8223 읽음    2006-04-29 13:58
급히 프로그램을 만들어 내용을 수정해서 다시 올립니다.
혹 이전꺼 받으신 분은 이걸 받으셔야 합니다. -..-;
-----------------------------------------------


문득, TRACE 창을 보고 있노라니 메시지가 표시되는 소스의 줄번호와 함수명과 소스파일명이
같이 찍히게 하면 어떨까라는 생각이 들더군요.
그 동안 C++빌더 뿐만 아니라 VC++에서도 자동으로 이 정보가 찍히게 하질 않았는데
생각이상 편리할 것 같아 궁리하다가 결국 간단한 매크로로 해결을 했습니다.

첨부한 소스를
#include "Trace.h"
로 포함하시고
TraceWindow.exe는 실행시켜 놓고,

소스에 추적하고 싶은 곳에 디버깅 정보를 기재하면 됩니다.
void  TTest::IamFunc(int value)
{
   TRACE("난 함수다. 인자값은 : %d", value);  // 이 줄이 151번 라인이라면
}
이런 식으로 TRACE 라인을 넣으면 됩니다.

이때 물론 Trace.cpp 는 프로젝트에 추가해야 겠지요.

결과는
/////////
난 함수다. 인자값은: 100    (151 TTest::IamFunc - D:\....\TTest.cpp)
/////////
이렇게 찍힙니다.


나중에 릴리즈 할때 이 TRACE  라인을 지울 필요는 없습니다.
릴리즈모드로 컴파일하거나
#include "Trace.h"
이전에
#define TRACE_OFF
또는
#define DEBUG_OFF
라고 선언해주기만 하면 됩니다.
또는 프로젝트->Options->Directory...->Conditionals 에 넣어주어도 됩니다.
그러면 실행화일에서는 디버깅 정보가 100% 사라지게 됩니다.

제가 사용하는 Trace 소스와 TraceWindow 디버깅 창 프로그램을 같이 올립니다.
어떻게 소스 라인 정보를 찍는지는 소스를 보시면 됩니다.

Trace.h 에
void     SETTRACE(int line, char *func, char *file); // 소스라인,함수명,소스명 표시를 위한 저장용.
void    TRACE2(char * szFormat, ...);                 // TracePlus 창에 표시
void    DEBUG(char * szFormat, ...);                // EventLog 창에 표시.

#define TRACE            SETTRACE(__LINE__, __FUNC__, __FILE__); TRACE2
가 있는데
TRACE 매크로가 현재 라인번호와 함수명과 파일명을 전달하는 역할을 합니다.
간단한 트릭이죠.


TraceWindow는 기존 사용하던 Trace 창이 불편해서 C++ 디버깅에 편리하도록
급히 제작했습니다. 그래서 꼭 필요한 기능 외에는 없습니다.

Trace.cpp 의 include 는 사실
#include <vcl.h>
하나만 있어도 됩니다.
VC++사용자도 수정없이 사용할수 있도록 그렇게 해 놓은 겁니다.

그럼 즐거운 플밍하시기를...
장성호 [nasilso]   2009-07-03 16:02 X
주의할점

if문에서 TRACE 할경우 { } 반드시 대괄호를 해주야함

if ( 조건 ) TRACT(...)

하면 로그가 찍히지 않습니다.

그럼..

+ -

관련 글 리스트
599 TRACE로 디버깅 정보를 찍을때 소스파일 함수명 소스줄 번호가 같이 찍히게 하려면? (수정함) 김태선 8223 2006/04/29
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.