用valgrind檢測glib的記憶體錯誤

2021-06-18 01:10:14 字數 621 閱讀 2574

前段時間我們發現乙個daemon總是隨機的crash,對於這種隨機的crash的bug,我們自然會想到是記憶體越界問題引起的。但是用valgrind檢測卻沒有發現任何錯誤,那部分**比較複雜,結果花了幾天也沒有發現任何線索。後來,我想起glib裡有自己的記憶體管理機制,通過glib分配的記憶體是glib自己管理的,valgrind只是過載glibc的記憶體管理函式,它根本不知道glib的存在,因此glib所分配的記憶體發生越界,valgrind自然是無法知道的。

怎麼辦呢?我想最簡單的辦法就是,在除錯版本中,讓glib直接呼叫glibc的函式,而不要自己管理。我看了一下glib的**,想通過條件編譯來做到這一點,結果發現它已經提供了繞過glib記憶體管理機制的設定,按如下方式即可繞過glib的記憶體管理機制:

if(getenv("bypass_glib_pools") != null)

g_slice_set_config(g_slice_config_always_malloc, true);

g_type_init();

g_thread_init(null);

注意,一定要在g_type_init之前呼叫,否則無效。呼叫g_slice_set_config之後,重新用valgrind執行那個程式,不到一分鐘就找到了錯誤的根源。

valgrind 記憶體洩露檢測

valgrind leak check full log file leak.log makefilevalgrind是乙個用於構建動態分析工具的儀器框架。valgrind工具可以自動檢測許多記憶體管理和執行緒錯誤,並詳細分析您的程式。valgrind可以執行非常詳細的分析,以幫助找到程式中的瓶頸。...

Valgrind 記憶體檢測工具

valgrind是乙個gpl的軟體,用於linux for x86,amd64 and ppc32 程式的記憶體除錯和 剖析。你可以在它的環境中執行你的程式來監視記憶體的使用情況,比如c 語言中的malloc和free或者 c 中的new和 delete。使用valgrind的工具包,你可以自動的檢...

記憶體檢測工具Valgrind

valgrind是一套linux下,開放源 gpl v2 的 除錯工具的集合。valgrind由核心 core 以及基於核心的其他除錯工具組成。核心類似於乙個框架 framework 它模擬了乙個cpu環境,並提供服務給其他工具 而其他工具則類似於外掛程式 plug in 利用核心提供的服務完成各種...