这可能看起来不像编程问题,但本质上是处理代码。
我有一段测试代码,它有明显的错误,比如数组索引越界,内存泄漏: -
#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
答案 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