欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

嵌入式相關(guān)的動態(tài)檢測工具Valgrind簡介

dyquk4xk2p3d ? 來源:良許Linux ? 2023-11-08 09:41 ? 次閱讀

Valgrind簡介

Valgrind是一套Linux下,開放源代碼(GPL V2)的仿真調(diào)試工具的集合。

b461d97c-7dc6-11ee-939d-92fbcf53809c.png

Valgrind工具包包含多個工具,如Memcheck、Cachegrind、Helgrind、Callgrind、Massif。

Memcheck工具

Memcheck工具是Valgrind中最常用的工具,用來檢測程序中出現(xiàn)的內(nèi)存問題。它能檢測如下問題:

使用未初始化內(nèi)存;

使用釋放后的內(nèi)存;

使用超出malloc分配的內(nèi)存塊;

對堆棧的非法訪問;

內(nèi)存泄漏;

不正確的malloc/free或new/delete匹配;

memcpy()相關(guān)函數(shù)中的dst和src指針重疊。

Cachegrind工具

Callgrind收集程序運行時的一些數(shù)據(jù),函數(shù)調(diào)用關(guān)系等信息,還可以有選擇地進行cache模擬。在運行結(jié)束時,它會把分析數(shù)據(jù)寫入一個文件。callgrind_annotate可以把這個文件的內(nèi)容轉(zhuǎn)化成可讀的形式。

Helgrind工具

它主要用來檢查多線程程序中出現(xiàn)的競爭問題。Helgrind尋找內(nèi)存中被多個線程訪問,而又沒有一貫加鎖的區(qū)域,這些區(qū)域往往是線程之間失去同步的地方,而且會導致難以發(fā)掘的錯誤。

Helgrind實現(xiàn)了名為” Eraser” 的競爭檢測算法,并做了進一步改進,減少了報告錯誤的次數(shù)。

Callgrind工具

它模擬 CPU中的一級緩存I1,D1和L2二級緩存,能夠精確地指出程序中 cache的丟失和命中。如果需要,它還能夠為我們提供cache丟失次數(shù),內(nèi)存引用次數(shù),以及每行代碼,每個函數(shù),每個模塊,整個程序產(chǎn)生的指令數(shù)。這對優(yōu)化程序有很大的幫助。

Massif工具

堆棧分析器,它能測量程序在堆棧中使用了多少內(nèi)存,告訴我們堆塊,堆管理塊和棧的大小。

Massif能幫助我們減少內(nèi)存的使用,在帶有虛擬內(nèi)存的現(xiàn)代系統(tǒng)中,它還能夠加速我們程序的運行,減少程序停留在交換區(qū)中的幾率。

Valgrind由內(nèi)核(core)以及基于內(nèi)核的其他調(diào)試工具組成。其基于仿真方式對程序進行調(diào)試,它先于應用程序獲取實際處理器的控制權(quán),并在實際處理器的基礎(chǔ)上仿真一個虛擬處理器,并使應用程序運行于這個虛擬處理器之上,從而對應用程序的運行進行監(jiān)視。

b47cd34e-7dc6-11ee-939d-92fbcf53809c.png

應用程序并不知道該處理器是虛擬的還是實際的,已經(jīng)編譯成二進制代碼的應用程序并不用重新進行編譯,Valgrind 直接解釋二進制代碼使得應用程序基于它運行,從而能夠檢查內(nèi)存操作時可能出現(xiàn)的錯誤。

所以在Valgrind下運行的程序運行速度要慢得多,而且使用的內(nèi)存要多得多。因此,最好在性能好的機器上使用Valgrind,并且是在開發(fā)調(diào)試階段使用。

Valgrind安裝

Valgrind的安裝方式很簡單。我們首先查看一下我們的系統(tǒng)中有沒有Valgrind:

b495f824-7dc6-11ee-939d-92fbcf53809c.png

顯然,我們這里的系統(tǒng)中沒有Valgrind,按提示輸入如下命令安裝即可:

sudoaptinstallvalgrind

b4adf8a2-7dc6-11ee-939d-92fbcf53809c.png

另外,也可以通過下載源碼編譯、安裝。

源碼地址:

?

http://valgrind.org/

?

下載源碼的命令:

wgethttp://valgrind.org/downloads/valgrind-3.14.0.tar.bz2

Valgrind使用

準備一個有內(nèi)存泄漏、內(nèi)存越界問題的demo進行測試。為了方便,我們使用官方提供的一個經(jīng)典的測試demo:

「valgrind_test.c:」

#include

voidf(void)
{
int*x=malloc(10*sizeof(int));
x[10]=0;//problem1:heapblockoverrun
}//problem2:memoryleak--xnotfreed

intmain(void)
{
f();
return0;
}

這份代碼存在兩個問題:

使用超出malloc分配的內(nèi)存。

內(nèi)存泄漏。

下面一起來使用valgrind的Memcheck工具來檢測這份程序。

首先,我們使用-g編譯程序以包含調(diào)試信息,以便Memcheck的錯誤消息包含確切的行號。

gcc-gvalgrind_test.c-ovalgrind_test

使用valgrind檢測valgrind_test程序:

valgrind--leak-check=yes./valgrind_test

我們可以用--tool參數(shù)指明使用的工具,如:

--tool=memcheck

如果不明確設(shè)置--tool參數(shù),則valgrind的檢測工具默認使用的是Memcheck工具。--leak-check=yes選項打開詳細的內(nèi)存泄漏檢測器。

我們執(zhí)行檢測工具之后的結(jié)果如:

b4c080bc-7dc6-11ee-939d-92fbcf53809c.png

==7407==Memcheck,amemoryerrordetector
==7407==Copyright(C)2002-2017,andGNUGPL'd,byJulianSewardetal.
==7407==UsingValgrind-3.13.0andLibVEX;rerunwith-hforcopyrightinfo
==7407==Command:./valgrind_test
==7407==
==7407==Invalidwriteofsize4
==7407==at0x108668:f(valgrind_test.c:6)
==7407==by0x108679:main(valgrind_test.c:11)
==7407==Address0x522d068is0bytesafterablockofsize40alloc'd
==7407==at0x4C2FB0F:malloc(in/usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==7407==by0x10865B:f(valgrind_test.c:5)
==7407==by0x108679:main(valgrind_test.c:11)
==7407==
==7407==
==7407==HEAPSUMMARY:
==7407==inuseatexit:40bytesin1blocks
==7407==totalheapusage:1allocs,0frees,40bytesallocated
==7407==
==7407==40bytesin1blocksaredefinitelylostinlossrecord1of1
==7407==at0x4C2FB0F:malloc(in/usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==7407==by0x10865B:f(valgrind_test.c:5)
==7407==by0x108679:main(valgrind_test.c:11)
==7407==
==7407==LEAKSUMMARY:
==7407==definitelylost:40bytesin1blocks
==7407==indirectlylost:0bytesin0blocks
==7407==possiblylost:0bytesin0blocks
==7407==stillreachable:0bytesin0blocks
==7407==suppressed:0bytesin0blocks
==7407==
==7407==Forcountsofdetectedandsuppressederrors,rerunwith:-v
==7407==ERRORSUMMARY:2errorsfrom2contexts(suppressed:0from0)

輸出結(jié)果包含有很多信息,我們可以很容易查看到了關(guān)鍵的信息:

b4cf0a1a-7dc6-11ee-939d-92fbcf53809c.png

b4e65210-7dc6-11ee-939d-92fbcf53809c.png

其中,輸出信息告訴我們無效地寫入了4個字節(jié),并且提示了可能出現(xiàn)問題的代碼行數(shù)。堆棧跟蹤告訴我們調(diào)用了一次malloc申請內(nèi)存,但并沒有free,并且指出了在哪里分配了內(nèi)存。

另外,這里的7407表示的是進程ID號。

內(nèi)存泄漏有幾種類型,最重要的兩類是:

definitely lost(明確的泄漏)

possibly lost(可能的泄漏)

其中,明確的泄漏必須要進行修復。

以上就是關(guān)于valgrind最常用的Memcheck工具的簡單使用介紹,使用Memcheck工具有時候我們可以很清楚地檢測出程序存在的一些隱患。其它工具今后有用到的話再做分享,大家感興趣的話可以自行去研究學習。

Valgrind交叉編譯

1、下載valgrind源碼包:

wgethttp://valgrind.org/downloads/valgrind-3.14.0.tar.bz2

2、修改valgrind里的configure文件:

armv7 * ) 改成 armv7 * |arm)。

b4fdc4d6-7dc6-11ee-939d-92fbcf53809c.png

3、生成Makefile

./configure--host=arm-linux-gnueabihfCC=/home/LinuxZn/ToolChain/gcc-arm-linux-gnueabihf-6.2.1/bin/arm-linux-gnueabihf-gccCXX=/home/LinuxZn/ToolChain/gcc-arm-linux-gnueabihf-6.2.1/bin/arm-linux-gnueabihf-g++--prefix=$PWD/tmp

b514b3b2-7dc6-11ee-939d-92fbcf53809c.png

這個命令似乎很長,但并不難,只是加了幾個配置參數(shù)。這些配置參數(shù)怎么看?

我們可以輸入./configure --help命令來查看支持的配置:

b5300b9e-7dc6-11ee-939d-92fbcf53809c.png

下面我們依次來分析上面那個很長的命令:

--host=arm-linux-gnueabihf:表明了我們最終可執(zhí)行文件運行的環(huán)境。

CC=/home/LinuxZn/ToolChain/gcc-arm-linux-gnueabihf-6.2.1/bin/arm-linux-gnueabihf-gcc:這是指定我們的交叉編譯工具arm-linux-gnueabihf-gcc,這里直接給出絕對路徑。

CXX=/home/LinuxZn/ToolChain/gcc-arm-linux-gnueabihf-6.2.1/bin/arm-linux-gnueabihf-g++:這是指定我們的交叉編譯工具arm-linux-gnueabihf-g++,這里直接給出絕對路徑。

--prefix=$PWD/tmp:指定安裝的路徑。表明安裝路徑在當前路徑下的tmp文件夾中。

這時候已經(jīng)生成了Makefile文件:

b548af50-7dc6-11ee-939d-92fbcf53809c.png

編譯、安裝:

make
makeinstall

安裝完成后tmp文件夾下的內(nèi)容為:

b5566e1a-7dc6-11ee-939d-92fbcf53809c.png

這時候我們就可以把tmp整個文件夾拷到板子上使用了。tmp的大小為一百多兆,注意查看板子存儲空間夠不夠:

b57fe90c-7dc6-11ee-939d-92fbcf53809c.png

我們可以配置板子上的valgrind環(huán)境。如果僅是臨時使用,可以這么用:

tmp/bin/valgrind--tool=memcheck--leak-check=yes./valgrind_test

其中,tmp文件夾與與valgrind_test在同一路徑。這時候可能會報如下錯誤:

“valgrind:failedtostarttool‘memcheck’forplatform‘a(chǎn)rm-linux’:Nosuchfileordirectory”

這是因為valgrind需要依賴其動態(tài)庫,而沒有找到動態(tài)庫。因為是臨時測試,在valgrind_test路徑輸入如下命令進行設(shè)置:

exportVALGRIND_LIB="tmp/lib/valgrind"

這只是在當前開發(fā)板終端生效,下次重新進入開發(fā)板終端需要重新設(shè)置。

以上就是本次的分享。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5094

    文章

    19184

    瀏覽量

    307842
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11350

    瀏覽量

    210459
  • 源代碼
    +關(guān)注

    關(guān)注

    96

    文章

    2946

    瀏覽量

    66973
  • Valgrind
    +關(guān)注

    關(guān)注

    0

    文章

    9

    瀏覽量

    6827
  • 動態(tài)檢測
    +關(guān)注

    關(guān)注

    0

    文章

    2

    瀏覽量

    646

原文標題:嵌入式相關(guān)的動態(tài)檢測工具

文章出處:【微信號:良許Linux,微信公眾號:良許Linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    好用的u盤芯片檢測工具

    好用的u盤芯片檢測工具
    發(fā)表于 04-06 18:53

    促進ARM嵌入式發(fā)展的工具簡介

    促進ARM嵌入式發(fā)展的工具簡介
    發(fā)表于 07-31 21:55

    一種利用調(diào)試軟件Valgrind進行嵌入式應用程序錯誤查找的技術(shù)

    本文介紹了一種利用調(diào)試軟件Valgrind進行嵌入式應用程序錯誤查找的技術(shù),利用它可以高效、自動地查找出程序中的多種錯誤。首先介紹了嵌入式程序常見錯誤,接著研究了Valgrind的工作
    發(fā)表于 04-23 06:49

    嵌入式Linux開發(fā)簡介

    目錄1、嵌入式Linux開發(fā)簡介1.1嵌入式系統(tǒng)1.2嵌入式操作系統(tǒng)簡介1.2.1嵌入式操作系統(tǒng)
    發(fā)表于 12-14 08:24

    valgrind是怎樣去移植源碼的

    嵌入式內(nèi)存檢測工具-valgrind移植源碼較快)準備:解壓tar -jxvf valgrind-3.16.1.tar.bz2進入valgrind
    發(fā)表于 12-17 07:56

    硬件檢測工具下載

    硬件檢測工具下載 EVEREST(原名AIDA32)一個測試軟硬件系統(tǒng)信息的權(quán)威工具,它可以詳細的顯示出PC
    發(fā)表于 01-10 15:54 ?49次下載
    硬件<b class='flag-5'>檢測工具</b>下載

    基于Valgrind嵌入式應用程序調(diào)試技術(shù)

    本文介紹了一種利用調(diào)試軟件Valgrind 進行嵌入式應用程序錯誤查找的技術(shù),利用它可以高效、自動地查找出程序中的多種錯誤。首先介紹了嵌入式程序常見錯誤,接著研究了Valgrin
    發(fā)表于 12-18 15:36 ?17次下載

    GPS系統(tǒng)信息檢測工具

    導航GPS檢測工具 GPS系統(tǒng)信息檢測工具
    發(fā)表于 02-22 15:33 ?2次下載

    嵌入式系統(tǒng)原理簡介與入門

    嵌入式系統(tǒng)原理簡介與入門
    發(fā)表于 10-30 16:02 ?3次下載
    <b class='flag-5'>嵌入式</b>系統(tǒng)原理<b class='flag-5'>簡介</b>與入門

    嵌入式Linux操作系統(tǒng)安裝及相關(guān)工具使用

    本書全面介紹了嵌入式Linux系統(tǒng)開發(fā)過程中,從底層系統(tǒng)支持到上層GUI應用的方方面面,內(nèi)容涵蓋Linux操作系統(tǒng)的安裝及相關(guān)工具的使用、配置,嵌入式編程所需要的基礎(chǔ)知識(交叉編譯
    發(fā)表于 03-26 14:30 ?15次下載

    嵌入式Python簡介

    嵌入式Python簡介
    的頭像 發(fā)表于 12-28 09:51 ?2985次閱讀

    加密狗檢測工具

    技術(shù)員專用加密狗型號檢測工具
    發(fā)表于 03-23 09:13 ?1次下載

    valgrind檢測內(nèi)存問題的原理

    valgrind 是一個提供了一些 debug 和優(yōu)化的工具工具箱,可以使得你的程序減少內(nèi)存泄漏或者錯誤訪問。valgrind 默認使用 memcheck 去檢查內(nèi)存問題。memch
    的頭像 發(fā)表于 05-23 09:30 ?2558次閱讀
    <b class='flag-5'>valgrind</b><b class='flag-5'>檢測</b>內(nèi)存問題的原理

    加密狗檢測工具

    加密狗檢測工具免費下載。
    發(fā)表于 05-29 09:19 ?1次下載

    電路板檢測工具都有什么

    在電子制造業(yè)中,電路板檢測工具是至關(guān)重要的。它們用于確保電路板的質(zhì)量和性能,以滿足設(shè)計要求和行業(yè)標準。本文將詳細介紹各種電路板檢測工具,包括它們的功能、優(yōu)勢和應用場景。 一、電路板檢測工具的分類
    的頭像 發(fā)表于 05-29 14:20 ?3345次閱讀