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

标签 c gdb

我有一个程序,其中包含大量静态定义的变量。如果我在 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/

相关文章:

linux - 在 Linux 下,是否可以 gcore 一个可执行文件已被删除的进程?

c - Arduino uno freertos 任务停止运行

c++ - Linux,共享库使用主程序中的函数而不是其他共享库

c - 接受字段中的有效输入

gdb - 应用程序中所有函数调用的列表

assembly - GDB ret "cannot access memory at address"

multithreading - 逆向多线程错误

c - 如何从 C 语言的控制台输出中删除字符

c - 函数内部使用malloc形成字符串时的段错误(11)

c - Gdb 条件正则表达式中断