|簡體中文

比思論壇

 找回密碼
 按這成為會員
搜索



查看: 358|回復: 0
打印 上一主題 下一主題

linux 内存泄漏检查工具

[複製鏈接]

3

主題

0

好友

866

積分

高中生

Rank: 4

  • TA的每日心情
    擦汗
    5 天前
  • 簽到天數: 670 天

    [LV.9]以壇為家II

    推廣值
    0
    貢獻值
    0
    金錢
    1169
    威望
    866
    主題
    3
    樓主
    發表於 2014-11-1 13:17:32

    在使用C/C++编程时,有时内存泄漏问题对程序会形成灾难,这种问题往往要仔细检查。linux下有方便测试程序内存管理的工具:valgrind

    valgrind包含几个标准的工具,它们是:

    1、memcheck

    memcheck探测程序中内存管理存在的问题。它检查所有对内存的读/写操作,并截取所有的malloc/new/free/delete调用。因此memcheck工具能够探测到以下问题:

    1)使用未初始化的内存

    2)读/写已经被释放的内存

    3)读/写内存越界

    4)读/写不恰当的内存栈空间

    5)内存泄漏

    6)使用malloc/new/new[]和free/delete/delete[]不匹配。

    2、cachegrind

    cachegrind是一个cache剖析器。它模拟执行CPU中的L1, D1和L2 cache,因此它能很精确的指出代码中的cache未命中。如果你需要,它可以打印出cache未命中的次数,内存引用和发生cache未命中的每一行 代码,每一个函数,每一个模块和整个程序的摘要。如果你要求更细致的信息,它可以打印出每一行机器码的未命中次数。在x86和amd64 上,cachegrind通过CPUID自动探测机器的cache配置,所以在多数情况下它不再需要更多的配置信息了。

    3、helgrind

    helgrind查找多线程程序中的竞争数据。helgrind查找内存地址,那些被多于一条线程访问的内存地址,但是没有使用一致的锁就会被查出。这表示这些地址在多线程间访问的时候没有进行同步,很可能会引起很难查找的时序问题。

    检查内存泄漏只需要用到第一个功能memcheck

    命令如下:valgrind --tool=memcheck --leak-check=full 执行程序命令

    比如执行二进制可执行文件aaa

    valgrind --tool=memcheck --leak-check=full ./aaa

    aaa最好是用-g选项编译的,便于在调试时发现哪一步出现了内存泄漏的问题。



    重要聲明:本論壇是以即時上載留言的方式運作,比思論壇對所有留言的真實性、完整性及立場等,不負任何法律責任。而一切留言之言論只代表留言者個人意見,並非本網站之立場,讀者及用戶不應信賴內容,並應自行判斷內容之真實性。於有關情形下,讀者及用戶應尋求專業意見(如涉及醫療、法律或投資等問題)。 由於本論壇受到「即時上載留言」運作方式所規限,故不能完全監察所有留言,若讀者及用戶發現有留言出現問題,請聯絡我們比思論壇有權刪除任何留言及拒絕任何人士上載留言 (刪除前或不會作事先警告及通知 ),同時亦有不刪除留言的權利,如有任何爭議,管理員擁有最終的詮釋權。用戶切勿撰寫粗言穢語、誹謗、渲染色情暴力或人身攻擊的言論,敬請自律。本網站保留一切法律權利。

    手機版| 廣告聯繫

    GMT+8, 2024-5-23 22:58 , Processed in 0.012573 second(s), 17 queries , Gzip On, Memcache On.

    Powered by Discuz! X2.5

    © 2001-2012 Comsenz Inc.

    回頂部