这可能看起来不像是编程问题,但本质上是与代码相关的。
我有以下一段测试代码,它有明显的错误,如数组索引越界,内存泄漏:
#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 Studio2008构建的。
我正在尝试使用Rational Purify (7.0版)来识别运行时错误,我的代码中的内存泄漏。在阅读了一些关于如何构建代码以便在Purify中使用的指针之后,我在MSVS-2008项目设置中做了以下事情:
1.)禁用增量链路2。)调试信息编译器标志为/Zi
3.)设置链接器选项- "Basic run-time checking to value Default。
4.)添加了额外的链接器选项/fixed:no。
5.)生成配置已调试,未启用优化。
然后我构建并获取exe。我使用这个exe在Purify中运行,这样它就可以使用相同的仪器。但是在运行/检测这个exe之后,purify中的output窗口并没有显示关于内存泄漏的错误,..etc出现在上面的代码中。
purify output窗口显示了不同的二进制文件(我的exe文件和一些其他的系统dll)的输出,它们被加载、执行。但在显示有关我的exe的数据的输出中,没有错误消息。
我的感觉是,在MS-VS2008中构建exe时,我给出了编译/链接器选项,这是一个错误,或者生成的可执行文件格式不兼容/不能被Purify理解?
1.)这里可能出了什么问题?在构建exe时,我还需要哪些其他选项?
2.)我使用Purify的过程是否正确,或者我是否遗漏了什么?在运行时分析之后,我如何让Purify显示我程序中的所有错误?
3.)是否有其他工具(免费/商业许可)可以检测内存泄漏、数组越界错误、未初始化指针的使用、变量、内存损坏等。通过对C代码进行运行时分析。
很抱歉我的邮件太长了,但我必须说清楚。
谢谢。
-AD
发布于 2010-02-24 01:49:16
在疯狂地尝试了很多东西之后,在网上看了看,我找到了解决方案。为此
1)添加一个新的环境变量如下:
名称= IBM_RATIONAL_PURIFY_ENABLE_SELECTIVE
Vale =1
2)除了我在操作中提到的MS Visual Studio项目设置外,还需要以下设置-
C/C++ -->代码生成=运行时库-->多线程调试/MTd
当您在purify中运行可执行文件时,您必须点击Configure Selective,选择您的exe。
然后,当你运行时,它应该收集所需的错误相关信息。
-AD
https://stackoverflow.com/questions/2298924
复制相似问题