Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

BAS_METHOD is an alternative tracing macro to use for method on C++ objects. It gives is a unique pointer for the “this” pointer of the object we are tracing calls into the methods of. This is what a trace might look like for a APPfoo object with this code:

Code Block
languagecpp
#include <BAS/BASstring.h>
#include <BAS/BAStrace.h>
BAS_TRACE_INIT;

class BASstring;

class APPfoo{
public:
   APPfoo();
   ~APPfoo();
   void run(const BASstring& Value, int Count);
};

APPfoo::APPfoo(){
   BAS_METHOD(APPfoo::APPfoo);
}
APPfoo::~APPfoo(){
   BAS_METHOD(APPfoo::~APPfoo);
}

void APPfoo::run(const BASstring& Value, int Count){
   BAS_METHOD(APPfoo::run);
   BAS_VAR2(Value, Count);
   BASstring Out;
   for (int i=0; i < Count; i++){
      BAS_VAR(i);
      Out += Value + "\n";
   }
   BAS_HEX("Dump", Out.data(), Out.size());
   BASout << Out;
}

Here’s the potential trace:

Code Block
breakoutModewide
  17:58:05.844701 0x1107d25c0 APPfoo                  . >APPfoo::APPfoo Line:10 this=0x7ffee9b9d7d0
  17:58:05.844756 0x1107d25c0 APPfoo                  . <APPfoo::APPfoo
  17:58:05.844798 0x1107d25c0 main                    . About to call run on Foo
  17:58:05.844832 0x1107d25c0 APPfoo                  . >APPfoo::run Line:17 this=0x7ffee9b9d7d0
  17:58:05.844889 0x1107d25c0 APPfoo                  . . Value = Rabbit, Count = 5
  17:58:05.844924 0x1107d25c0 APPfoo                  . . i = 0
  17:58:05.844960 0x1107d25c0 APPfoo                  . . i = 1
  17:58:05.844995 0x1107d25c0 APPfoo                  . . i = 2
  17:58:05.845029 0x1107d25c0 APPfoo                  . . i = 3
  17:58:05.845064 0x1107d25c0 APPfoo                  . . i = 4
  17:58:05.845104 0x1107d25c0 APPfoo                  . . Dump= (size=35)
                                                            52 61 62 62 69 74 0A 52 Rabb it.R
                                                            61 62 62 69 74 0A 52 61 abbi t.Ra
                                                            62 62 69 74 0A 52 61 62 bbit .Rab
                                                            62 69 74 0A 52 61 62 62 bit. Rabb
                                                            69 74 0A                it.
  17:58:05.845140 0x1107d25c0 APPfoo                  . <APPfoo::run
  17:58:05.845182 0x1107d25c0 main                    . All done!
  17:58:05.845217 0x1107d25c0 APPfoo                  . >APPfoo::~APPfoo Line:13 this=0x7ffee9b9d7d0
  17:58:05.845271 0x1107d25c0 APPfoo                  . <APPfoo::~APPfoo
  17:58:05.845326 0x1107d25c0 main                    <main

This is super helpful when debugging for the lifetime of C++ objects in an application.