valgrind callgrind,valgrind 性能分析

  valgrind callgrind,valgrind 性能分析

  #包括输入输出流

  使用命名空间td

  //mytest.cpp

  intmain(intargc,char*argv[])

  {//line120

  constittn=10//# of elementsinarray

  constit ng _ nLargeRange=500 * 1024 * 1024;

  cout Startoftests endl

  int * P1=new int(1);//usetocauseleak

  int * p2=new int[N];//allocateanintarray

  int * P3=new int(2);//usedtotestwrongdelete

  char * CP=0;//cpisnullpointer

  charca[3];//uniinitializedarray

  char * pLarge=NULL//usedtotestsetaddressrangeperms:大范围

  cout Test1:offbyone endl;

  for(inti=1;I N 1;I)//一次性循环

  p2[I]=I;//err-initializeelementp[N]

  cout test 2:accessfreedstorage endl;

  删除P1;

  * P1=3;//err-accessingfreedstorage

  cout Test3:usinguninitializedstorage endl;

  if(p2[0])cout Junk endl;//err-usedunitdata

  cout Test4:deletearrayusingscalardelete endl;

  delete p2//err-deleterarraywithscalardelete

  cout test 5:arraydeleteofscalar endl;

  删除[]P3;//err-arraydeleteofscalar

  cout test 6:overlappingstorageblocks endl;

  memcpy(ca,ca[1],2);//err-overlappingstorageblocks

  cout test 7:systemcallusinguniinitializedata endl;

  睡眠(1ca[0]);//err-uninitdatainsystemcall

  cout test 8:setaddressrangeperms:大范围 endl

  pLarge=new char[g _ nLargeRange];

  cout test 9:assigntonullpointer-seg faults endl;

  * CP= a//err-usednullpointer(Segfauilts)

  cout Endoftests endl

  返回0

  }

  运行goa a a CPP

  valgrind-tool=mem check-num-callers=50-leak-check=full-log-file=mem check ./a

  屏幕输出

  开始测试

  测试1:offbyone

  测试2:accessfreedstorage

  测试3:使用未初始化存储

  测试4:deletearrayusingscalardelete

  测试5:arraydeleteofscalar

  测试6:重叠存储块

  测试7:系统调用使用未初始化数据

  测试8:setaddressrangeperms:大范围

  测试9:assigntonullpointer-seg故障

  段错误

  日志

  ==29816==Memcheck,一个内存错误检测器。

  ==29816==版权所有2002-2008年,GNU GPLd作者朱利安苏厄德等人。

  ==29816==使用利维克斯1884年修订版,一个用于动态二进制翻译的库。

  ==29816==版权所有2004-2008年,GNU GPLd由甲骨文全球大会LLP .

  ==29816==使用valgrind-3.4.1,一个动态二进制插装框架。

  ==29816==版权所有2000年至2008年,由朱利安苏厄德等人使用GNU GPL d .

  ==29816==有关更多详细信息,请使用:-v重新运行

  ==29816==

  ==29816==我的PID=29816,父PID=26483 .食物和一个参数名是:

  ==29816==./a

  ==29816==

  ==29816==大小为四的无效写入

  ==29816==at0x 804887 b:main(a . CPP:20)

  ==29816==地址0x401c088是大小为40的块分配后的0个字节

  ==29816==at0x4005515:运算符新[](无符号int) (vg_replace_malloc.c:268)

  ==29816==by0x 8048819:main(a . CPP:13)

  ==29816==

  ==29816==大小为四的无效写入

  ==29816==在0x 80488 B9:main(a . CPP:23)

  ==29816==地址0x401c028是一个大小为四的块中的0个字节

  ==29816==在0x4005BD1:运算符delete(void *)(VG _ replace _ malloc。丙:342)

  ==29816==by0x 80488 b5:main(a . CPP:22)

  ==29816==

  ==29816==条件跳转或移动取决于未初始化的值

  ==29816==at0x 80488 ea:main(a . CPP:25)

  ==29816==

  ==29816==不匹配的free()/delete/delete []

  ==29816==在0x4005BD1:运算符delete(void *)(VG _ replace _ malloc。丙:342)

  ==29816==by0x 804893 e:main(a . CPP:27)

  ==29816==地址0x401c060是大小为40的块内的0个字节

  ==29816==at0x4005515:运算符新[](无符号int) (vg_replace_malloc.c:268)

  ==29816==by0x 8048819:main(a . CPP:13)

  ==29816==

  ==29816==不匹配的free()/delete/delete []

  ==29816==在0x4005F61:运算符delete[](void *)(VG _ replace _ malloc。丙:364)

  ==29816==by0x 8048973:main(a . CPP:29)

  ==29816==地址0x401c0b8是大小为四的块内的0个字节

  ==29816==在0x400502D:运算符新(无符号整数)(vg_replace_malloc.c:224)

  ==29816==by0x 8048828:main(a . CPP:14)

  ==29816==

  ==29816==条件跳转或移动取决于未初始化的值

  ==29816==at 0 xa 8 f 7 AC:sleep(in/lib/libc-2.5。所以)

  ==29816==by0x 80489 DC:main(a . CPP:33)

  ==29816==警告:设置地址范围烫发:大范围[0x884a028,0x 27 C4 a028](未定义)

  ==29816==

  ==29816==大小为一的无效写入

  ==29816==at0x 8048 a37:main(a . CPP:37)

  ==29816==地址0x0未被堆栈、内存分配或(最近)释放

  ==29816==

  ==29816==进程以信号11(西格夫)的默认动作终止

  ==29816==不在地址0x0的映射区域内访问

  ==29816==at0x 8048 a37:main(a . CPP:37)

  ==29816==如果您认为这是由于您的

  ==29816==程序的主线程(不太可能但有可能),可以尝试增加

  ==29816==使用- main-stacksize=标志的主线程堆栈的大小。

  ==29816==本次运行中使用的主线程堆栈大小为10485760。

  ==29816==

  ==29816==错误摘要:7个上下文中的七个错误(已取消:1中的15个)

  ==29816==malloc/free:在出口处使用:1块中524,288,000字节。

  ==29816==malloc/free: 4个分配,3个免费,分配了524,288,048字节。

  ==29816==对于检测到的错误计数,使用:-v重新运行

  ==29816==Use - track-origins=yes查看未初始化值的来源

  ==29816==搜索指向一个未释放块的指针。

  ==29816==已检查87,856字节。

  ==29816==

  ==29816==泄漏汇总:

  ==29816==肯定丢了:0块0字节。

  ==29816==可能丢失:0个块中的0个字节。

  ==29816==仍然可达:1块中524,288,000字节。

  ==29816==取消:0个块中有0个字节。

  ==29816==不显示可到达的块(找到指针的那些块)。

  ==29816==要查看它们,请使用:-泄漏检查=完全显示-可到达=是重新运行

valgrind callgrind,valgrind 性能分析