使用 C++ 中的调用查找函数定义

发布于 2024-10-12 21:13:30 字数 235 浏览 3 评论 0原文

我正在尝试理解一个相当大的 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

南…巷孤猫 2024-10-19 21:13:30

查看 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 mature ctags plugins exist for Vim and Emacs, and probably for most other popular editors as well.)

佞臣 2024-10-19 21:13:30

如果您使用的是 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文