Click here to Skip to main content
15,885,182 members
Articles / Desktop Programming / MFC

Simple Trace Format Tips

Rate me:
Please Sign up or sign in to vote.
4.40/5 (9 votes)
4 Oct 2000 83K   599   33   6
A simple way to format your TRACE statements so double clicking takes you directly to the source code

Introduction

When writing TRACE statements to the output window in DevStudio, it is often useful to be able to go directly to the section of code that produced the TRACE output. Doing this is simple - you just use the __FILE__ and __LINE__ macros in your TRACE statements.

If you format your TRACE statement as follows:

C++
TRACE(_T("%s(%i) : Please double click on me!\n"), __FILE__,__LINE__);

then you can double click on the TRACE output line and be taken directly to the line of code the produced the TRACE statement.

An example of using this can be found in the enclosed example. Note that in the example, I used the CDuration class by Laurent Guinnard.

License

This article has no explicit license attached to it, but may contain usage terms in the article text or the download files themselves. If in doubt, please contact the author via the discussion board below.

A list of licenses authors might use can be found here.


Written By
Technical Lead Doclogix
Lithuania Lithuania
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
GeneralDebug Logs Pin
8-Feb-01 2:13
suss8-Feb-01 2:13 
GeneralThis (and more) has been a part of ATL/AUX for 2 years... Pin
Andrew Nosenko9-Oct-00 11:15
Andrew Nosenko9-Oct-00 11:15 
GeneralI like it, but... Pin
Paul Westcott5-Oct-00 6:52
Paul Westcott5-Oct-00 6:52 
GeneralHow to make it even shorter Pin
Helmut Mülner5-Oct-00 22:31
sussHelmut Mülner5-Oct-00 22:31 
GeneralRe: How to make it even shorter Pin
Paul Westcott6-Oct-00 5:24
Paul Westcott6-Oct-00 5:24 
G'day Helmut,

Two problems with what you have suggested:

1. you are replacing all TRACE statements with the altered function, which is not necessary what you want to do (such as in the sample project that Audrius sent:

<code_snippet>
#define DURATION_TRACE(str) \
drTimeSpan.Stop(); \
TRACE(_T("%s(%i) : \n"),__FILE__,__LINE__); \
TRACE(_T("Duration\n")); \
TRACE(_T("\tInfo: %s.\n"),str); \
TRACE(_T("\tCurrent time: %s. \n"),
COleDateTime::GetCurrentTime().Format()); \
TRACE(_T("\tTime elapsed: %s. \n"),drTimeSpan.Format())


which you would have to all be put on one line, which would make it less readable, whereas under my scheme, the first line would be a LINETRACE and the rest of the lines would still be TRACE statements

2. Your proposed solution is ok if you are using MFC, but the solution I proposed will work if you are using either a MFC application or a ATL application - it could really have been as follows to be a little bit shorter though [save 1 line!! Smile | :) ]...

#ifndef TRACE_FUNCTION
#ifdef ATLTRACE
#define TRACE_FUNCTION ATLTRACE
#else
#ifdef TRACE
#define TRACE_FUNCTION TRACE
#endif
#endif
#endif

#define LINETRACE TRACE_FUNCTION(_T("%s(%i) : "), __FILE__,__LINE__);TRACE_FUNCTION

this (as well as my original snippet), also allow the user to overwrite the TRACE_FUNCTION by defining it before this section of code.

Have fun,
Paul Westcott
GeneralRe: I like it, but... Pin
30-Jul-01 4:58
suss30-Jul-01 4:58 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.