2011-11-27 55 views
0

我有一個在Linux,Solaris和AIX上運行的C應用程序。我已經使用Totalview的MemoryScape等工具來追蹤Linux上的內存泄漏,並且它100%清潔。但是,我注意到了Solaris上的一個小漏洞。Solaris LIBUMEM:C應用程序執行SUBPROCESS時,是否找到「libmapmalloc.so.1 not found」?

所以我一直在Solaris上使用「libumem」來試圖找到泄漏。

我的應用程序或者調用「用戶出口」(通過子進程調用)或不調用。

所以,如果我運行沒有用戶退出(因此沒有子調用),然後使用libumem工程100%......,我看沒有泄漏仍然是應用...

LD_PRELOAD = libumem.so UMEM_DEBUG =審計./myapplication的config.ini

但是,當我打開用戶退出調用,這樣主應用程序調用的子過程,然後我得到以下運行時打印到stdout由子:

ld.so .1:userexit_proxy:致命的:libmapmalloc.so.1:沒有這樣的文件或目錄

請注意,如果我做使用「使用libumem」,那麼應用程序運行100%...(只是一個很小的內存泄漏仍然)

現在我的應用程序在64位編譯,我注意到/usr/lib/libmapmalloc.so.1是32位的,但這不應該有所作爲......

任何想法如何在還調用子進程的應用程序上使用libumem?

注:我也曾嘗試將變量導出到整個環境中,仍然沒有運氣

出口LD_PRELOAD = libumem.so 出口UMEM_DEBUG =審計

另外,請糾正我,如果我我錯了,但如果一個子進程完成,那麼子進程中的任何「泄漏內存」都會自動釋放對嗎?所以我可以假設Solaris上沒有泄漏來自子進程調用?

在這方面的任何幫助,將使用dlerror獲得代碼時,不勝感激

感謝您的幫助

林頓

回答

0

這種行爲已經被發現錯誤假設它返回一個非空值,而dlopen成功(請參閱此郵件:indiana discuss。)我將首先跟蹤您的應用程序,以查看是否調用了這些函數以及如何調用這些函數。

/usr/lib/libmapmalloc.so.1確實是32位,但如果你的應用程序是64位的,它使用類似/usr/lib/amd64/libmapmalloc.so或類似的東西。

你說得對,當一個(子)進程結束時,所有的內存分配都被釋放。

相關問題