青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆 - 10, 文章 - 1, 評論 - 9, 引用 - 0
數據加載中……

Valgrind 使用簡單說明(轉載)

Valgrind 介紹

Valgrind是一個GPL的軟件,用于Linux(For x86, amd64 and ppc32)程序的內存調試和代碼剖析。你可以在它的環境中運行你的程序來監視內存的使用情況,比如C 語言中的malloc和free或者 C++中的new和 delete。使用Valgrind的工具包,你可以自動的檢測許多內存管理和線程的bug,避免花費太多的時間在bug尋找上,使得你的程序更加穩固。

Valgrind的主要功能

Valgrind工具包包含多個工具,如Memcheck,Cachegrind,Helgrind, Callgrind,Massif。下面分別介紹個工具的作用:

Memcheck 工具主要檢查下面的程序錯誤:

  • 使用未初始化的內存 (Use of uninitialised memory)
  • 使用已經釋放了的內存 (Reading/writing memory after it has been free’d)
  • 使用超過 malloc分配的內存空間(Reading/writing off the end of malloc’d blocks)
  • 對堆棧的非法訪問 (Reading/writing inappropriate areas on the stack)
  • 申請的空間是否有釋放 (Memory leaks – where pointers to malloc’d blocks are lost forever)
  • malloc/free/new/delete申請和釋放內存的匹配(Mismatched use of malloc/new/new [] vs free/delete/delete [])
  • src和dst的重疊(Overlapping src and dst pointers in memcpy() and related functions)

Callgrind

Callgrind收集程序運行時的一些數據,函數調用關系等信息,還可以有選擇地進行cache 模擬。在運行結束時,它會把分析數據寫入一個文件。callgrind_annotate可以把這個文件的內容轉化成可讀的形式。

Cachegrind

它模擬 CPU中的一級緩存I1,D1和L2二級緩存,能夠精確地指出程序中 cache的丟失和命中。如果需要,它還能夠為我們提供cache丟失次數,內存引用次數,以及每行代碼,每個函數,每個模塊,整個程序產生的指令數。這對優化程序有很大的幫助。

Helgrind

它主要用來檢查多線程程序中出現的競爭問題。Helgrind 尋找內存中被多個線程訪問,而又沒有一貫加鎖的區域,這些區域往往是線程之間失去同步的地方,而且會導致難以發掘的錯誤。Helgrind實現了名為” Eraser” 的競爭檢測算法,并做了進一步改進,減少了報告錯誤的次數。

Massif

堆棧分析器,它能測量程序在堆棧中使用了多少內存,告訴我們堆塊,堆管理塊和棧的大小。Massif能幫助我們減少內存的使用,在帶有虛擬內存的現代系統中,它還能夠加速我們程序的運行,減少程序停留在交換區中的幾率。

Valgrind 安裝

1、 到www.valgrind.org下載最新版valgrind-3.2.3.tar.bz2
2、 解壓安裝包:tar –jxvf valgrind-3.2.3.tar.bz2
3、 解壓后生成目錄valgrind-3.2.3
4、 cd valgrind-3.2.3
5、 ./configure
6、 Make;make install

Valgrind 使用

用法: valgrind [options] prog-and-args [options]: 常用選項,適用于所有Valgrind工具

  1. -tool=<name> 最常用的選項。運行 valgrind中名為toolname的工具。默認memcheck。
  2. h –help 顯示幫助信息。
  3. -version 顯示valgrind內核的版本,每個工具都有各自的版本。
  4. q –quiet 安靜地運行,只打印錯誤信息。
  5. v –verbose 更詳細的信息, 增加錯誤數統計。
  6. -trace-children=no|yes 跟蹤子線程? [no]
  7. -track-fds=no|yes 跟蹤打開的文件描述?[no]
  8. -time-stamp=no|yes 增加時間戳到LOG信息? [no]
  9. -log-fd=<number> 輸出LOG到描述符文件 [2=stderr]
  10. -log-file=<file> 將輸出的信息寫入到filename.PID的文件里,PID是運行程序的進行ID
  11. -log-file-exactly=<file> 輸出LOG信息到 file
  12. -log-file-qualifier=<VAR> 取得環境變量的值來做為輸出信息的文件名。 [none]
  13. -log-socket=ipaddr:port 輸出LOG到socket ,ipaddr:port

LOG信息輸出

  1. -xml=yes 將信息以xml格式輸出,只有memcheck可用
  2. -num-callers=<number> show <number> callers in stack traces [12]
  3. -error-limit=no|yes 如果太多錯誤,則停止顯示新錯誤? [yes]
  4. -error-exitcode=<number> 如果發現錯誤則返回錯誤代碼 [0=disable]
  5. -db-attach=no|yes 當出現錯誤,valgrind會自動啟動調試器gdb。[no]
  6. -db-command=<command> 啟動調試器的命令行選項[gdb -nw %f %p]

適用于Memcheck工具的相關選項:

  1. -leak-check=no|summary|full 要求對leak給出詳細信息? [summary]
  2. -leak-resolution=low|med|high how much bt merging in leak check [low]
  3. -show-reachable=no|yes show reachable blocks in leak check? [no]

Valgrind 使用舉例

下面是一段有問題的C程序代碼test.c

#include <stdlib.h>
void f(void)
{
int* x = malloc(10 * sizeof(int));
x[10] = 0; //問題1: 數組下標越界
} //問題2: 內存沒有釋放
int main(void)
{
f();
return 0;
}
1、 編譯程序test.c
gcc -Wall test.c -g -o test
2、 使用Valgrind檢查程序BUG
valgrind --tool=memcheck --leak-check=full ./test
3、 分析輸出的調試信息
==3908== Memcheck, a memory error detector.
==3908== Copyright (C) 2002-2007, and GNU GPL'd, by Julian Seward et al.
==3908== Using LibVEX rev 1732, a library for dynamic binary translation.
==3908== Copyright (C) 2004-2007, and GNU GPL'd, by OpenWorks LLP.
==3908== Using valgrind-3.2.3, a dynamic binary instrumentation framework.
==3908== Copyright (C) 2000-2007, and GNU GPL'd, by Julian Seward et al.
==3908== For more details, rerun with: -v
==3908==
--3908-- DWARF2 CFI reader: unhandled CFI instruction 0:50
--3908-- DWARF2 CFI reader: unhandled CFI instruction 0:50
/*數組越界錯誤*/
==3908== Invalid write of size 4
==3908== at 0x8048384: f (test.c:6)
==3908== by 0x80483AC: main (test.c:11)
==3908== Address 0x400C050 is 0 bytes after a block of size 40 alloc'd
==3908== at 0x40046F2: malloc (vg_replace_malloc.c:149)
==3908== by 0x8048377: f (test.c:5)
==3908== by 0x80483AC: main (test.c:11)
==3908==
==3908== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 14 from 1)
==3908== malloc/free: in use at exit: 40 bytes in 1 blocks.
==3908== malloc/free: 1 allocs, 0 frees, 40 bytes allocated.
==3908== For counts of detected errors, rerun with: -v
==3908== searching for pointers to 1 not-freed blocks.
==3908== checked 59,124 bytes.
==3908==
==3908==
/*有內存空間沒有釋放*/
==3908== 40 bytes in 1 blocks are definitely lost in loss record 1 of 1
==3908== at 0x40046F2: malloc (vg_replace_malloc.c:149)
==3908== by 0x8048377: f (test.c:5)
==3908== by 0x80483AC: main (test.c:11)
==3908==
==3908== LEAK SUMMARY:
==3908== definitely lost: 40 bytes in 1 blocks.
==3908== possibly lost: 0 bytes in 0 blocks.
==3908== still reachable: 0 bytes in 0 blocks.
==3908== suppressed: 0 bytes in 0 blocks.

posted on 2011-08-05 09:30 Roger 閱讀(554) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲美女黄网| 久久激情五月婷婷| 欧美日韩一区二区三区在线| 国产精品mv在线观看| 亚洲天堂激情| 亚洲自拍16p| 国产日韩精品在线观看| 欧美中文字幕久久| 欧美主播一区二区三区美女 久久精品人 | 国产视频综合在线| 久久久久99精品国产片| 欧美影院成年免费版| 国模一区二区三区| 欧美成人一二三| 欧美日产国产成人免费图片| 亚洲精品国产拍免费91在线| 欧美本精品男人aⅴ天堂| 麻豆免费精品视频| 亚洲天堂免费观看| 欧美在线视频一区二区| 依依成人综合视频| 亚洲精品色图| 国产日韩在线亚洲字幕中文| 欧美在线不卡| 欧美国产日本高清在线| 亚洲视频在线观看| 久久国产66| 亚洲特色特黄| 久久香蕉国产线看观看av| 亚洲精品美女| 欧美在线视频日韩| aaa亚洲精品一二三区| 亚洲一区二区三区四区五区午夜| 国产农村妇女精品一二区| 男人的天堂成人在线| 欧美日韩一区二区在线视频| 亚洲综合首页| 美女主播视频一区| 欧美一区二区三区四区在线观看| 久久一区精品| 欧美一区二区三区另类| 欧美国产日韩一区二区在线观看| 小黄鸭精品密入口导航| 久久综合中文| 久久久av毛片精品| 国产精品久久久久久久久久久久久久| 免费观看在线综合色| 国产精品久久久久秋霞鲁丝| 久久久97精品| 国产精品午夜久久| 亚洲乱码国产乱码精品精98午夜 | 久久综合国产精品| 午夜免费电影一区在线观看| 欧美中文字幕视频| 亚洲欧美日韩系列| 欧美三级日韩三级国产三级| 久久精品国内一区二区三区| 女仆av观看一区| 欧美电影免费观看高清| 国产偷自视频区视频一区二区| 亚洲精品久久久一区二区三区| 国产在线观看91精品一区| aa日韩免费精品视频一| 亚洲乱码国产乱码精品精可以看| 欧美在线影院| 久久婷婷丁香| 国内精品久久国产| 欧美在线观看天堂一区二区三区| 亚洲欧美日韩国产中文在线| 免费成人av| 亚洲国产精品www| 亚洲人成绝费网站色www| 老司机精品视频一区二区三区| 久久久久久久久久久成人| 国产日韩一区二区三区在线| 亚洲精选91| 午夜久久福利| 国产欧美日韩精品一区| 亚洲女人天堂av| 久久久久久久久久久久久久一区 | 国产欧美一区二区三区沐欲| 亚洲三级视频| 亚洲影院在线观看| 国产日韩欧美综合精品| 欧美资源在线| 欧美黄色影院| 亚洲一区二区精品| 国产日韩欧美综合精品| 午夜精品久久久久| 葵司免费一区二区三区四区五区| 精品福利免费观看| 欧美成人在线免费观看| 亚洲黄色成人| 亚洲欧美日韩综合| 一区二区三区在线观看欧美| 午夜一区二区三区在线观看| 欧美一二三区精品| 在线国产精品一区| 欧美日韩亚洲一区二| 亚洲摸下面视频| 欧美国产日韩a欧美在线观看| 亚洲精品日韩久久| 国产欧美日韩视频| 欧美91福利在线观看| 99热在线精品观看| 另类av导航| 国产精品99久久久久久白浆小说| 国产精品激情| 免费观看成人鲁鲁鲁鲁鲁视频| 亚洲精品视频二区| 另类激情亚洲| 亚洲欧美综合精品久久成人| 国产精品一区二区男女羞羞无遮挡| 久久成人资源| 亚洲无人区一区| 亚洲国产精品免费| 久久久噜噜噜| 亚洲欧美日韩国产一区二区| 国产视频亚洲| 欧美日韩综合在线| 农村妇女精品| 久久se精品一区精品二区| 亚洲精品永久免费精品| 久久夜色精品| 久久爱www久久做| 亚洲天堂av高清| 亚洲精品一区中文| 亚洲成人在线观看视频| 国产精品午夜av在线| 欧美精品免费播放| 可以免费看不卡的av网站| 亚洲一区在线直播| 一个人看的www久久| 亚洲国产精品悠悠久久琪琪| 欧美亚洲一区| 亚洲一区二区高清视频| 日韩午夜激情av| 91久久极品少妇xxxxⅹ软件| 国产精品色网| 国产精品露脸自拍| 欧美日韩一区二区三区视频| 久久精品国语| 久久久久久高潮国产精品视| 一本色道88久久加勒比精品| 麻豆av一区二区三区| 久久精品色图| 久久久国产精品一区| 欧美一区三区二区在线观看| 日韩亚洲视频| 亚洲一区二区精品在线观看| 亚洲国产精品视频一区| 激情综合网激情| 在线精品国产欧美| 亚洲国产一区二区三区a毛片| 国产综合网站| 亚洲风情亚aⅴ在线发布| 黑人中文字幕一区二区三区 | 久久久精品久久久久| 亚洲欧美日韩在线不卡| 亚洲一区免费| 欧美在线观看网址综合| 小辣椒精品导航| 久久影院午夜论| 欧美人交a欧美精品| 欧美日韩免费一区二区三区视频| 欧美日本不卡高清| 国产精品欧美日韩| 国产一区二区精品久久99| 国内揄拍国内精品久久| 亚洲国产精品va在看黑人| 91久久久在线| 亚洲欧美成人一区二区在线电影 | 亚洲成人资源| 中文在线一区| 久久久激情视频| 亚洲激情电影在线| 亚洲私人影院在线观看| 欧美一区二区成人| 欧美a级片一区| 国产伦精品一区二区三区照片91| 国产一区二区三区奇米久涩| 国产亚洲福利社区一区| 亚洲第一页在线| 亚洲一区二区三区精品视频| 亚洲男人第一av网站| 久久影音先锋| 亚洲午夜一区二区三区| 久久精品国产精品亚洲| 麻豆精品在线视频| 国产噜噜噜噜噜久久久久久久久| 一区在线免费| 亚洲欧美高清| 最新国产成人在线观看| 午夜精品亚洲| 欧美手机在线| 日韩小视频在线观看专区| 久久久久免费观看| 99国内精品久久| 母乳一区在线观看| 黄色av一区|