What kind of problems are you having? Is the heap getting corrupted and you are getting errors about that? Or are you getting errors due to the heap getting full and you cannot allocate more space?
If your problem is heap corruption, the library function heap_check_always() can be used to make the heap routines check the consistency of the heap on every call that allocates or deallocates memory from the heap. It won't tell you exactly where in your program that heap corruption is happening, since that generally happens between calls to heap management routines by storing using an out-of-date pointer or a pointer whose value has been calculated incorrectly, but it probably will help you identify more closely the part of your program in which the bad pointer is being used. I believe some of the heap management capabilities documented in the CRE Programmer's Guide could also be of help. There is a way to get the heap manager to rewrite space that has been freed with 0xFFFC3C3C, which might make it more obvious if your program is using data from memory that has been freed.
If your problem is using too much heap space, it probably is forgetting to release memory when that memory no longer is needed -- what's commonly called a memory leak. What you'd really like to have to debug such a problem is an option to make the runtime library allocate a little extra memory in each block it allocates and record in that extra memory something about where in the program the memory was requested, then on request or on terminating the program, the library should write a report saying how many blocks were still allocated from each point in the program. I don't know of an option to do that. I have a vague memory of being told about a way to get such reports, but that might have been for another computer system -- the memory is very vague. Such a debugging feature would seem to be so useful that I wouldn't be surprised to learn that it exists, but I do not know that it does.
There is a function in the CRE that can retrieve a number of statistics about the current size of the heap, number of blocks allocated, and total amount of space allocated. You could call that function at various points in your program and report the results so you could see how heap use is changing. I think that would not be nearly as useful as knowing the number of blocks allocated from each point in the program, but at least it can tell you a little about the program's heap usage.
All these CRE functions I mentioned are described in the CRE Programmer's Guide, in section 2, under the heading "Using the Native Heap Managers".
If I remember correctly, the PSTATE program includes some information about heap usage among the many things it reports about a process. If your program is running out of heap space, and takes a while to get to the point where that happens, you might be able to use PSTATE to get a rough idea of its heap usage and how that changes, but I kind of doubt what PSTATE can show would be very helpful for this problem.
I see that Robert suggested looking at the Guardian procedures HEADROOM_ENSURE_. That procedure is concerned with stack space, not heap space, and so it probably will not help you with your problem.