2012-11-26 26 views
0

我想用存儲器調試器的功能(只是泄漏檢測)來擴展現有的工具。帶ptrace的內存調試器

我知道一些內存調試器通過替換malloc/free並跟蹤什麼是待解脫和誰分配它的工作;或者通過在虛擬機的種類上運行進程並監視內存訪問。

我想知道,如果是有意義的使用ptrace()上設置的malloc /免費斷點,而不是與dmalloc例如重建,並在一個單獨的進程監控分配。它會太慢嗎?其他工具是否以這種方式工作?

+3

我沒有看到任何理由,你不能這樣做(只是爲了檢漏),但我質疑這是否值得除了作爲一個練習。內存調試很難做好,而且valgrind很難打敗,除非你有特殊的需求,其性能是令人望而卻步的。此外,「泄漏檢測」通常是一個破碎的習慣用法;它會發現所有非問題泄漏(在退出前沒有釋放的東西),但找不到任何有問題的泄漏(即使它們不再被使用,其生命週期永遠不會結束的分配)。 –

+0

@尼克,我目前正在做同樣的事情,但我有問題在操作系統釋放他們退出之前捕獲泄漏。你有沒有取得任何進展? – tay10r

+0

@TaylorFlores發現雖然它的工作原理並不是最好的方法,但在大量使用'malloc/free'的情況下,由於所有的上下文切換,它會增加大量的延遲。我建議使用鉤子代替,這裏是一個簡單的教程http://www.linuxforu.com/2011/08/lets-hook-a-library-function/ – imreal

回答

0

這是不實際的使用調試器和陷阱的malloc /免費通話的幾個原因:

  1. 從一個進程切換到另一個開銷僅僅是偉大的平凡的程序。

  2. 您最終花費的存儲空間類似於存儲所有權信息的數量。 (這是我真正想要改進的)

  3. 有相當多的函數可用於堆,並且可能很容易錯過一些。