本文提到的Valgrind工具只支持Linux。内存泄漏是个大话题,工具也非常多,大家如果关注到了这方面可以百度一下内存常用的调试工具,但是由于OSG使用了大量的全局静态变量等,使得使用内存调试工具调试难度很大,因为无用信息太多,根据代码逻辑调试还是主要的手段---FreeSouth注。
Valgrind 是一个非常好的内存检查调试工具,它会根踪你在CPU上执行的所有指令,并且它自身开源,而且不需要你的应用程序做什么特殊配置,只需要在DEBUG模式下运行就可以了。当然在DEBUG模式下运行时,会非常慢。
Valgrind 3.0.1及其以后版本可以用来调试OSG程序,作者仅仅在GNU/Linux X86平台Nvidia下使用过valgrind。Valgrind可以成功的在GCC 3.4.2/Fedora和GCC 4.0.1/Fedora 下运行,其它新版本的Linux也工作的很好。
Valgrind在调试OSG程序时会暴露一些英传达显卡驱动所没有解决的问题,它会把这些问题出在一个单独的报表文件中,名为opengl.supp。下面是使用的调试命令行和一个opengl.supp示例文件(将progname替换为程序名,将progrargs替换为程序参数)。
valgrind --gen-suppressions=all --leak-check=full --num-callers=40 --log-file=out --suppressions=opengl.supp --error-limit=no -v <progname> <progargs>
opengl.supp示例:
{
opengl addr4 (1)
Memcheck:Addr4
obj:/usr/lib/libGL*
}
{
opengl param (2)
Memcheck:Param
ioctl(generic)
fun:ioctl
fun:_nv*gl
obj:/usr/lib/libGL*
}
{
opengl cond (3)
Memcheck:Cond
obj:/usr/lib/libGL*
}
{
opengl param (4)
Memcheck:Param
ioctl(generic)
fun:ioctl
obj:/usr/lib/libGL*
}
{
opengl cond (5)
Memcheck:Cond
fun:_nv*gl
obj:/usr/lib/libGL*
}
{
opengl cond (6)
Memcheck:Cond
fun:strcat
obj:/usr/lib/libGL*
}
{
opengl value4 (7)
Memcheck:Value4
obj:/usr/lib/libGL*
}
{
opengl memleak (8)
Memcheck:Leak
fun:calloc
obj:/usr/lib/libGL*
}
{
opengl memleak (9)
Memcheck:Leak
fun:malloc
obj:/usr/lib/libGL*
}
浏览次数:55433 次