2009-09-02 60 views
0

我刚刚降落在SunOS:SunOS上的C++应用程序存在内存泄漏。如何找到它?

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

,并有阳光工作室:

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

我怎样才能找到代码memleaks? (在这种情况下dbx不是一个选项)。 Valgrind不能在sparc系统上工作,只有一个解决方案在我脑海中是使用一些智能库,它会重载新的和删除并计算它们被调用的次数。 任何人都知道什么是像BSD许可证吗?

+1

为什么不用dbx?您可以使用dbx(Sun Studio调试器)和运行时检查(RTC)功能。 (dbx)check-leaks(dbx)运行 args。 – Abhay 2009-09-02 08:44:09

+0

因为我们需要在dll中查找泄漏,并且没有调试符号的框架。无论如何,我不确定即使我们拥有它,dbx也可以处理它? – teZeriusz 2009-10-13 20:12:02

回答

4

在Sun OS,您可以使用Purify,或尝试端口(通常你会口泄漏,太)你的程序Unix/Linux和使用valgrind找到泄漏。

+5

SunOS _is_ UNIX,可能是Mac OSX之后的第二大热门版本 – MSalters 2009-09-02 09:15:22

+0

我听说Purify是一款出色的工具,不幸的是,许可证分配给了其他部门。 – teZeriusz 2009-10-13 20:16:13

1

我认为有免费的库,但我们使用Purify在Solaris上运行良好。

2

DTrace对于计算Solaris应用程序中正在发生的事情非常有用。

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

+0

我没有意识到dtrace可以用来寻找memleaks。我认为它与codecoverage工具类似,但有点低级,并且在运行时。顺便说一句,在追踪过程中真的没有超载?我们在玩协议,时间对我们很重要。 – teZeriusz 2009-10-13 20:25:16

+0

DTrace在禁用时几乎没有开销,但启用时会对性能产生影响。但是,由于设计目标是诊断生产系统上的问题,因此它很小。最好的建议是尝试一下,看看,最好在dev安装。 – 2009-10-16 07:48:20

1

您也可以使用名为cppcheck查找内存泄漏的应用程序,以及其他一些问题。这是一款免费/开源产品。

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