列出 C 程序中的全局变量
有没有一个工具可以列出 C 程序中的所有全局变量?更具体地说,是否有一个简单的命令行工具可以执行此操作,即不是重量级 IDE、CASE、图形工具包系统等,而只是可以像 foo *.c 一样运行的东西?
Is there a tool around that will list all the global variables in a C program? More specifically, is there a simple commandline tool that will do this, i.e. not a heavyweight IDE, CASE, graphical toolkit system etc., but just something that can be run like foo *.c
?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
如果您碰巧在大多数 UNIX 上编译该文件,您将拥有
nm
,它仅列出所有链接器符号。这些符号被分为不同的组(有点依赖于平台),因此您应该很容易找到哪些变量。If you happen to compile the file on most unixes you have
nm
that just lists you all linker symbols. These symbols are classified in different groups (a bit platform dependent) so you should easily find out which the variables are.尝试ctags。或者,带有
-aux-info
的 gcc。还有 gccxml 和 libclang 但这两个并不是很简单。Try ctags. Or, gcc with
-aux-info
. There is also gccxml and libclang but those two aren't very simple.列出程序“foo”的所有全局变量(linux/gnu):
如果程序是使用 -g 编译的(gcc -g -o foo main.c)
纳米富| grep “B”| sed -e "s/^[^B]*B//g"
将列出所有全局变量, nm 列出对象, grep 分离出全局变量, sed 清理表示。
实际上,我编译的大多数内容都是使用 Makefile 进行的,因此 Makefile 中的 CFLAGS=-g -pg -Wextra ,因此可以扫描可执行文件,直到
stackechange 上的“make dist”user1717828 提供 grep 模板
to list all globals (linux/gnu) for program 'foo':
if the program is compiled with -g (gcc -g -o foo main.c)
nm foo | grep " B " | sed -e "s/^[^B]*B//g"
will list all globals, nm lists the objects, grep seperates out the global variables, and sed cleans up the presentation.
Actually most stuff I compile is with Makefiles so it is CFLAGS=-g -pg -Wextra in the Makefile, so the executable can be scanned until a 'make dist'
user1717828 on stackechange provided the grep template