如何导航glibc并找到lib函数的实际实现?
在搜索栏中键入函数
https://code.woboq.org/userspace/glibc
或在
https://github.com/bminor/glibc
。手动导航结果,直到找到定义为止。
如果要对项目进行本地索引,请使用cscope、ctags、GLOBAL标记或clangd对项目进行索引,然后使用特定于工具的界面搜索定义。
例如,尝试在glibc中查找hidden_def的定义
类型
hidden_def glibc
进入谷歌。我的第一个热门是woboq.org
https://code.woboq.org/userspace/glibc/include/libc-symbols.h.html#550
.
我用萤火虫。I类型
ctrl+f
和类型
hidden_def
。键入Enter,直到找到为止
# define hidden_def
在
https://code.woboq.org/userspace/glibc/include/libc-symbols.h.html#550
.
然后选择
__hidden_ver1
和类型
ctrl+c
ctrl+f
和
ctrl+v
并在web浏览器中搜索。我键入enter,直到找到为止
https://code.woboq.org/userspace/glibc/include/libc-symbols.h.html#540
.
__hidden_ver2
就在542线上的下方。
在大多数情况下,你只需要一个浏览器、谷歌、coboq.org和github.org。
这是一个宏,将带您进入hidden_def1
没有像你提到的那样的宏,至少在woboq.org上托管的版本是这样。
有人是怎么理解的?
虽然
IDE
是一个强大的帮助,每个项目都是独特的,需要不同的设置,这需要时间来解决。大多数浏览源代码是
grep
(或更快的替代方案,如
ag
,对于像glibc这样的大型项目非常有用)和查看结果列表。
不仅仅是依赖于系统的东西,比如setjmp
开发人员是(应该是:)理智的人——在大多数情况下,一个名为
setjmp
将在名为的文件中
setjmp.c
或
setjmp.S
。或在与相同的目录中
setjmp.h
。或在名为的目录内
stdlib
或
setjmp
.
类型
setjmp
在github搜索栏中。
https://github.com/bminor/glibc/search?q=setjmp
您可以看到,每个体系结构都有多个定义
powerpc
s390
等等。但是文件都是命名的
setjmp
回去在上键入“转到文件”
https://github.com/bminor/glibc
。搜索名为的文件
x86/setjmp
。有3种实现方式,最标准的似乎是
https://github.com/bminor/glibc/blob/master/sysdeps/x86_64/setjmp.S
.
甚至像fprintf这样的可移植功能
如上所述,saerch用于名为fprintf的文件。你很快就会发现
https://github.com/bminor/glibc/blob/master/stdio-common/fprintf.c
.