使用 C++ 中的调用查找函数定义
我正在尝试理解一个相当大的 C++ 项目的源代码。源代码不是用 IDE 编写的,因此我没有“转到”按钮来直接转到函数定义。
例如:
srand();
我想找出函数 srand() 的确切定义位置。
我能想到的唯一方法是手动检查所有标头包含以递归地查找声明和定义的相应文件。
这是一个linux环境,源代码是用g++编译的(使用cmake)。
I'm trying to understand the source code of a fairly large C++ project. The source wasn't written with an IDE, so I don't have a "goto" button to go straight to the function definition.
For example:
srand();
I want to find out exactly where the function srand() is defined.
The only method I can come up with is manually checking all the header includes to recursively find the declaration and the corresponding file for the definition.
This is a linux environment and the source is compiled with g++ (using cmake).
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
查看
ctags
程序。ctags
生成一个文件,其中包含有关代码中使用每个标识符的位置的信息。然后可以使用您选择的编辑器的插件,该插件将允许您跳转到任何标识符的定义。 (Vim 和 Emacs 都有非常成熟的ctags
插件,可能也适用于大多数其他流行的编辑器。)Look into the
ctags
program.ctags
generates a file with information on the locations in the code where each identifier is used. It is then possible to use a plugin for your editor of choice that will allow you to jump to the definition of any identifier. (very maturectags
plugins exist for Vim and Emacs, and probably for most other popular editors as well.)如果您使用的是 VI,则可以
shift+k
在手册页中打开它(如果有该单词的手册页)。我相信它会自动设置为在 man(3) 中搜索,但我不是 100% 确定。至少这样你可以知道它是否是一个系统函数。另一种选择是使用 Doxygen 设置调用图并让它生成源代码(即使没有注释)。通过调用图,您可以轻松找出每个函数的来源。
If you are using VI you can
shift+k
that will open it in a man page, if there is one for this word. I believe it automatically is set to search in man(3) but i'm not 100% sure. At least this way you can know wether it's a system function or not.Another option is to use Doxygen to setup the call graphs and let it generate the source (even if there are no comments). With the call graph you can easily spot from where each function is coming from.