Код трассировки printf () в glibc - PullRequest
2 голосов
/ 26 января 2012

Я скачал исходный код glibc (библиотека GNU c), версия - 2.15.90.Я отслеживал код функции printf().Я использую инструменты cscope и ctags для просмотра кода.Вот путь, по которому я иду, чтобы понять функцию printf().(Здесь я просто упоминаю вызовы функций): -

1. Opening file "glibc/stdio-common/printf.c"
2. int __printf (const char *format, ...)
3. __extern_always_inline int vfprintf (FILE *__restrict __stream, const char *__restrict __fmt, _G_va_list __ap)
4. int attribute_hidden __vfprintf_chk (FILE *s, int flag, const char *fmt, va_list ap)
5. int attribute_compat_text_section __nldbl___vfprintf_chk (FILE *s, int flag, const char *fmt, va_list ap)

Как только я достиг функции \__nldbl___vfprintf_chk(), происходит вызов __vfprintf_chk() и, следовательно, последних 2 функций (упомянутых в пунктах 4 и 5)звонит друг другу.Где я ошибся?

1 Ответ

3 голосов
/ 26 января 2012

Я не вижу таких при вызовах, printf быстро переходит в vfprintf, что делает реальную работу, я бы сказал, ваш браузер с исходным кодом работает, glibc довольно интенсивно использует макросы.

...