A More Involved Example

Top  Previous  Next

Here's a more involved .cpp program that demonstates the logging commands.  You will find this demo project in the DebugLibrary source code directory, along with project files for ms .net2003,vc6, and dev-c++.

 

//---------------------------------------------------------------------------

// JrDebug demo that demonstrates various features

//---------------------------------------------------------------------------

 

//---------------------------------------------------------------------------

// System includes

#include <iostream>

#include <stdlib.h>

#include <assert.h>

#include <exception>

#include <stdexcept>

//---------------------------------------------------------------------------

 

//---------------------------------------------------------------------------

// Include the Debugging Library files

//  Note that only our main .cpp needs to include the jrdebug_main.cpp file

//  alternatively, you could add this cpp to your project or makefile.

#include "../../jrdebug_main.cpp"

//---------------------------------------------------------------------------

 

 

//---------------------------------------------------------------------------

int main(int argc, char *argv[])

{

 // main function

 

 // automatically parse commandline options and exit if appropriate

 if (JrDebugParseCommandlineArgc("Demo3",&argc,argv,"-db"))

         return 0;

 

 // you want very brief human readable output? (this does not display well in gui tool!)

 // JrDebug::SetBriefOutput(true);

 

 // if you like you can manually turn on file writing of debug statements

 // JrDebug::WriteToFilename("demologoutput.log",false);

 

 // for fun we let the tool announce itself

 JrDebugAnnounce("Test Application",true,argc,argv);

 

 // simple loop

 for (int count=0;count<10;++count)

         {

         dbprintf("Performing iteration #%d",count);

         // an assert that passes and won't be displayed

         assert(25<100);

         }

 

 // turn on display of even asserts that pass and do a passing assert; pass more than 3 args to cause assert failure

 JrDebugSetDisplayPassingAsserts(true);

       assert(argc<4);

 

 // here are two more complicated debug statements (first one just specifies type and severity level; second specifies also a subtype and the current 'activity')

 dbprintf(JrdWarning,25,"This is a debug warning statement.");

 dbprintf(JrdNote,"useless","testing",10,"This is another debug statement.");

 

 // here is another loop but with activity push/pop - this will report timings of activities

 JrDebugActivityPush("Looping");

 int count3,count4,count5;

 for (int count2=0;count2<10;++count2)

         {

         JrDebugActivityPush("iterate");

         // take some time

         for (count3=0;count3<3000;++count3)

                 {

                 // now here is a manual push pop, and further more, we use a * in front of description to avoid display (only used if other messages displayed inside)

                 JrDebugActivityPush("*innerloop");

                 for (count4=0;count4<3000;++count4)

                         {

                         // just eat up some cpu cycles

                         count5=count3-count2; count5++; count5--; count5=count3-count2;

                         }

                 JrDebugActivityPop("*innerloop");

                 }

         JrDebugActivityPop("iterate");

         }

 JrDebugActivityPop("Looping");

 

 // the JrdAlarm type always triggers a windows messagebox if compiled on windows

 // dbprintf(JrdAlarm,1,"This is an alarm.");

 

 // want to try some stream style output?

 debugout << "here is stream debug mesg (argc="<<argc<<").";

 debugout(JrdTest,"stream","testing",100) << "here is another more specific stream debug message";

 

 

 dbprintf("Program has finished, now testing an exception.");

 

 // how about a debuglogged exception

 // JrDebug::EnableExceptionLogging();

 // // // for fun we can also turn on an alarm filter to generate an additional pop up messagebox for severity levels >=10

 // // // JrDebug::SetAlarmFilterLevel(5);

 // // the debuglogged repalcement for:  throw exception();

 try

         {

         JrDebugThrow(std::exception(),"testing an exception throw");

         }

 catch (...)

         {

         }

 

 

 // new test to verify we dont get double printf-style arge replacements

 std::string troublestring ="C:\\Mydrive%d%s.";

 dbprintf("Here is my troublesomestring '%s'.",troublestring.c_str());

 

 // exit

 std::cout << "Hit 'Enter' key to exit."<<std::endl;

 std::cin.get();

 return 0;

}

//---------------------------------------------------------------------------