我寫的運行時內存問題調試一個開源工具外部庫調用:轉換的malloc()調用到用C
https://github.com/sandeepsinghmails/S_malloc
當前版本要求用戶改變他/她包裝函數malloc()
和free()
並從我的庫中調用兩個附加函數。
我想修改此代碼,以便用戶的malloc()
和free()
調用自動映射到我自己的實現。用戶不需要修改他的源代碼(Valgrind提供的東西)。
有人能指導我嗎?
我寫的運行時內存問題調試一個開源工具外部庫調用:轉換的malloc()調用到用C
https://github.com/sandeepsinghmails/S_malloc
當前版本要求用戶改變他/她包裝函數malloc()
和free()
並從我的庫中調用兩個附加函數。
我想修改此代碼,以便用戶的malloc()
和free()
調用自動映射到我自己的實現。用戶不需要修改他的源代碼(Valgrind提供的東西)。
有人能指導我嗎?
看看malloc_hooks:
http://man7.org/linux/man-pages/man3/malloc_hook.3.html
GNU C庫,可以修改的malloc的行爲(3),realloc的(3), 和自由(3)通過指定適當的鉤子函數。對於 示例,可以使用這些 鉤子來幫助您調試使用動態內存分配的程序。
謝謝。但是我遇到了malloc_hook和LD_PRELOAD的另一個問題。我自己的工具代碼涉及malloc&free()。現在,這些調用也與應用程序的日誌有關。你能否提供一些關於如何禁用某些選擇性呼叫的包裝的提示?謝謝。 –
嗨。您應該直接從我們的應用程序使用原始掛鉤。將它們包裝在my_malloc,my_calloc等等中,然後生成一個頭文件,將malloc重定義爲my_malloc,將calloc重定義爲my_calloc,並將其包含在標頭中。 –
'LD_PRELOAD'來拯救(只是谷歌它)。 – 2012-12-17 15:48:48
請注意,Valgrind使用不同的機制來提供這種功能:它在虛擬處理器上執行「客戶端」程序,允許它在一路上操縱任何東西。 – unwind