【问题标题】:Enable memleak option in gdb for linux在 gdb for linux 中启用 memleak 选项
【发布时间】:2013-01-24 09:08:19
【问题描述】:

我正在尝试查看导致内存泄漏的进程,并转储导致它的堆以查看问题所在。

我在 gdb 中使用哪个命令来设置内存泄漏并检查堆?

我试过了:

(gdb) check -leaks

checkpoint: can't find fork function in inferior.

(gdb) help info heap

Undefined info command: "heap".  Try "help info".

(gdb) help info leaks 

Undefined info command: "leaks".  Try "help info".

【问题讨论】:

  • 使用类似 valgrind 的东西?
  • 所以 gdb 没有任何内置命令可以做到这一点?基本上在我的组织中,我没有 root 权限并且不确定他们是否会安装 valgrind
  • @user862833:将其安装在您的主目录中
  • 我也有同样的问题。我不能使用 valgrind,因为我只有一个核心。它是不可重现的。请不要尝试将问题更改为您可以回答的问题。谢谢。
  • 我无法在基于 DPDK 的程序中使用 Valgrind。我只能使用 GDB。

标签: c++ linux memory-leaks gdb


【解决方案1】:

正如人们所指出的那样,Valgrind 是您的答案。通常,Valgrind 只会在程序执行结束时报告错误。您可以将 Valgrind 与 GDB (vgdb) 链接,以便在程序在 GDB 下运行时转储 Valgrind 统计信息。

参考一个类似的问题:

Dumping contents of lost memory reported by Valgrind

【讨论】:

  • 虽然我喜欢 valgrind,但遗憾的是它并非在所有平台上都可用。 OP 询问了 gdb,它在比 valgrind 更多的平台上可用(例如 sparc solaris)。
【解决方案2】:

info leaksinfo heap 是仅在 HP-UX 上的 gdb 中可用的命令(HP-UX gdb 是开源 GNU 调试器 gdb 的定制版本,在 The HP Wildebeest Debugger (WDB) - http://www.hp.com/go/wdb 上调用)。在 Linux 上,您需要使用 valgrind

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-14
    • 1970-01-01
    • 1970-01-01
    • 2014-09-28
    • 1970-01-01
    相关资源
    最近更新 更多