这是我最近遇到的一个问题,这个问题只是对其他人的共同痛苦。
我正在使用其他人的遗留C代码,需要找到定义函数或宏的位置。除了特定项目的代码之外,代码#include
是一堆不同的标准系统库。
是否有工具或技术可以快速找到特定功能,宏(或其他全局)的定义?
我试过了:
grep -R 'function' /usr/lib
和其他类似的* nix / bash-fu只取得了有限的成功和许多烦人的糠to剔除。你们其中一位圣人的编码员必须对这种看似常见的情况有一个很好的解决方案。
我很惊讶在这里或在搜索互联网时没有找到关于这种特殊疼痛的另一个问题。 (如果我错过了一个......我肯定会有愤怒的评论......; - ))
提前感谢任何提示!
答案 0 :(得分:4)
使用exuberant ctags project中的etags
/ ctags
以及了解它们的编辑器(emacs,vim)或GNU GLOBAL。
哦,如果您碰巧使用automake,它会生成目标TAGS
。因此,无需对{c,e}tags
进行复杂的手动调用。
答案 1 :(得分:1)
使用ctags / cscope + vim / emacs
你可以谷歌搜索他们的详细信息。
如果你使用ctags + vim,你可以:
1.转到/usr/include
目录,执行ctags -f tags1 -R .
生成代码
2.在代码目录ctags -f tags2 -R
中为代码生成代码。
3.在你的vim中运行:set path+=tags1,tags2
4.在函数或marco下尝试CTRL+]
答案 2 :(得分:1)
这是你可以做的,假设你使用gcc,如果不是只是相应地修改它。
gcc -E myfile.c | grep '^#' | cut -f 3 -d ' ' | sort |uniq | xargs -n 1 grep -l "MYMACROORFUNCTIONNAME"
答案 3 :(得分:0)
您可以使用Eclipse CDT。例如,这里描述了如何设置CDT项目来导航Linux内核源代码 - HowTo use the CDT to navigate Linux kernel source。
答案 4 :(得分:0)
vim + ctags 是要走的路。您可以跳转到函数,全局变量,宏等等的定义。
仅供参考,browsing programs with tags
此外,如果您想在.c和.h文件之间快速切换,请参阅this blog
答案 5 :(得分:0)
您可以使用cscope或emacs/vim + xcscope.el
轻松完成此操作。 我认为比ctage和etage更重要。
答案 6 :(得分:0)
如果包含直接或间接定义您所查找内容的正确标头,则大多数IDE都具有可用的跳转定义功能。
标签方法当然很好,因为它们不依赖于正确包含的标题。