수안이의 컴퓨터 연구실

  • Mainpage
  • About Me
  • Tags
  • Metapage
  • Notice
  • Location
  • Keywords
  • Guestbook
  • Admin
  • Write an Article
  • Total | 1694976
  • Today | 721
  • Yesterday | 606

2 Articles, Search for 'TRACE'

  1. 2007/03/21 파일로 트레이스 하도록 바꾸기 (3줄이면 됨)
  2. 2007/01/02 TRACE 매크로를 구현하는 방법
Programming/Debugging2007/03/21 09:23

파일로 트레이스 하도록 바꾸기 (3줄이면 됨)

원본 : http://www.debuglab.com/knowledge/filetrace.html

1.요약

MFC에서 말입니다. 모든 트레이스를 파일로 하도록 바꿔봅시다.
예전에 어떻게 좀 해볼라고 하다가 실패했는데, 간단하고도 효과적인 방법이 무수히 많이 있습니다. 그중에 하나!


2.본문

트레이스를 저장할 로그 파일을 하나 만듭니다. 아무래도 프로그램이 살아있는 내내 써야할테니 전역적으로 만드는 것이 좋겠죠..

CFile dumpFile; 

프로그램이 시작할 때 다음과 같이 해줍니다.


dumpFile.Open(_T("dump.log"), CFile::modeWrite | CFile::modeCreate); 

afxDump.m_pFile = &dumpFile; 

끝입니다.

자.. 위와 같이 했다고 치고 다음과 같이 사용하면 어찌 될까요?


_RPT0(_CRT_WARN, "RPT0\n"); 

TRACE("trace..\n"); 

afxDump << "afxDump\n"; 

ATLTRACE("atltrace\n"); 

위에 3개는 잘 나오지만 ATLTRACE 에서는 안됩니다.
왜냐면, ATLTRACE 는 OutputDebugString() API 로 구현되었기 때문이죠.

TRACE 매크로는 afxDump 를 사용해서 구현됩니다.
그리고 afxDump는 AfxOutputDebugString()을 사용해서 구현됩니다.
AfxOutputDebugString() 은 debug 버전에서는 _RPT0 매크로를 사용하고 release 버전에서는 OutputDebugString() 을 사용합니다.

자, 위에 글을 또박또박 읽으셨을 분은 많지 않으리라 생각합니다만
어쨌든, 위와같은 사실을 두고 봤을때 afxDump 에 파일을 대입한 것이 _RPT0 에게 까지 영향을 미친다는 사실은 신기하지 않을 수 없습니다.

원인은 다음과 같습니다.

CRT 는 trace를 hooking 할 수 있도록 _CrtSetReportHook() 라는 함수를 두고 있습니다. MFC는 다음과 같이 사용하고 있군요.

pfnOldCrtReportHook = _CrtSetReportHook(_AfxCrtReportHook);

-----------------------------------------------------------

물론 좋은 툴을 사용할 줄 아는 지혜도 필요하겠죠.

www.sysinternals.com 에 가셔서 DebugView 라는 유틸을 받아서 사용해 보세요.


3.예제



4.참고

Debugging Windows Programs, Strategies, Tools, and Techniques for Visual C++ Programmers p.138,139

MFC, ATL source code and MSDN.



- 2001.08.13 Smile Seo -

"Debugging" 카테고리의 다른 글
  • Set Next Statement 를 통해서 디버깅 하기 (0)2007/03/23
  • 파일로 트레이스 하도록 바꾸기 (3줄이면 됨) (0)2007/03/21
  • Watch 창에서 함수 실행하기 (0)2007/03/21
  • 소스로 바로가는 TRACE (0)2007/03/19
  • LastError를 보여주는 Debugging Trace Macro (0)2007/03/05
2007/03/21 09:23 2007/03/21 09:23
Posted by webdizen
Tags file, TRACE
No Trackback No Comment

Trackback URL : http://www.webdizen.net/blog/trackback/2709

Leave your greetings.

[로그인][오픈아이디란?]

Programming/Win32 API2007/01/02 17:23

TRACE 매크로를 구현하는 방법

고수닷넷 - 데미소다오렌지님

MFC를 사용하지 않을 경우에 겪는 불편한 점 중 하나로 TRACE가 없다는 것을 들 수 있습니다. 그래서 디버깅 출력을 하려면 모두 OutputDebugString으로 불편하게 확인을 해야 합니다. 이 문서는 그러한 불편함을 해소해 줄 XTRACE의 구현에 대해서 담고 있습니다. 기본적인 아이디어는 MFC의 TRACE에서 가져왔습니다. TRACE보다 발전된 점은 없습니다. 단지 TRACE와 같은 것을 MFC가 없는 곳에서 쓸 수 있다는 점 입니다.

사용법은 간단합니다.

  • 1.아래 소스를 긁어서 별도의 헤더 파일로 저장 하십시오.
  • 2. xtrace.h등으로 저장하신 후에기본 인클루드에 포함되어 있는 패스에 위 파일을 복사시켜 줍니다.
  • 3. XTRACE를 사용하고 싶으신 소스에서 헤더 파일을 인클루드 하시고 XTRACE 매크로를 사용하시면 됩니다.

XTRACE는 릴리즈 버전에는 자동으로 함수 호출 스텁이 제거되도록 설계되었기 때문에, 별도로 릴리즈 버전이라고 제거하실 필요는 없습니다. 또한 릴리즈 버전에서도 트레이스 구문을 확인하고 싶으신 경우에는 FORCE_XTRACE 매크로를 선언해 주시면 됩니다. 아래는 헤더 파일의 전체 소스 입니다. 트레이스 구문은 dbgview등의 프로그램으로 확인이 가능합니다. dbgview 프로그램은 sysinternals.com에서 다운로드 가능합니다.

#ifndef XTRACE_H 
#define XTRACE_H 

#include  
#if defined(_DEBUG) || defined(FORCE_XTRACE) 

#define XTRACE_BUF_SIZE 4096 
#define XTRACE          _DbgPrintf 

inline void __cdecl _DbgPrintf(const char *str, ...) 
{ 
    char    buff[XTRACE_BUF_SIZE]; 
    char    rbuff[XTRACE_BUF_SIZE]; 
    DWORD   dwError; 
    va_list    ap; 

    dwError = GetLastError(); 

    va_start(ap, str); 
    if(_vsnprintf(buff, sizeof buff, str, ap) < 0) 
        buff[sizeof buff - 1] = 0; 
    va_end(ap); 

    if(_snprintf(rbuff, sizeof rbuff, "%s\n", buff) < 0) 
        rbuff[sizeof rbuff - 1] = 0; 

    OutputDebugString(rbuff); 
    SetLastError(dwError);    
} 


#else 

#define XTRACE 1 ? (void) 0 : _DbgPrintf 
inline void _DbgPrintf(const char *str, ...) {} 

#endif 

#endif 

소스에 몇가지 테크닉을 소개하면 일단 _DbgPrintf가 가변 인자 함수로 구성되었다는 점을 들 수 있습니다. 따라서 printf와 같이 포맷 문자열을 사용해서 변수들을 출력할 수 있죠. 그리고 특징적인 점은 디버그 버전에서 XTRACE를 제거하는 구문입니다. 통상적으로 가변인자 매크로를 지원하지 않는 컴파일러의 경우 괄호를 두번 싸게해서 그 처리를 할 수 있지만, 여기서는 MFC형식을 따라서 인라인 함수로 _DbgPrintf를 선언하고 삼항 연산자를 사용해서 _DbgPrintf가 호출되지 않도록 했습니다. 쇼트서킷을 사용해서 XTRACE 0 && _DbgPrintf등을 사용할 수도 있습니다.

"Win32 API" 카테고리의 다른 글
  • 프로세스 우선순위 조절하기 (2)2007/01/03
  • 클립보드 모니터링 하기 (0)2007/01/03
  • TRACE 매크로를 구현하는 방법 (0)2007/01/02
  • 윈도우 종료 시키기 (0)2007/01/02
  • 작업관리자에 표시되는 응용프로그램 열거하기 (0)2007/01/02
2007/01/02 17:23 2007/01/02 17:23
Posted by webdizen
Tags TRACE, 매크로
No Trackback No Comment

Trackback URL : http://www.webdizen.net/blog/trackback/2545

Leave your greetings.

[로그인][오픈아이디란?]

«Prev  1  Next»

RSS HanRSS
Blog Image
webdizen
이곳은 컴퓨터에 대해 연구하고, 공유하고, 소통하기 위한 연구실입니다. 개인적으로는 OLAP, Data Mining, Semantic Web, Data Modeling에 대해서 연구하고 있습니다.

Categories

전체 (3009)
Webdizen (141)
Life (6)
Diary (16)
Blog (9)
IDEA (2)
Travel (10)
Book (16)
Photo (7)
Movie (8)
Music (14)
Leisure Sports (10)
Funny (6)
Hardware (121)
Software (120)
Windows (5)
Unix & Linux (120)
Installation (5)
Kernel (10)
System (34)
Develop (22)
X-Window (0)
Applicaton (31)
Security (4)
Framework (2)
Hadoop (2)
Programming (804)
Algorithm & Data Structure (1)
Assembly (38)
UNIX/Linux C (95)
C++ (128)
STL (4)
Java (38)
Win32 API (92)
ATL/COM (44)
MFC (151)
.NET (26)
WCF/WPF (4)
C# (28)
Network Programming (17)
Database Programming (12)
OpenGL / DirectX (13)
Multimedia Programming (0)
Game Programming (21)
Parallel Distributed Progra... (0)
Reverse Engineering (0)
Debugging (9)
Python (1)
Ruby (1)
Ruby on Rails (1)
QT (4)
GTK (0)
JSP (0)
PHP (6)
ASP.NET (6)
ASP (2)
Development (28)
Useful Library (2)
Data Modeling (0)
Database (105)
Oracle (4)
MSSQL (41)
MySQL (2)
Data Warehouse (2)
Data Mining (4)
Network (66)
Web (79)
DHTML (4)
XHTML (1)
Javascript (1)
CSS (1)
AJAX (9)
XML (11)
Flex (1)
Silverlight (3)
Security (91)
DoS (1)
Kernel (10)
Scanning (3)
Sniffing (0)
Spoofing (4)
Overflow (28)
Web (11)
Shell (10)
Format String (14)
Window (2)
Embedded (70)
Multimedia (27)
Mobile (14)
Graphic (24)
Management (633)
Knowledge (581)
Hadoop (0)

Notice

  • 메타 블로그 사이트에 등록
  • 새해 맞이 블로그의 변화
  • 블로그 명칭 변경
  • 도메인(www.webdizen.net) 구...
  • TEXTCUBE 1.6.1로 업그레이드...

Tags

  • 가치관
  • 블로그
  • 볼링
  • 컨트롤
  • Data File
  • Employment
  • DB
  • DOCTYPE
  • IOCP
  • Chat
  • 아산관
  • 법과대학
  • 공유 라이브러리
  • INI 파일
  • 시스템이용률
  • 조선일보
  • Registry Key
  • 에빙하우스
  • XML
  • JDOM

Recent Articles

  • 트위터(Twitter)의 시작!.
  • 청년 리더의 조건.
  • 애플의 타블렛 PC - 아이패드....
  • 미래의 인터페이스 - 육감 기....
  • 기초발성법 동영상 강좌.

Recent Comments

  • 경청... 너무나 중요한데.......
    webdizen 14:59
  • 학교 과제물중 쓰레드에 대하....
    장진혁 03/17
  • 관리자만 볼 수 있는 댓글입....
    비밀방문자 03/12
  • 상대방의 이야기를 열심히 경....
    DoNuts 03/03
  • 좋은글 잘 보고 갑니다..
    Und_hacker 01/08

Recent Trackbacks

  • printf,scanf를 이용한 형식....
    yundream의 프로그래밍 이야기 03/10
  • 파일 열기/저장하기 CFileDialog.
    은마군의 나태블록 2009
  • World IT Show 2008.
    상우 :: Oranzie's BLOG 2008
  • cvs서버 설치하기.
    3인3색 2008
  • 속속 공개되는 Google Chart....
    PHP와 Web 2.0 2007

Archive

  • 2010/02 (1)
  • 2010/01 (6)
  • 2009/12 (5)
  • 2009/09 (3)
  • 2009/08 (1)

Calendar

«   2010/03   »
일 월 화 수 목 금 토
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      

Bookmarks

    • Administration
      • IIS.NET
      • NTFAQ
      • OS의 모든 것
      • 리눅스포털
    • Database
      • SQL Server Central
      • SQL Team
    • Development
      • .NET Heaven
      • ASP Alliance
      • ASP.NET 2.0
      • Bullog.net
      • C# Corner
      • C++ (C PlusPlus.com)
      • C++ Reference
      • CodeGuru
      • CodePlex
      • DebugLab
      • Dev Articles
      • Devpia
      • DotNet Junkies
      • DotNet Zone
      • Driver Online
      • GOSU.NET
      • HOONS 닷넷
      • Joinc 팀블로그
      • KOSR
      • MSDN Home Page
      • OSR Online
      • Sky.ph - 개발자 커뮤니...
      • TAEYO.NET
      • The Code Project
      • WindowsClient.net
      • 김상욱의 개발자 Side
      • 조인시 위키
    • Human Networks
      • belief21c's e-space
      • I think I can
      • Invisible Rover's Blog :D
      • Polarux - Linuxing
      • Rodman®
      • 까만 나비
      • 나를 가꾸는 시간.
      • 단녕
      • 상우 :: Oranzie's BLOG
    • Information Technology
      • Microsoft TechNet
      • 지디넷코리아 - 글로벌...
    • Security
      • FoundStone
      • milw0rm
      • NewOrder
      • OpenRCE
      • Phrack.org
      • Reverse Engineering b1...
      • Reverse Engineering Team
      • RootKit
      • SecurityFocus
      • SecurityXploded by Nag...
      • Wow Hacker
      • Zone-H
Textcube
Louice Studio Inc.
Powered by Textcube. Original designed by Tistory.