C/C++内存问题检查利器——Purify(2)

 

五、             文件描述符问题

在上面的内存问题表中,对于大多数的内存问题来说,相信对于熟悉C/C++的程序员,并不陌生。有一些关于Watchpoint和文件描述符的内容,可能会让你看得比较模糊,对于Watchpoint,我会在后面讲述。这一节,我就一个示例说一说文件描述述问题是如何产生的,并由此介绍一下Purify的一些特性。

数据挖掘研究院

  数据挖掘论坛

先查看下面这段程序: 数据挖掘论坛

  数据挖掘工具

#include <stdio.h> 数据挖掘实验室

  数据挖掘论坛

main()

数据挖掘实验室

{

数据挖掘论坛

    FILE* fp; 数据挖掘交友

    int num;

数据挖掘研究院

 

    fp = fopen("./test.txt", "r");

    if ( fp == NULL){ 数据挖掘交友

        perror("Error:"); 数据挖掘实验室

        exit(-1);

    } 数据挖掘实验室

  数据挖掘实验室

    fscanf(fp, "%d", &num); 数据挖掘交友

    if ( num < 0 ){

数据挖掘研究院

       printf("Error: the num should be greater than 0! "); 数据挖掘论坛

       exit(-1); 数据挖掘研究院

    } 数据挖掘实验室

  数据挖掘研究院

    fclose(fp);

数据挖掘工具

}

数据挖掘实验室

  数据挖掘论坛

在当前目录下建一个test.txt的文件,并设置其内容为-20。使用Purify编译并运行程序:

数据挖掘交友

>  purify gcc -g -o testfd testfd.c 数据挖掘工具

Purify 2003.06.00 Solaris 2 (32-bit) Copyright (C) 1992-2002 Rational Software Corp.  All rights reserved.  数据挖掘交友

Instrumenting: ccqqF6pY.o  Linking 数据挖掘论坛

  数据挖掘实验室

>./testfd 数据挖掘研究院

 

出现以下画面: 数据挖掘工具

 

数据挖掘研究院

  数据挖掘交友

由图中,我们可以看到,Purify报告有FIU错误,意思是,我们在程序退出时,没有关闭文件描述符。还有一些算是安全的文件描述符信息,那就是关于012这三个标准文件描述符的FIU,这些信息是正常的,所以在其前面也就没有小三角符号了。 数据挖掘论坛

 

通过这个例子,我们可以看到,Purify不但可以找到内存的操作错误,还可以找到文件描述符的错误。

 

数据挖掘工具

如果你不想让Purify显示FIU信息,你可以设置Purify的 -fds-inuse-at-exit=no 选项,如: 数据挖掘交友

 

>  purify –fds-inuse-at-exit gcc -g -o testfd testfd.c 数据挖掘实验室

  数据挖掘论坛

或者使用PurifyAPI函数 purify_clear_fds_inuse 来阻止显示,你可以在你的程序中调用PurifyAPI函数。有关PurifyAPI函数的细节,我会在后面给你讲述。

数据挖掘交友

 

数据挖掘论坛

  数据挖掘论坛

六、             控制Purify的输出

1、产生ASCII文本文件 数据挖掘实验室

 

在默认情况下,Purify会显示出一个图形窗口来报告信息。当然,如果你的环境所限,你不想Purify出现图形界面,只是生成文本文件来报告,能过设置Purify的参数,你可以很容易做到这一点。 数据挖掘交友

  数据挖掘实验室

在程序编译时,你只需简单的调置Purify的编译参数 –windows=no 即可做到,如:

数据挖掘研究院

 

> purify –windows=no gcc –g –o hello hello.c

  数据挖掘研究院

Purify会把其报告信息写到标准错误设备上,在文本方式下,Purify就不报告同种错误出现在个数,而只是报告的信息了。 数据挖掘研究院

  数据挖掘论坛

我们可以使用两种方式让Purify的信息输出到文本文件中。 数据挖掘工具

  数据挖掘实验室

第一种是使用操作系统的重定向功能,如: 数据挖掘工具

csh下: % a.out.pure >& a.out.messages

shksh下: $ a.out.pure 2> a.out.messages 数据挖掘实验室

 

数据挖掘论坛

第二种是指定Purify的日志文件参数,如: 数据挖掘交友

-log-file=<filename>.plog

数据挖掘论坛

 

数据挖掘研究院

下面,是一个Purify生成的ASCII文本文件的样子:

数据挖掘交友

> ./hello 数据挖掘论坛

****  Purify instrumented hello (pid 25698 at Wed Dec 10 22:29:33 2003)

  * Purify 2003.06.00 Solaris 2 (32-bit) Copyright (C) 1992-2002 Rational Software Corp.  All rights reserved.  数据挖掘工具

  * For contact information type: "purify -help"

  * Options settings: -follow-child-processes=yes -purify -windows=no

    -purify-home=/usr/rational/releases/purify.sol.2003.06.00

    -gcc3_path=/usr/local/bin/gcc

数据挖掘工具

    -cache-dir=/usr/rational/releases/purify.sol.2003.06.00/cache

数据挖掘研究院

    -demangle_program=/usr/local/bin/c++filt 数据挖掘实验室

  * License successfully checked out.

  * Command-line: ./hello 数据挖掘研究院

 

****  Purify instrumented hello (pid 25698)  ****

数据挖掘论坛

ABR: Array bounds read: 数据挖掘工具

  * This is occurring while in:

        strlen         [rtlib.o]

        _doprnt        [libc.so.1]

        printf         [libc.so.1]

        main           [hello.c:11] 数据挖掘交友

        _start         [crt1.o]

  * Reading 13 bytes from 0x8ea08 in the heap (1 byte at 0x8ea14 illegal). 数据挖掘工具

  * Address 0x8ea08 is at the beginning of a malloc′d block of 12 bytes. 数据挖掘论坛

  * This block was allocated from: 数据挖掘工具

        malloc         [rtlib.o] 数据挖掘实验室

        main           [hello.c:8]

        _start         [crt1.o]

数据挖掘论坛

Hello, World

 

****  Purify instrumented hello (pid 25698)  **** 数据挖掘论坛

Current file descriptors in use: 5

数据挖掘实验室

FIU: file descriptor 0: <stdin> 数据挖掘交友

FIU: file descriptor 1: <stdout> 数据挖掘工具

FIU: file descriptor 2: <stderr>

数据挖掘论坛

FIU: file descriptor 26: <reserved for Purify internal use>

数据挖掘工具

FIU: file descriptor 27: <reserved for Purify internal use>

 

****  Purify instrumented hello (pid 25698)  **** 数据挖掘论坛

Purify: Searching for all memory leaks... 数据挖掘研究院

 

Memory leaked: 12 bytes (100%); potentially leaked: 0 bytes (0%)

数据挖掘研究院

  数据挖掘实验室

MLK: 12 bytes leaked at 0x8ea08 数据挖掘研究院

  * This memory was allocated from:

        malloc         [rtlib.o]

数据挖掘论坛

        main           [hello.c:8] 数据挖掘实验室

        _start         [crt1.o]

 

数据挖掘论坛

Purify Heap Analysis (combining suppressed and unsuppressed blocks) 数据挖掘研究院

                         Blocks        Bytes

              Leaked          1           12 数据挖掘研究院

  Potentially Leaked          0            0 数据挖掘研究院

              In-Use          0            0

数据挖掘实验室

  ----------------------------------------

数据挖掘研究院

     Total Allocated          1           12

数据挖掘交友

  数据挖掘论坛

****  Purify instrumented hello (pid 25698)  **** 数据挖掘研究院

  * Program exited with status code 13.

数据挖掘研究院

  * 1 access error, 1 total occurrence. 数据挖掘论坛

  * 12 bytes leaked.

  * 0 bytes potentially leaked. 数据挖掘交友

  * Basic memory usage (including Purify overhead): 数据挖掘实验室

    351348 code

    101724 data/bss

    8192 heap (peak use) 数据挖掘工具

    1272 stack

数据挖掘交友

  * Shared library memory usage (including Purify overhead): 数据挖掘工具

    992 libpure_solaris2_init.so.1 (shared code)

    280 libpure_solaris2_init.so.1 (private data)

数据挖掘研究院

    1079516 libc.so.1_pure_p3_c0_111202132_58_32_1158500S (shared code) 数据挖掘实验室

    31404 libc.so.1_pure_p3_c0_111202132_58_32_1158500S (private data) 数据挖掘交友

    2324 libdl.so.1_pure_p3_c0_111202132_58_32_4624S (shared code)

    4 libdl.so.1_pure_p3_c0_111202132_58_32_4624S (private data) 数据挖掘工具

    14048 libinternal_stubs.so.1 (shared code) 数据挖掘工具

    940 libinternal_stubs.so.1 (private data) 数据挖掘交友

  数据挖掘研究院

 

 

2、产生Purify自己的文件 数据挖掘工具

  数据挖掘实验室

通过查看ASCII文本文件,我们发现其很不容易查看,特别是当错误很多时,而用在文件中没有源代码,看起来就是不如图形界面的好。但是我们为了把Purify的报告信息通过电子邮件传送给别人查看时,文件和图形界面兼得,我们可以使用Purify自己的文件,叫Purify View文件。我们可以使用Purify的图形界面打开这个文件,而来在图形化的窗口下查看。

数据挖掘交友

 

我们可以有两种方式得到这个文件。一种是在Purify的图形界面的菜单中点击“File -> Save as”来生成。第二种方法是使用Purify -view-file=<filename>.pv 参数来设置Purify View文件。

数据挖掘论坛

 

而要打开这个文件时,要么简单地在Purify的菜单中选取“Open”菜单,要么使用这样的命令:

       % purify –view <filename>.pv 数据挖掘交友

 

3、自动发送邮件 数据挖掘实验室

 

数据挖掘论坛

使用Purify-mail-to-user参数可以方便地让Purify自动发送报告邮件。如:

数据挖掘研究院

  数据挖掘交友

% purify -mail-to-user=chris  gcc ... 数据挖掘工具

% purify -mail-to-user=chris,pat  gcc ... 数据挖掘研究院

% purify -mail-to-user=devgrp  gcc ...

数据挖掘交友

  数据挖掘论坛

在默认情况下,只要你设置了这个参数,Purify

[数据挖掘工作交流] [数据挖掘研究院] [数据挖掘论坛] [数据挖掘实验室]
上一篇:C/C++内存问题检查利器——Purify(1)
下一篇:C/C++内存问题检查利器——Purify(3)
最新评论共有 0 位网友发表了评论 , 查看所有评论
发表评论( 不能超过250字,需审核,请自觉遵守互联网相关政策法规。 )
匿名?
数据挖掘网站导航 数据挖掘论坛导航
  • 数据挖掘工具
  • 数据挖掘论坛
  • DataCruncher - Cognos
  • MineSet - MathSoft
  • Intelligent Miner - GainSmarts
  • Sqlserver - SAS - Clementine
  • CART - Weka - WizSoft
  • NeuroShell - ModelQuest
  • data mining tools - Darwin
  • 数据挖掘交友
  • 数据挖掘博客
  • 数据挖掘工具
  • 数据挖掘资源
  • 数据挖掘技术算法
  • 数据挖掘相关期刊、会议
  • 研究院联盟合作专区
  • 数据挖掘基础与相关技术
  • 数据挖掘厂商与就业
  • 数据挖掘研究者乐园
  • 知名厂商数据挖掘工具资料
  • 国内数据挖掘实验室
  • Foreign Data Mining Lab
  • 热点关注
  • C/C++内存问题检查利器——Purify(1)
  • Hibernate用法:查询,更新,删除!(1)
  • 细说框架风云 JSF能否拯救WEB江湖(2)
  • C/C++内存问题检查利器——Purify(3)
  • 细说框架风云 JSF能否拯救WEB江湖(1)
  • STL实践指南
  • 细说框架风云 JSF能否拯救WEB江湖(3)
  • C/C++内存问题检查利器——Purify(2)
  • XML和Java 是敌还是友?
  • Ado 实现C++对象的存取
  • 论坛最新话题
  • 搜索引擎Ask.com改版 搜索速度质量双双提升
  • 正规省级、国家级别期刊征集论文稿件
  • 寻data mining cookbook 一书的配套光盘
  • 网博垂直搜索引擎完全开源版
  • 电脑也会成为火灾元凶 操作不当也会有危险
  • 网络暴力间接逼死崔真实 韩国拟立法实名上
  • 网络最流行的歌曲单良《那一场雪》推荐给大
  • 快国庆了大家怎么安排
  • 08年“铁观音秋茶”安溪铁观音,茶叶批发网
  • 快国庆了大家怎么安排
  • 相关资讯
  • C/C++内存问题检查利器——Purify(3)
  • C/C++内存问题检查利器——Purify(2)
  • C/C++内存问题检查利器——Purify(1)
  • Log4Net使用指南
  • STL实践指南
  • STL之父访谈录
  • 与大虾对话: 领悟设计模式
  • C++之父B.Stroustrup近期言论
  • Ado 实现C++对象的存取
  • 非议MFC(二)逻辑上的不完备
  • 数据挖掘实验室资料
  • 注册成为SAS用户与爱好者俱乐部会员
  • 水南梅
  • 明日烟
  • 新人报道
  • 下载
  • 厦门服务器托管,450元/月—0592-5177319 高
  • 买空间送域名--0592-5177319 高静
  • mit ocw 数据挖掘相关课程连接
  • Introduction to Data Mining
  • Data Mining & Business Intelligence