我有一个程序,其中包含大量静态定义的变量。如果我在 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
).
关于c - GDB - 我可以在内存中找到大数据元素吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11613713/