'list function' перечисляет другую функцию? - PullRequest
0 голосов
/ 04 мая 2018

Итак, я выполняю лабораторное задание, и мы в основном отлаживаем старую версию 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.

...