With most ARM processors you can also use the DWT to set hardware watchpoints on data accesses. The advantage of that approach is that it runs at full speed and you don't have to instrument your code so you can set guards around your stack and the debugger/trace unit catches bad accesses.