GDB – 我可以在内存中找到大数据元素

我有一个程序,它有大量静态定义的变量。 如果我在GDB中启动它,在main中有一个断点,然后运行pmap,我看到已经分配了大约100MB的数据:

08838000 107576K rw--- [ anon ] 

我已经找到了一堆具有巨大静态定义数组(例如200,000英寸)的函数,并在我找到它们时将它们除掉。

有没有办法找出堆/数据段上最大的项目是什么? 在GDB中还是通过任何其他方式?

可以使用目标代码检​​查实用程序(如nm(1))找到该信息:

 nm --size-sort  

此外,给定足够的调试信息,objdump可以为完全链接的程序提供额外的见解。

实用程序通常是特定于目标平台的,因此在进行交叉编译时必须注意使用正确的程序(例如x86_64-linux-gnu-gcc-nm而不仅仅是nm )。