Во многих средах, работающих через отладчик, просто недоступно.В частности, встроенные системы или задания, которые выполняются в течение N дней на производстве до возникновения ошибки.
В этих сценариях ведение журнала потока программы с помощью простого printf()
илиболее сложная функция ведения журнала может быть одним из единственных способов выяснить, что произошло.
Аналогично отслеживанию рекурсивного потока выполнения, просто добавьте печать в свою функцию:
void tower(int n, char start, char end, char help)
{
printf("tower(n=%d, start=%c, end=%c, help=%c)\n", n, start, end, help);
...
Предоставление:
tower(n=3, start=A, end=C, help=B)
tower(n=2, start=A, end=B, help=C)
tower(n=1, start=A, end=C, help=B)
tower(n=0, start=A, end=B, help=C)
Disk 1 has been moved from tower A to tower C
tower(n=0, start=B, end=C, help=A)
Disk 2 has been moved from tower A to tower B
tower(n=1, start=C, end=B, help=A)
tower(n=0, start=C, end=A, help=B)
Disk 1 has been moved from tower C to tower B
tower(n=0, start=A, end=B, help=C)
Disk 3 has been moved from tower A to tower C
tower(n=2, start=B, end=C, help=A)
tower(n=1, start=B, end=A, help=C)
tower(n=0, start=B, end=C, help=A)
Disk 1 has been moved from tower B to tower A
tower(n=0, start=C, end=A, help=B)
Disk 2 has been moved from tower B to tower C
tower(n=1, start=A, end=C, help=B)
tower(n=0, start=A, end=B, help=C)
Disk 1 has been moved from tower A to tower C
tower(n=0, start=B, end=C, help=A)
Есть также удобные макросы компилятора __FILE__
, __FUNCTION__
и __LINE__
(и еще пара, зависит от вашего компилятора).Которые могут быть встроены в операторы log / print:
printf( "Something eldritch happened in %s at %s:%d\n", __FUNCTION__, __FILE__, __LINE__ );