Sun Studio 12 Update 1:使用 dbx 调试程序

检查泄漏

如果启用了内存泄漏检查,则会在所测试的程序即将退出之前,自动执行内存泄漏扫描。检测到的所有泄漏都会报告出来。不应使用 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 中的局部变量的堆块,因为程序即将终止并从 main 返回,而不必调用 exit()。要防止运行时检查将这种块按内存泄漏来报告,请在 main 中最后一个可执行源代码行设置一个断点,以在 main 返回前停止程序。当程序在该处停止时,使用 showleaks 命令报告所有真正的泄漏,而忽略仅由 main 中的变量超出作用域导致的泄漏。

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