【问题标题】:C++ app on SunOS has a memory leak. How to find it?SunOS 上的 C++ 应用程序存在内存泄漏。如何找到它?
【发布时间】:2009-09-02 08:34:10
【问题描述】:

我刚刚登陆 SunOS:

$ uname -a
SunOS sunfi95 5.9 Generic_122300-13 sun4u sparc SUNW,Sun-Fire-880

并拥有Sun工作室:

$ CC -V
CC: Sun C++ 5.8 2005/10/13

如何在代码中找到 memleaks? (在这种情况下,dbx 不是一个选项)。 Valgrind 在 sparc 系统上不起作用,我想到的唯一一个解决方案是使用一些智能库,它会重载 new 并删除并计算它们被调用的次数。 有人知道 BSD 上的一些东西,比如许可证吗?

【问题讨论】:

  • 为什么不用 dbx?您可以使用 dbx、Sun Studio 调试器、运行时检查 (RTC) 功能。 (dbx) 检查泄漏 (dbx) 运行 args.
  • 因为我们需要在 dll 中查找泄漏,并且没有带有调试符号的框架。无论如何,我不确定即使我们拥有它,dbx 是否可以处理它?

标签: c++ solaris sunos


【解决方案1】:

在 Sun OS 上,您可以使用 Purify,或者尝试将您的程序移植(通常您也会移植泄漏)到 Unix/Linux 并使用 valgrind 来查找泄漏。

【讨论】:

  • SunOS UNIX,可能是仅次于 Mac OSX 的第二流行变体
  • 听说Purify 是个很棒的工具,可惜许可证分配给了其他部门。
【解决方案2】:

DTrace 对于了解 Solaris 应用程序中发生的情况非常有用。

Here's an example of how to use it from Sun.

【讨论】:

  • 我没有意识到可以使用 dtrace 来查找 memleaks。我认为它类似于代码覆盖工具,但有点低级,并且在运行时。顺便说一句,在 dtracing 过程中真的没有过载吗?我们正在玩协议,时间对我们很重要。
  • DTrace 在禁用时几乎没有开销,但在启用时确实会对性能产生影响。但是,由于设计目标是诊断生产系统上的问题,因此它非常小。最好的建议是尝试并查看,最好是在开发安装中。
【解决方案3】:

我认为有免费软件库,但我们在 Solaris 上使用 Purify 效果很好。

【讨论】:

    【解决方案4】:

    您还可以使用名为cppcheck 的应用程序来查找内存泄漏以及许多其他问题。这是一个免费/开源产品。

    我从未在 SunOS 或 Sparc 机器上使用过它,但源代码可用,您可以尝试构建它。我不确定幕后发生了什么,但我不明白为什么你不能在 SunOS Sparc 机器上构建它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-17
      • 2012-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-20
      相关资源
      最近更新 更多