Все тупо, но придется много писать.

Заводите две глобальные переменные, пусть будет trace_fn и trace_cp.
На входе в функцию:
unsigned int old_tfn = trace_fn;
unsigned int old_tcp = trace_cp;
trace_fn = <номер_функции>;
Внутри функции:
trace_cp = 1;
trace_cp = 2;
и так далее.
На выходе из функции восстанавливаете значения из переменных old.
Внутри функции watchdog отправляете на отладку обе глобальные переменные и видите, какой checkpoint в какой функции был последним.
Там поблизости и ищите...