Oracle® Solaris Studio 12.4:使用 dbx 调试程序

退出打印视图

更新时间: 2015 年 1 月
 
 

检查泄漏

如果启用了内存泄漏检查,则会在所测试的程序即将退出之前,自动执行内存泄漏扫描。 检测到的所有泄漏都会报告出来。不应使用 kill 命令中止程序。 以下示例是一条典型的内存泄漏错误消息:

Memory leak (mel):
Found leaked block of size 6 at address 0x21718
At time of allocation, the call stack was:
    [1] foo() at line 63 in test.c
    [2] main() at line 47 in test.c

UNIX 程序具有 main 过程(在 f77 中称为 MAIN),该过程是程序的顶级用户函数。程序通常以两种方式终止:一种是调用 exit(3),另一种是从 main 返回。在后一种情况下,main 的所有局部变量都会在返回后超出作用域,而它们指向的所有堆块都会按泄漏来报告(除非有全局变量也指向这些块)。

常见的编程惯例是不释放已分配给 main 中局部变量的堆块,这是因为程序即将终止,并在不调用 exit() 的情况下从 main 中返回。要防止运行时检查将这种块按内存泄漏来报告,请在 main 中最后一个可执行源代码行设置一个断点,以在 main 返回前停止程序。当程序在该处停止时,使用 showleaks 命令报告所有真正的泄漏,而忽略仅由 main 中的变量超出作用域导致的泄漏。

有关更多信息,请参见showleaks 命令