Please enable JavaScript to view this site.

Memory Validator Help

Navigation: Tag Tracking

Data Tracking with svlDataTracker

Scroll Prev Top Next More


Tag trackers allow allocations to be marked with a tag that can later be used to filter allocation events.



Examples of using tag trackers in code


Here's a simple example function using tag trackers:


void exampleFunc()
   int   i;
   for(i = 0; i < getNumWorkUnits(); i++)
      svlDataTracker   trackWorkUnits("workunit"); // Set current tracker to be 'workunit'


In this example all memory allocations, reallocations and deallocations that happen inside processWorkUnits() have the tag workunit.


In the more complex code fragment below, three tags are used to classify the actions of the functions called.


Note that when the Flowers tracker starts, the Cats tracker is temporarily suspended, to be resumed when the Flowers tracker falls out of scope.


   createAFish("Pike");                   // no tracker
      svlDataTracker   tracker_cats("Cats");
      createAnAnimal("Lion");             // cats tracker
      createAnAnimal("Tiger");            // cats tracker
      createAnAnimal("Panther");          // cats tracker
         svlDataTracker   tracker_flowers("Flowers");
         createAFlower("Daffodil");       // flowers tracker
         createAFlower("Rose");           // flowers tracker
            svlDataTracker   tracker_trees("Trees");
            createATree("Oak");           // trees tracker
            createATree("Sycamore");      // trees tracker
            createATree("Ash");           // trees tracker
            createATree("Horse Chestnut");// trees tracker
         createAFlower("Lily");           // flowers tracker
      createAnAnimal("Leopard");          // cats tracker
      createAnAnimal("Cheetah");          // cats tracker
      createAnAnimal("Cougar");           // cats tracker
   createAFish("Salmon");                 // no tracker



svlDataTracker class usage


The svlDataTracker class used in the examples above is defined in svlDataTracker.h and svlDataTracker.cpp which should be in the API folder of the Memory Validator installation directory.


The class is written so as not to include any dependencies on Memory Validator into your application.


The class will only activate the Memory Validator functionality if using Memory Validator with your application, and otherwise does nothing.


To use svlDataTracker in your application:


#include svlDataTracker.h into each file you will be using svlDataTracker

use the svlDataTracker class as shown above


note Do not dynamically create svlDataTracker objects as this will break the tag scoping rules and make them behave unpredictably.



Not using C++?


If you're not using C++, here's a couple of options:


An object oriented solution


If you're using an object oriented language such as Delphi you can create a Delphi equivalent to svlDataTracker.


You'll find the source code for svlDataTracker in svlDataTracker.cpp and this should be easy enough to understand for you to be able to create a suitable implementation for your object orientated language.


An API solution


The C++ and object orientated solutions both use the Memory Validator API.


You can also link your own program with the Memory Validator stub, and use the API directly.


The API provides two functions (among others) exported from svlMemoryValidatorStub.dll:


mvPushTracker(char *trackerName) instructionStep pushes a tag tracker on to the tag stack, making it the 'current' tag

mvPopTracker() instructionStep pops the current tag tracker from the top of the tag stack, making the next one (if any) current



You can find out more about the API solution for tag tracking as well as other API functions in these topics:


The Native API


Calling the API functions using GetProcAddress

Calling the tag tracker functions above