valgrind簡介以及在ARM上交叉編譯運行

valgrind簡介以及在ARM上交叉編譯運行

參考博客:https://blog.csdn.net/dengcanjun6/article/details/54958359

參考博客:https://blog.csdn.net/longbei9029/article/details/78626004?locationNum=1&fps=1

參考博客:https://blog.csdn.net/qq_29350001/article/details/53780697

Valgrind是一款用於內存調試、內存泄漏檢測以及性能分析的軟件開發工具。 
Valgrind的最初作者是Julian Seward,他於2006年由於在開發Valgrind上的工作獲得了第二屆Google-O’Reilly開源代碼獎。 
Valgrind遵守GNU通用公共許可證條款,是一款自由軟件。

關於valgrind的具體使用網上有很多。這裏記錄一下在ARM上的交叉編譯及使用過程中的一些問題。

1、下載及編譯準備

wget http://valgrind.org/downloads/valgrind-3.12.0.tar.bz2

tar xvf valgrind-3.12.0.tar.bz2

cd valgrind-3.12.0

sudo apt-get install automake

./autogen.sh

2、交叉編譯 
修改configure: armv7*) 改成 armv7*|arm)

./configure --host=arm-linux CC=arm-none-linux-gnueabi-gcc CPP=arm-none-linux-gnueabi-cpp CXX=arm-none-linux-gnueabi-g++ --prefix=/opt/valgrind-3.12.0
make 
make install

/opt/valgrind-3.12.0目錄下生成好的valgrind,包括4個文件夾:bin,include,lib,share

–prefix=/opt/valgrind-3.12.0指定的目錄要與開發板上放置的目錄一致,不然運行valgrind時可能會出現“valgrind: failed to start tool ‘memcheck’ for platform ‘arm-linux’: No such file or directory”錯誤。

3、運行 
把安裝目錄下的文件valgrind目錄通過tftp複製到目標板上的/opt/valgrind-3.12.0目錄下,修改bin目錄下的執行權限。

chmod -R +x /opt/valgrind-3.12.0/bin/

此時運行bin目錄下的valgrind會出現如下錯誤提示:

valgrind: failed to start tool 'memcheck' for platform 'arm-linux': Permission denied

解決方法:

export VALGRIND_LIB="/opt/valgrind-3.12.0/lib/valgrind"
chmod -R +x /opt/valgrind-3.12.0/lib/valgrind/

就可以對ARM上的代碼進行內存泄露等檢查。

4、問題整理

1.出現“valgrind: failed to start tool ‘memcheck’ for platform ‘arm-linux’: No such file or directory”錯誤。

網上很多教程都說要注意--prefix後面的安裝目錄要和開發板平臺目錄一致,比如說我現在在ubuntu x64編譯,安裝到/opt/valgrind-3.12.0目錄,那麼我們將整個valgrind-3.12.0目錄拷貝到開發板,那麼必須拷貝到開發板的/opt目錄下,可能有的的確問題解決了。但是其實本質上的問題是執行valgrind時,沒有找到valgrindlib庫!!!

      解決方案:可以看到lib下面還有一層目錄valgrind,這時候我們在開發板/etc/profile文件中添加一行

       export VALGRIND_LIB=/opt/valgrind-3.12.0/lib/valgrind

      當然我們還可以在PATH="/usr/bin:/usr/sbin:/bin:/sbin:/app/bin:/opt/valgrind-3.12.0/bin",黑色爲一些系統路徑配置(根據你自己profile裏面PATH路徑),添加後面紅色部分就行了,執行下source /etc/profile ,就可以當valgrind命令使用了

         執行下valgrind --tool=memcheck --leak-check=full ./test

2.執行 valgrind ls -l 出現如下錯誤:


以上錯誤,是因爲在Ubuntu下還需要一個LIB:libc6-dbg
運行:sudo apt-get install libc6-dbg 以安裝libc6-dbg

然後再次運行: valgrind ls -l





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章