動態(tài)分析技術以及Valgrind

1 動態(tài)分析技術

對于動態(tài)分析技術的解釋如下:

在程序運行的時候能夠加入檢測例程净刮,對執(zhí)行情況進行監(jiān)控,并提示出錯的地方。

動態(tài)分析技術會更容易檢查出實際運行時出現的問題岭佳。

動態(tài)分析技術有以下特點:

動態(tài)分析工具不需要重新鏈接運行庫或者是修改代碼,使用起來很方便萧锉。

動態(tài)分析技術會讓程序執(zhí)行變得更慢珊随。

動態(tài)分析技術發(fā)現的問題不太可能是誤報!

動態(tài)監(jiān)測工具能夠為程序檢測提供哪些方面的幫助柿隙,比如:

1叶洞、未經初始化的變量

2、泄漏的內存

3禀崖、訪問非可用的地址空間

常見的有Valgrind衩辟,JavaScript的Jalangi,SystemTap波附,perf等等

2 Valgrind

常見的動態(tài)跟蹤工具套件之一艺晴,能夠提供內存管理、線程bug方面的檢查掸屡。使用Valgrind之前最好重新對C++程序使用-g命令編譯封寞,提供豐富的調試信息。

命令格式如下

valgrind [valgrind選項] 所檢測的程序[程序選項]

2.1 Valgrind選項

--tool ? <組件> 所使用的檢測組建仅财,比如memcheck(實際上是默認的不需要加)狈究、cachegrind、massif等組件

-v ? ? ? ? 即verbose更為詳細的模式

-q ? ? ? ? 過濾其他告警只打印錯誤

--trace-children=<yes> ?在多進程的情況下盏求,檢查由exec創(chuàng)建的子進程

--leak-check=<yes> ? 是否對內存泄漏進行檢查

?--time-unit=B ? 調整輸出的時間單元

......

2.2 Valgrind組件

- memcheck ? 內存檢查工具抖锥,可檢查的常用問題見2.3。

- cachegrind ? 提供程序使用緩存的情況风喇。cg_annotate對采樣進行更為細致的展示宁改。

- callgrind ? ? ? 提供函數之間的調用關系圖。使用callgrind_annotate對采樣進行分析魂莫。使用callgrind_control可以和正在運行的程序交互还蹲,獲得當前運行時的情況。

- helgrind ? ? ? ?線程同步錯誤的檢查工具。檢查非合理使用的POSIX線程模型(比如銷毀上了鎖的同步量谜喊、回收仍存在已上鎖同步量的內存等等問題)潭兽、由加鎖順序導致的死鎖問題、數據競爭斗遏。

- drd ? ? ? ? ? ? ? ?線程錯誤檢測工具山卦。支持POSIX線程編程模型。

多線程常常出現的問題有5大類:

1诵次、數據競爭(Data Races)即沒有使用鎖來保證線程并發(fā)訪問的安全账蓉。

2、鎖競爭(Lock Contention)即一個線程持有鎖的時間過長

3逾一、死鎖(Deadlock)即簡單模型下一個線程持鎖A铸本,要鎖B,而別的線程持鎖B遵堵,要鎖A箱玷。

4、偽共享(fasle sharing)即多個處理器上的線程陌宿,訪問同一塊cache變量锡足,導致CPU的局部緩存總是要保持一致。由CPU的緩存一致性引起壳坪。

5舶得、沒有合理使用POSIX線程模型

- massif ? ? ?堆分析工具。目的是幫助分析堆弥虐、額外分配的內存(對齊使用)的使用情況扩灯,幫助程序減少內存的使用。并能給出程序每一部分對應內存的分配情況霜瘪。配合ms_print分析輸出情況。


2.3 內存檢查常見告警

使用非法地址

Invalid write of size X

Address XXX is 0 bytes after a block of size Y alloc'd

未初始化的空間

Uninitialized value was created by a heap allocation

內存泄漏

XX bytes in Y blocks are definitely lost in loss record...

使用未初始化的變量

Conditional jump or move depends on uninitialised value(s)

非法釋放內存(比如對一個指針多次調用free或者delete)

Invalid free()

不合理的分配和釋放(new匹配delete惧磺,new [] 匹配 delete [], malloc系列匹配free颖对,在Linux平臺可能不是個問題)

Mismatched free() / delete / delete []

另外,進行?--leak-check檢查時還可以得到四種情況磨隘。

definitely lost ?內容完全丟失缤底,指向該塊的指針都找不到

indirectly lost ? 不直接丟失,不是塊丟失番捂,而是指向鏈上的某個環(huán)節(jié)丟失

possibly lost ? 內容可能丟失个唧,指向鏈完整,但至少有一個地址可能是恰好指到鏈上的內部指針

still reachable ?可正常訪問


參考資料

valgrind用戶手冊:http://valgrind.org/docs/manual/manual.html

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末设预,一起剝皮案震驚了整個濱河市徙歼,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖魄梯,帶你破解...
    沈念sama閱讀 218,640評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件桨螺,死亡現場離奇詭異,居然都是意外死亡酿秸,警方通過查閱死者的電腦和手機灭翔,發(fā)現死者居然都...
    沈念sama閱讀 93,254評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來辣苏,“玉大人肝箱,你說我怎么就攤上這事∠◇” “怎么了煌张?”我有些...
    開封第一講書人閱讀 165,011評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長糊治。 經常有香客問我唱矛,道長,這世上最難降的妖魔是什么井辜? 我笑而不...
    開封第一講書人閱讀 58,755評論 1 294
  • 正文 為了忘掉前任绎谦,我火速辦了婚禮,結果婚禮上粥脚,老公的妹妹穿的比我還像新娘窃肠。我一直安慰自己,他們只是感情好刷允,可當我...
    茶點故事閱讀 67,774評論 6 392
  • 文/花漫 我一把揭開白布冤留。 她就那樣靜靜地躺著,像睡著了一般树灶。 火紅的嫁衣襯著肌膚如雪纤怒。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,610評論 1 305
  • 那天天通,我揣著相機與錄音泊窘,去河邊找鬼。 笑死像寒,一個胖子當著我的面吹牛烘豹,可吹牛的內容都是我干的。 我是一名探鬼主播诺祸,決...
    沈念sama閱讀 40,352評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼携悯,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了筷笨?” 一聲冷哼從身側響起憔鬼,我...
    開封第一講書人閱讀 39,257評論 0 276
  • 序言:老撾萬榮一對情侶失蹤龟劲,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后逊彭,有當地人在樹林里發(fā)現了一具尸體咸灿,經...
    沈念sama閱讀 45,717評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,894評論 3 336
  • 正文 我和宋清朗相戀三年侮叮,在試婚紗的時候發(fā)現自己被綠了避矢。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,021評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡囊榜,死狀恐怖审胸,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情卸勺,我是刑警寧澤砂沛,帶...
    沈念sama閱讀 35,735評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站曙求,受9級特大地震影響碍庵,放射性物質發(fā)生泄漏。R本人自食惡果不足惜悟狱,卻給世界環(huán)境...
    茶點故事閱讀 41,354評論 3 330
  • 文/蒙蒙 一静浴、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧挤渐,春花似錦苹享、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,936評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至软免,卻和暖如春宫纬,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背膏萧。 一陣腳步聲響...
    開封第一講書人閱讀 33,054評論 1 270
  • 我被黑心中介騙來泰國打工哪怔, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人向抢。 一個月前我還...
    沈念sama閱讀 48,224評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像胚委,于是被迫代替她去往敵國和親挟鸠。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,974評論 2 355

推薦閱讀更多精彩內容

  • 一. 簡述valgrind是什么亩冬,為何能進行內存泄露 valgrind是一個程序調試及性能分析的工具集艘希,涵蓋mem...
    Shirley_奮進中的蝦米閱讀 11,420評論 0 2
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,103評論 1 32
  • 用C/C++開發(fā)其中最令人頭疼的一個問題就是內存管理硼身,有時候為了查找一個內存泄漏或者一個內存訪問越界,需要要花上好...
    mrknowledge閱讀 11,502評論 0 5
  • ORA-00001: 違反唯一約束條件 (.) 錯誤說明:當在唯一索引所對應的列上鍵入重復值時覆享,會觸發(fā)此異常佳遂。 O...
    我想起個好名字閱讀 5,320評論 0 9
  • 本系列出于AWeiLoveAndroid的分享,在此感謝撒顿,再結合自身經驗查漏補缺丑罪,完善答案。以成系統(tǒng)凤壁。 Java基...
    濟公大將閱讀 1,528評論 1 6