目錄
gperftools-heap_checker[1]
gperftools-heap_profile[2]
valgrind安裝及使用
c++編譯器安裝
valgrind安裝
valgrind使用
檢查記憶體洩漏
2,將-ltcmalloc加入專案的編譯選項來編譯你的專案得到my_binary_compiled_with_tcmalloc
-l /usr/lib64 -ltcmalloc
3,把so檔案放到你專案執行的地方。
env ld_preload="/usr/lib/libtcmalloc.so"
env heapcheck=normal /usr/local/bin/my_binary_compiled_with_tcmalloc
4,注意:如果你的專案是一直執行的狀態,需要合理安排主程序的退出,不然會crash。
5,結果分析
pprof --pdf my_binary_compiled_with_tcmalloc /tmp/mybin.hprof > /tmp/mybin.hprof.pdf
生成的pdf裡,黑底是洩漏了,白底是沒有洩漏。
檢查不同函式的記憶體佔比,類似cpu profiler
1,2 同heap checker的前2步
3,執行,這樣預設每1m會生成乙個檔案,測試發現就算加了signal還是會一直生成profile檔案?
env ld_preload="/usr/lib/libtcmalloc.so"
4, 結果分析
pprof --pdf my_binary_compiled_with_tcmalloc /tmp/mybin.hprof > /tmp/mybin.hprof.pdf
參考link
[1]centos7下安裝c/c++的編譯器gcc和g++,執行了如下兩條命令[1]:
1 yum install gcc
2 yum install gcc-c++ libstdc++-devel (正確)
1. tar -jxvf valgrind-3.12.0.tar.bz2
2. cd valgrind-3.12.0
3. ./configure --prefix=/home/valgrind/bin [3]
4. 編譯valgrind
make
make install
5. 到這來已經安裝成功了,但還不能直接使用,需要建立乙個軟連線。
cd /usr/bin/
ln -s /home/valgrind/bin/bin/valgrind valgrind
6. 驗證
valgrind -h
1. 使用valgrind檢查記憶體
valgrind --log-file=valgrind.log.1 --leak-check=full --tool=memcheck --error-limit=no --show-reachable=yes ./應用程式 &
執行一段時間後檢視valgrind.log.1,檢視是否有lost記憶體洩漏問題等。
參考link
[1][2]
[3]
記憶體檢查工具
記憶體檢測工具主要用於檢測程式的堆疊錯誤。一般的檢測方法是通過加magic number來表示正確的記憶體資訊。如果magic number被寫壞,那麼就表示記憶體錯亂了。1編譯選項 fstack protector fstack protector all fstack protector 在函式...
記憶體檢查工具valgrind
valgrind是一套linux下的開放源 的 除錯工具的集合。valgrind由核心以及基於核心的其他除錯工具組成。valgrind包括以下的一些工具 在了解valgrind之前可以了解一下linux程式記憶體空間布局 0指定安裝路徑和生成makefile configure prefix hom...
c記憶體洩漏檢查工具 mtrace
專案中出現記憶體洩漏是讓人很頭疼的事情,使用了vargrind效果不明顯,可能因為試用了libuv裡面有太多非同步處理,導致使用vargrind會出現段錯誤。後來發現mtrace,使用還是挺簡單的。mtrace是gnu自帶的庫,因為我的專案是嵌入式開發,使用arm平台,剛開始想交叉編譯mtrace在...