我有一个程序,其中有大量静态定义的变量。如果我在 GDB 中启动它,在 main 中设置一个断点,然后运行 pmap,我会看到已经分配了大约 100MB 的数据:
08838000 107576K rw--- [ anon ]
我已经找到了一堆具有巨大静态定义数组(例如 200,000 个整数)的函数,并在找到它们时将其删除。
有什么方法可以找出堆/数据段上最大的项目是什么?是通过 GDB 还是通过其他方式?
可以使用目标代码检查实用程序(例如 nm(1))找到该信息:
nm --size-sort <object-file.o>
此外,如果有足够的调试信息,objdump 还可以为完全链接的程序提供更多见解。
这些实用程序通常是特定于目标平台的,因此在交叉编译时必须注意使用正确的程序(即类似x86_64-linux-gnu-gcc-nm
而不仅仅是nm
).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)