How can we determine memory usage of a microcontroller
Yes, a debugger can tell you at any point in time how much memory is being used by the stack. Just check the current value of the stack pointer.

Another thing you can try is to fill up all of the unused RAM area with some obvious bogus value, like 0xAAAA. Run your code for a while and then check the RAM to see how many of the bogus values were overwritten...that's your maximum stack size.

The amount of memory used by static variables should be shown in some kind of log or report from the linker, as this is determined at compile time.