Итак, я выполняю лабораторное задание, и мы в основном отлаживаем старую версию coreutils ls. Я побежал info functions
. Среди выходных строк было static int compare_mtime(V, V);
. Поэтому я запустил list compare_mtime
, чтобы увидеть исходный код, и он выдает следующее:
(gdb) list compare_mtime
43 /* Return negative, zero, positive if A < B, A == B, A > B, respectively.
44 Assume the nanosecond components are in range, or close to it. */
45 static inline int
46 timespec_cmp (struct timespec a, struct timespec b)
47 {
48 int diff = a.tv_sec - b.tv_sec;
49 return diff ? diff : a.tv_nsec - b.tv_nsec;
50 }
51
52 # if ! HAVE_DECL_NANOSLEEP
Ясно, что timespec_cmp
не compare_mtime
. Почему он печатает timespec_cmp
вместо compare_mtime
?
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ
Я провел дальнейшие исследования, установив точку останова в compare_mtime и запустив программу:
Breakpoint 1, compare_mtime (a=0x617160, b=0x617210) at ls.c:2884
2884 static int compare_mtime (V a, V b) { return cmp_mtime (a, b, xstrcoll); }
Так что, по-видимому, compare_mtime просто вызывает cmp_mtime. Продолжая, я установил другую точку останова в cmp_mtime:
(gdb) break cmp_mtime
Note: breakpoint 1 also set at pc 0x4070d3.
Note: breakpoint 1 also set at pc 0x4070a0.
Breakpoint 2 at 0x405223: cmp_mtime. (4 locations)
Повторный запуск программы никогда не останавливается на точке останова 2. list cmp_mtime
выводит то же самое, что и list compare_mtime
.