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

asc*_*99c 3 c gdb

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

08838000 107576K rw---    [ anon ]
Run Code Online (Sandbox Code Playgroud)

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

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

for*_*rk0 5

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

nm --size-sort <object-file.o>
Run Code Online (Sandbox Code Playgroud)

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

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