: myArray(NULL),
   myTotalLeftSize(0),
   myTotalPeakSize(0),
-  myBreakSize(0)
+  myBreakSize(0),
+  myBreakPeak(0)
 {
   Reset();
 }
     myTotalLeftSize += theSize;
     int nbLeft = myArray[ind].nbAlloc - myArray[ind].nbFree;
     if (nbLeft > myArray[ind].nbLeftPeak)
+    {
       myArray[ind].nbLeftPeak = nbLeft;
+      if (myBreakPeak != 0
+       && (myBreakSize == theSize || myBreakSize == 0))
+      {
+        const Standard_Size aSizePeak = myArray[ind].nbLeftPeak * theSize;
+        if (aSizePeak > myBreakPeak)
+        {
+          place_for_breakpoint();
+        }
+      }
+    }
     if (myTotalLeftSize > (ptrdiff_t)myTotalPeakSize)
       myTotalPeakSize = myTotalLeftSize;
     myMutex.Unlock();
 
     Numbers*       myArray;             //!< indexed from 0 to myMaxAllocSize-1
     ptrdiff_t      myTotalLeftSize;     //!< currently remained allocated size
     size_t         myTotalPeakSize;     //!< maxium cumulative allocated size
-    size_t         myBreakSize;
+    size_t         myBreakSize;         //!< user defined allocation size to debug (see place_for_breakpoint())
+    size_t         myBreakPeak;         //!< user defined peak size limit to debug
   };
 
   //! Set handler of allocation/deallocation events