1. a) At design time increase stack size as much as possible. Prior to running your code fill stack space with some pattern like all 0xFF, 0x55 or smth. Run your code for a while and then check how many contiguous bytes at bottom of stack are still like you initialized them. Stack top minus the most bottom modified stack byte address gives you required stack space. During test time all your stack hungry routines and ISRs should execute at least once, else your measurement may be inaccurate.
b) inside of some periodic interrupt you can TSX (transfer stack pointer to H:X), CPHX against previous value and STHX if lower. Running code for a while should give you value close to the deepest SP. Close and not exact because you may have other ISR's with worse stack usage.
2. Not necessarily. Bad things may happen like sudden unrelated variable change or something. It is always the best to determine the worst stack usage and set stack size accordingly.
Regards,
Edward