Rational Purify没有显示内存泄漏,运行时错误?

时间:2010-02-19 19:16:19

标签: memory memory-leaks rational-purify

这可能看起来不像编程问题,但本质上是处理代码。

我有一段测试代码,它有明显的错误,比如数组索引越界,内存泄漏: -

#include "stdio.h"
#include "stdlib.h"
main()
{
   int i;
   char *ptr;
   ptr = (char*)malloc(5);
   for(i=0;i<10;i++)
   {
      ptr[i]=(char)i;
   }

}

此代码基于MS-Visual Studio 2008构建。

我正在尝试使用Rational Purify(版本7.0)来识别代码中的运行时错误,内存泄漏。在阅读了一些有关如何在Purify中构建代码的指针之后,我已经在MSVS-2008项目设置中完成了以下工作: -

1.)禁用增量链接2.)调试信息编译器标志为/ Zi

3.。)设置链接器选项 - “基本运行时检查值为默认值。

4.。)添加了额外的链接器选项/ fixed:no。

5.。)构建配置是调试,没有启用优化。

然后我构建并获得exe。我使用这个exe在Purify中运行,以便它具有相同的功能。但是在运行/检测此exe之后的净化输出窗口显示没有关于内存泄漏的错误,..etc,它们存在于上面的代码中。

purify输出窗口显示已加载,执行的不同二进制文件(我的exe文件和一些其他系统dll)的输出。但是在输出中显示有关我的exe的数据,没有错误消息。

我的感觉是我在MS-VS 2008中构建exe时给出编译/链接器选项时出错。或者Purify不兼容/理解生成的可执行格式?

1. p)这可能有什么问题?构建exe时我还需要哪些选项?

2.)我使用Purify的过程是正确的,还是我错过了什么?在进行运行时分析后,如何让Purify显示程序中的所有错误?

3.)是否有任何其他工具(免费/商业许可证)可以通过对C代码进行运行时分析来检测内存泄漏,数组出界错误,使用未初始化的指针,变量,内存损坏等。

对于长篇邮件感到抱歉,但必须要清楚。

感谢。

-AD

1 个答案:

答案 0 :(得分:1)

在疯狂地尝试了许多事情后,在互联网上阅读,我发现了解决方案。为此

1)添加一个新的环境变量:

Name = IBM_RATIONAL_PURIFY_ENABLE_SELECTIVE

Vale = 1

2)除了我在OP中提到的MS Visual Studio项目设置外,还需要以下设置 -

C / C ++ - &gt;代码生成=运行时库 - &gt;多线程调试/ MTd

当您在purify中运行可执行文件时,您必须单击Configure Selective,选择您的exe。

然后当你运行时,它应该联系所需的错误相关信息。

-AD