• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Valgrind手冊翻譯

            名字:
                   valgrind是一個(gè)調(diào)試和剖析的程序工具集。

            概要用法:
                   valgrind [[valgrind] [options]] [your-program] [[your-program-options]]

            概述:
                   Valgrind是一個(gè)Linux下靈活的調(diào)試和剖析可執(zhí)行工具。它由在軟件層提供綜合的
                   CPU內(nèi)核,和一系列調(diào)試、剖析的工具組成。架構(gòu)是模塊化的,所以可以在不破壞現(xiàn)
                   有的結(jié)構(gòu)的基礎(chǔ)上很容易的創(chuàng)建出新的工具來。
                   這本手冊包括了基本的用法和選項(xiàng)。更多幫助理解的信息,請查看您系統(tǒng)的HTML
                   文檔:
                     /usr/share/doc/valgrind/html/index.html
                   或者在線文檔:
                     http://www.valgrind.org/docs/manual/index.html.

            用法:
                   一般像下面這樣調(diào)用Valgrind:
                       valgrind program args

                   這樣將在Valgrind使用Memcheck運(yùn)行程序program(帶有參數(shù)args)。內(nèi)存檢查
                   執(zhí)行一系列的內(nèi)存檢查功能,包括檢測訪問未初始化的內(nèi)存,已經(jīng)分配內(nèi)存的錯(cuò)誤
                   使用(兩次釋放,釋放后再訪問,等等)并檢查內(nèi)存泄漏。

                   可用--tool指定使用其它工具:
                       valgrind --tool=toolname program args

                   可使用的工具如下:
                   o cachegrind是一個(gè)緩沖模擬器。它可以用來標(biāo)出你的程序每一行執(zhí)行的指令
                      數(shù)和導(dǎo)致的緩沖不命中數(shù)。

                   o callgrind在cachegrind基礎(chǔ)上添加調(diào)用追蹤。它可以用來得到調(diào)用的次數(shù)
                      以及每次函數(shù)調(diào)用的開銷。作為對cachegrind的補(bǔ)充,callgrind可以分別
                      標(biāo)注各個(gè)線程,以及程序反匯編輸出的每條指令的執(zhí)行次數(shù)以及緩存未命中
                      數(shù)。

                   o helgrind能夠發(fā)現(xiàn)程序中潛在的條件競爭。

                   o lackey是一個(gè)示例程序,以其為模版可以創(chuàng)建你自己的工具。在程序結(jié)束后,
                   它打印出一些基本的關(guān)于程序執(zhí)行統(tǒng)計(jì)數(shù)據(jù)。

                   o massif是一個(gè)堆剖析器,它測量你的程序使用了多少堆內(nèi)存。

                   o memcheck是一個(gè)細(xì)粒度的的內(nèi)存檢查器。

                   o none沒有任何功能。它它一般用于Valgrind的調(diào)試和基準(zhǔn)測試。

            基本選項(xiàng):
                   這些選項(xiàng)對所有工具都有效。

                   -h --help
                          顯示所有選項(xiàng)的幫助,包括內(nèi)核和選定的工具兩者。

                   --help-debug
                          和--help相同,并且還能顯示通常只有Valgrind的開發(fā)人員使用的調(diào)試
                          選項(xiàng)。

                   --version
                          顯示Valgrind內(nèi)核的版本號(hào)。工具可以有他們自已的版本號(hào)。這是一種
                          保證工具只在它們可以運(yùn)行的內(nèi)核上工作的一種設(shè)置。這樣可以減少在
                          工具和內(nèi)核之間版本兼容性導(dǎo)致奇怪問題的概率。

                   -q --quiet
                          安靜的運(yùn)行,只打印錯(cuò)誤信息。在進(jìn)行回歸測試或者有其它的自動(dòng)化測
                          試機(jī)制時(shí)會(huì)非常有用。

                   -v --verbose
                          顯示詳細(xì)信息。在各個(gè)方面顯示你的程序的額外信息,例如:共享對象
                          加載,使用的重置,執(zhí)行引擎和工具的進(jìn)程,異常行為的警告信息。重
                          復(fù)這個(gè)標(biāo)記可以增加詳細(xì)的級別。

                   -d     調(diào)試Valgrind自身發(fā)出的信息。通常只有Valgrind開發(fā)人員對此感興趣。
                          重復(fù)這個(gè)標(biāo)記可以產(chǎn)生更詳細(xì)的輸出。如果你希望發(fā)送一個(gè)bug報(bào)告,通
                          過-v -v -d -d生成的輸出會(huì)使你的報(bào)告更加有效。

                   --tool=<toolname> [default: memcheck]
                          運(yùn)行toolname指定的Valgrind,例如,Memcheck, Addrcheck, Cachegrind,
                          等等。

                   --trace-children=<yes|no> [default: no]
                          當(dāng)這個(gè)選項(xiàng)打開時(shí),Valgrind會(huì)跟蹤到子進(jìn)程中。這經(jīng)常會(huì)導(dǎo)致困惑,而
                          且通常不是你所期望的,所以默認(rèn)這個(gè)選項(xiàng)是關(guān)閉的。

                   --track-fds=<yes|no> [default: no]
                          當(dāng)這個(gè)選項(xiàng)打開時(shí),Valgrind會(huì)在退出時(shí)打印一個(gè)打開文件描述符的列表。
                          每個(gè)文件描述符都會(huì)打印出一個(gè)文件是在哪里打開的棧回溯,和任何與此
                          文件描述符相關(guān)的詳細(xì)信息比如文件名或socket信息。


                   --time-stamp=<yes|no> [default: no]
                          當(dāng)這個(gè)選項(xiàng)打開時(shí),每條信息之前都有一個(gè)從程序開始消逝的時(shí)間,用天,
                          小時(shí),分鐘,秒和毫秒表示。

                   --log-fd=<number> [default: 2, stderr]
                          指定Valgrind把它所有的消息都輸出到一個(gè)指定的文件描述符中去。默認(rèn)值
                          2, 是標(biāo)準(zhǔn)錯(cuò)誤輸出(stderr)。注意這可能會(huì)干擾到客戶端自身對stderr
                          的使用, Valgrind的輸出與客戶程序的輸出將穿插在一起輸出到stderr。

                   --log-file=<filename>
                          指定Valgrind把它所有的信息輸出到指定的文件中。實(shí)際上,被創(chuàng)建文件的
                          文件名是由filename、'.'和進(jìn)程號(hào)連接起來的(即<filename>.<pid>),
                          從而每個(gè)進(jìn)程創(chuàng)建不同的文件。

                   --log-file-exactly=<filename>
                          類似于--log-file,但是后綴".pid"不會(huì)被添加。如果設(shè)置了這個(gè)選項(xiàng),
                          使用Valgrind跟蹤多個(gè)進(jìn)程,可能會(huì)得到一個(gè)亂七八糟的文件。            

                   --log-file-qualifier=<VAR>
                          當(dāng)和--log-file一起使用時(shí),日志文件名將通過環(huán)境變量$VAR來篩選。這
                          對于MPI程序是有益的。更多的細(xì)節(jié),查看手冊2.3節(jié) "注解"。

                   --log-socket=<ip-address:port-number>
                          指定Valgrind輸出所有的消息到指定的IP,指定的端口。當(dāng)使用1500端口
                          時(shí),端口有可能被忽略。如果不能建立一個(gè)到指定端口的連接,Valgrind
                          將輸出寫到標(biāo)準(zhǔn)錯(cuò)誤(stderr)。這個(gè)選項(xiàng)經(jīng)常和一個(gè)Valgrind監(jiān)聽程序一
                          起使用。更多的細(xì)節(jié),查看手冊2.3節(jié) "注解"。


            錯(cuò)誤相關(guān)選項(xiàng):
                   這些選項(xiàng)適用于所有產(chǎn)生錯(cuò)誤的工具,比如Memcheck, 但是Cachegrind不行。

                   --xml=<yes|no> [default: no]
                          當(dāng)這個(gè)選項(xiàng)打開時(shí),輸出將是XML格式。這是為了使用Valgrind的輸出做為
                          輸入的工具,例如GUI前端更加容易些。目前這個(gè)選項(xiàng)只在Memcheck時(shí)生效。

                   --xml-user-comment=<string>
                          在XML開頭 附加用戶注釋,僅在指定了--xml=yes時(shí)生效,否則忽略。

                   --demangle=<yes|no> [default: yes]
                          打開/關(guān)閉C++的名字自動(dòng)解碼。默認(rèn)打開。當(dāng)打開時(shí),Valgrind將嘗試著把
                          編碼過的C++名字自動(dòng)轉(zhuǎn)回初始狀態(tài)。這個(gè)解碼器可以處理g++版本為2.X,
                          3.X或4.X生成的符號(hào)。

                          一個(gè)關(guān)于名字編碼解碼重要的事實(shí)是,禁止文件中的解碼函數(shù)名仍然使用
                          他們未解碼的形式。Valgrind在搜尋可用的禁止條目時(shí)不對函數(shù)名解碼,
                          因?yàn)檫@將使禁止文件內(nèi)容依賴于Valgrind的名字解碼機(jī)制狀態(tài), 會(huì)使速度
                          變慢,且無意義。

                   --num-callers=<number> [default: 12]
                          默認(rèn)情況下,Valgrind顯示12層函數(shù)調(diào)用的函數(shù)名有助于確定程序的位置。
                          可以通過這個(gè)選項(xiàng)來改變這個(gè)數(shù)字。這樣有助在嵌套調(diào)用的層次很深時(shí)確定
                          程序的位置。注意錯(cuò)誤信息通常只回溯到最頂上的4個(gè)函數(shù)。(當(dāng)前函數(shù),和
                          它的3個(gè)調(diào)用者的位置)。所以這并不影響報(bào)告的錯(cuò)誤總數(shù)。

                          這個(gè)值的最大值是50。注意高的設(shè)置會(huì)使Valgrind運(yùn)行得慢,并且使用更多
                          的內(nèi)存,但是在嵌套調(diào)用層次比較高的程序中非常實(shí)用。

                   --error-limit=<yes|no> [default: yes]
                          當(dāng)這個(gè)選項(xiàng)打開時(shí),在總量達(dá)到10,000,000,或者1,000個(gè)不同的錯(cuò)誤,
                          Valgrind停止報(bào)告錯(cuò)誤。這是為了避免錯(cuò)誤跟蹤機(jī)制在錯(cuò)誤很多的程序
                          下變成一個(gè)巨大的性能負(fù)擔(dān)。

                   --error-exitcode=<number> [default: 0]
                          指定如果Valgrind在運(yùn)行過程中報(bào)告任何錯(cuò)誤時(shí)的退出返回值,有兩種情
                          況;當(dāng)設(shè)置為默認(rèn)值(零)時(shí),Valgrind返回的值將是它模擬運(yùn)行的程序的
                          返回值。當(dāng)設(shè)置為非零值時(shí),如果Valgrind發(fā)現(xiàn)任何錯(cuò)誤時(shí)則返回這個(gè)值。
                          在Valgrind做為一個(gè)測試工具套件的部分使用時(shí)這將非常有用,因?yàn)槭箿y
                          試工具套件只檢查Valgrind返回值就可以知道哪些測試用例Valgrind報(bào)告
                          了錯(cuò)誤。

                   --show-below-main=<yes|no> [default: no]
                          默認(rèn)地,錯(cuò)誤時(shí)的棧回溯不顯示main()之下的任何函數(shù)(或者類似的函數(shù)像
                          glibc的__libc_start_main(),如果main()沒有出現(xiàn)在棧回溯中);這些大
                          部分都是令人厭倦的C庫函數(shù)。如果打開這個(gè)選項(xiàng),在main()之下的函數(shù)也
                          將會(huì)顯示。

                   --suppressions=<filename> [default: $PREFIX/lib/valgrind/default.supp]
                          指定一個(gè)額外的文件讀取不需要理會(huì)的錯(cuò)誤;你可以根據(jù)需要使用任意多
                          的額外文件。

                   --gen-suppressions=<yes|no|all> [default: no]
                          當(dāng)設(shè)置為yes時(shí),Valgrind將會(huì)在每個(gè)錯(cuò)誤顯示之后自動(dòng)暫停并且打印下
                          面這一行:
                              ---- Print suppression ? --- [Return/N/n/Y/y/C/c] ----


                          這個(gè)提示的行為和--db-attach選項(xiàng)(見下面)相同。

                          如果選擇是,Valgrind會(huì)打印出一個(gè)錯(cuò)誤的禁止條目,你可以把它剪切然后
                          粘帖到一個(gè)文件,如果不希望在將來再看到這個(gè)錯(cuò)誤信息。

                          當(dāng)設(shè)置為all時(shí),Valgrind會(huì)對每一個(gè)錯(cuò)誤打印一條禁止條目,而不向用戶
                          詢問。

                          這個(gè)選項(xiàng)對C++程序非常有用,它打印出編譯器調(diào)整過的名字。

                          注意打印出來的禁止條目是盡可能的特定的。如果需要把類似的條目歸納
                          起來,比如在函數(shù)名中添加通配符。并且,有些時(shí)候兩個(gè)不同的錯(cuò)誤也會(huì)
                          產(chǎn)生同樣的禁止條目,這時(shí)Valgrind就會(huì)輸出禁止條目不止一次,但是在
                          禁止條目的文件中只需要一份拷貝(但是如果多于一份也不會(huì)引起什么問
                          題)。并且,禁止條目的名字像<在這兒輸入一個(gè)禁止條目的名字>;名字并
                          不是很重要,它只是和-v選項(xiàng)一起使用打印出所有使用的禁止條目記錄。

                   --db-attach=<yes|no> [default: no]
                          當(dāng)這個(gè)選項(xiàng)打開時(shí),Valgrind將會(huì)在每次打印錯(cuò)誤時(shí)暫停并打出如下
                          一行:

                              ---- Attach to debugger ? --- [Return/N/n/Y/y/C/c] ----

                          按下回車,或者N、回車,n、回車,Valgrind不會(huì)對這個(gè)錯(cuò)誤啟動(dòng)調(diào)試器。

                          按下Y、回車,或者y、回車,Valgrind會(huì)啟動(dòng)調(diào)試器并設(shè)定在程序運(yùn)行的
                          這個(gè)點(diǎn)。當(dāng)調(diào)試結(jié)束時(shí),退出,程序會(huì)繼續(xù)運(yùn)行。在調(diào)試器內(nèi)部嘗試?yán)^續(xù)
                          運(yùn)行程序,將不會(huì)生效。

                          按下C、回車,或者c、回車,Valgrind不會(huì)啟動(dòng)一個(gè)調(diào)試器,并且不會(huì)再
                          次詢問。

                          注意:--db-attach=yes與--trace-children=yes有沖突。你不能同時(shí)使用
                          它們。Valgrind在這種情況下不能啟動(dòng)。

                          2002.05: 這是一個(gè)歷史的遺留物,如果這個(gè)問題影響到你,請發(fā)送郵件并
                          投訴這個(gè)問題。

                          2002.11:如果你發(fā)送輸出到日志文件或者到網(wǎng)絡(luò)端口,我猜這不會(huì)讓你有
                          任何感覺。不須理會(huì)。

                   --db-command=<command> [default: gdb -nw %f %p]
                          通過--db-attach指定如何使用調(diào)試器。默認(rèn)的調(diào)試器是gdb.默認(rèn)的選項(xiàng)
                          是一個(gè)運(yùn)行時(shí)擴(kuò)展Valgrind的模板。 %f會(huì)用可執(zhí)行文件的文件名替換,
                          %p會(huì)被可執(zhí)行文件的進(jìn)程ID替換。

                          這指定了Valgrind將怎樣調(diào)用調(diào)試器。默認(rèn)選項(xiàng)不會(huì)因?yàn)樵跇?gòu)造時(shí)是否檢
                          測到了GDB而改變,通常是/usr/bin/gdb.使用這個(gè)命令,你可以指定一些
                          調(diào)用其它的調(diào)試器來替換。

                          給出的這個(gè)命令字串可以包括一個(gè)或多個(gè)%p %f擴(kuò)展。每一個(gè)%p實(shí)例都被
                          解釋成將調(diào)試的進(jìn)程的PID,每一個(gè)%f實(shí)例都被解釋成要調(diào)試的進(jìn)程的可
                          執(zhí)行文件路徑。            

                   --input-fd=<number> [default: 0, stdin]
                          使用--db-attach=yes和--gen-suppressions=yes選項(xiàng),在發(fā)現(xiàn)錯(cuò)誤時(shí),
                          Valgrind會(huì)停下來去讀取鍵盤輸入。默認(rèn)地,從標(biāo)準(zhǔn)輸入讀取,所以關(guān)閉
                          了標(biāo)準(zhǔn)輸入的程序會(huì)有問題。這個(gè)選項(xiàng)允許你指定一個(gè)文件描述符來替代
                          標(biāo)準(zhǔn)輸入讀取。

                   --max-stackframe=<number> [default: 2000000]
                          棧的最大值。如果棧指針的偏移超過這個(gè)數(shù)量,Valgrind則會(huì)認(rèn)為程序是
                          切換到了另外一個(gè)棧執(zhí)行。

                          如果在程序中有大量的棧分配的數(shù)組,你可能需要使用這個(gè)選項(xiàng)。
                          valgrind保持對程序棧指針的追蹤。如果棧指針的偏移超過了這個(gè)數(shù)量,
                          Valgrind假定你的程序切換到了另外一個(gè)棧,并且Memcheck行為與棧指
                          針的偏移沒有超出這個(gè)數(shù)量將會(huì)不同。通常這種機(jī)制運(yùn)轉(zhuǎn)得很好。然而,
                          如果你的程序在棧上申請了大的結(jié)構(gòu),這種機(jī)制將會(huì)表現(xiàn)得愚蠢,并且
                          Memcheck將會(huì)報(bào)告大量的非法棧內(nèi)存訪問。這個(gè)選項(xiàng)允許把這個(gè)閥值設(shè)置
                          為其它值。

                          應(yīng)該只在Valgrind的調(diào)試輸出中顯示需要這么做時(shí)才使用這個(gè)選項(xiàng)。在這
                          種情況下,它會(huì)告訴你應(yīng)該指定的新的閥值。

                          普遍地,在棧中分配大塊的內(nèi)存是一個(gè)壞的主意。因?yàn)檫@很容易用光你的
                          棧空間,尤其是在內(nèi)存受限的系統(tǒng)或者支持大量小堆棧的線程的系統(tǒng)上,
                          因?yàn)镸emcheck執(zhí)行的錯(cuò)誤檢查,對于堆上的數(shù)據(jù)比對棧上的數(shù)據(jù)要高效
                          很多。如果你使用這個(gè)選項(xiàng),你可能希望考慮重寫代碼在堆上分配內(nèi)存
                          而不是在棧上分配。

            MALLOC()相關(guān)的選項(xiàng):
                   對于使用自有版本的malloc() (例如Memcheck和massif),下面的選項(xiàng)可以使用。
                   --alignment=<number> [default: 8]
                          默認(rèn)Valgrind的malloc(),realloc(), 等等,是8字節(jié)對齊地址的。這
                          是大部分處理器的標(biāo)準(zhǔn)。然而,一些程序可能假定malloc()等總是返回
                          16字節(jié)或更多對齊的內(nèi)存。提供的數(shù)值必須在8和4096區(qū)間之內(nèi),并且
                          必須是2的冪數(shù)。

            非通用選項(xiàng):
                   這些選項(xiàng)可以用于所有的工具,它們影響Valgrind core的幾個(gè)特性。大部分人不
                   會(huì)用到這些選項(xiàng)。

                   --run-libc-freeres=<yes|no> [default: yes]
                   GNU C庫(libc.so),所有程序共用的,可能會(huì)分配一部分內(nèi)存自已用。通
                          常在程序退出時(shí)釋放內(nèi)存并不麻煩 -- 這里沒什么問題,因?yàn)長inux內(nèi)核在
                          一個(gè)進(jìn)程退出時(shí)會(huì)回收進(jìn)程全部的資源,所以這只是會(huì)造成速度慢。
                         
                          glibc的作者認(rèn)識(shí)到這樣會(huì)導(dǎo)致內(nèi)存檢查器,像Valgrind,在退出時(shí)檢查
                          內(nèi)存錯(cuò)誤的報(bào)告glibc的內(nèi)存泄漏問題,為了避免這個(gè)問題,他們提供了
                          一個(gè)__libc_freeres()例程特別用來讓glibc釋放分配的所有內(nèi)存。
                          因此Memcheck在退出時(shí)嘗試著去運(yùn)行__libc_freeres()。

                          不幸的是,在glibc的一些版本中,__libc_freeres是有bug會(huì)導(dǎo)致段錯(cuò)誤的。
                          這在Red Hat 7.1上有特別聲明。所以,提供這個(gè)選項(xiàng)來決定是否運(yùn)行
                          __libc_freeres。如果你的程序看起來在Valgrind上運(yùn)行得很好,但是在
                          退出時(shí)發(fā)生段錯(cuò)誤,你可能需要指定--run-libc-freeres=no來修正,這將
                          可能錯(cuò)誤的報(bào)告libc.so的內(nèi)存泄漏。

                   --sim-hints=hint1,hint2,...
                          傳遞雜湊的提示給Valgrind,輕微的修改模擬行為的非標(biāo)準(zhǔn)或危險(xiǎn)方式,
                          可能有助于模擬奇怪的特性。默認(rèn)沒有提示打開。小心使用!目前已知
                          的提示有:
                          o lax-ioctls: 對ioctl的處理非常不嚴(yán)格,唯一的假定是大小是正確的。
                          不需要在寫時(shí)緩沖區(qū)完全的初始化。沒有這個(gè),用大量的奇怪的ioctl
                          命令來使用一些設(shè)備驅(qū)動(dòng)將會(huì)非常煩人。
                          o enable-inner:打開某些特殊的效果,當(dāng)運(yùn)行的程序是Valgrind自身時(shí)。

                   --kernel-variant=variant1,variant2,...
                          處理系統(tǒng)調(diào)用和ioctls在這個(gè)平臺(tái)的默認(rèn)核心上產(chǎn)生不同的變量。這有助
                          于運(yùn)行在改進(jìn)過的內(nèi)核或者支持非標(biāo)準(zhǔn)的ioctls上。小心使用。如果你不
                          理解這個(gè)選項(xiàng)做的是什么那你幾乎不需要它。已經(jīng)知道的變量有:
                          o bproc: 支持X86平臺(tái)上的sys_broc系統(tǒng)調(diào)用。這是為了運(yùn)行在BProc,
                          它是標(biāo)準(zhǔn)Linux的一個(gè)變種,有時(shí)用來構(gòu)建集群。

                   --show-emwarns=<yes|no> [default: no]
                          當(dāng)這個(gè)選項(xiàng)打開時(shí),Valgrind在一些特定的情況下將對CPU仿真產(chǎn)生警告。
                          通常這些都是不引人注意的。

                   --smc-check=<none|stack|all> [default: stack]
                          這個(gè)選項(xiàng)控制Valgrind對自我修改的代碼的檢測。Valgrind可以不做檢測,
                          可以檢測棧中自我修改的代碼,或者任意地方檢測自我修改的代碼。注意
                          默認(rèn)選項(xiàng)是捕捉絕大多數(shù)情況,到目前我們了解的情況為止。使用all選項(xiàng)
                          時(shí)會(huì)極大的降低速度。(但是用none選項(xiàng)運(yùn)行極少影響速度,因?yàn)閷Υ蠖鄶?shù)
                          程序,非常少的代碼被添加到棧中)


            調(diào)試VALGRIND選項(xiàng):
                   還有一些選項(xiàng)是用來調(diào)試Valgrind自身的。在運(yùn)行一般的東西時(shí)不應(yīng)該需要的。
                   如果你希望看到選項(xiàng)列表,使用--help-debug選項(xiàng)。

            內(nèi)存檢查選項(xiàng):
                   --leak-check=<no|summary|yes|full> [default: summary]
                          當(dāng)這個(gè)選項(xiàng)打開時(shí),當(dāng)客戶程序結(jié)束時(shí)查找內(nèi)存泄漏。內(nèi)存泄漏意味著
                          有用malloc分配內(nèi)存塊,但是沒有用free釋放,而且沒有指針指向這塊
                          內(nèi)存。這樣的內(nèi)存塊永遠(yuǎn)不能被程序釋放,因?yàn)闆]有指針指向它們。如
                          果設(shè)置為summary,Valgrind會(huì)報(bào)告有多少內(nèi)存泄漏發(fā)生了。如果設(shè)置為
                          full或yes,Valgrind給出每一個(gè)獨(dú)立的泄漏的詳細(xì)信息。

                   --show-reachable=<yes|no> [default: no]
                          當(dāng)這個(gè)選項(xiàng)關(guān)閉時(shí),內(nèi)存泄漏檢測器只顯示沒有指針指向的內(nèi)存塊,或
                          者只能找到指向塊中間的指針。當(dāng)這個(gè)選項(xiàng)打開時(shí),內(nèi)存泄漏檢測器還
                          報(bào)告有指針指向的內(nèi)存塊。這些塊是最有可能出現(xiàn)內(nèi)存泄漏的地方。你
                          的程序可能,至少在原則上,應(yīng)該在退出前釋放這些內(nèi)存塊。這些有指
                          針指向的內(nèi)存塊和沒有指針指向的內(nèi)存塊,或者只有內(nèi)部指針指向的塊,
                          都可能產(chǎn)生內(nèi)存泄漏,因?yàn)閷?shí)際上沒有一個(gè)指向塊起始的指針可以拿來釋
                          放,即使你想去釋放它。

                   --leak-resolution=<low|med|high> [default: low]
                          在做內(nèi)存泄漏檢查時(shí),確定memcheck將怎么樣考慮不同的棧是相同的情況。
                          當(dāng)設(shè)置為low時(shí),只需要前兩層棧匹配就認(rèn)為是相同的情況;當(dāng)設(shè)置為med,
                          必須要四層棧匹配,當(dāng)設(shè)置為high時(shí),所有層次的棧都必須匹配。
                         
                          對于hardcore內(nèi)存泄漏檢查,你很可能需要使用--leak-resolution=high和
                          --num-callers=40或者更大的數(shù)字。注意這將產(chǎn)生巨量的信息,這就是為什
                          么默認(rèn)選項(xiàng)是四個(gè)調(diào)用者匹配和低分辨率的匹配。
                          注意--leak-resolution= 設(shè)置并不影響memcheck查找內(nèi)存泄漏的能力。它
                          只是改變了結(jié)果如何輸出。

                   --freelist-vol=<number> [default: 5000000]
                          當(dāng)客戶程序使用free(C中)或者delete(C++)釋放內(nèi)存時(shí),這些內(nèi)存并不是
                          馬上就可以用來再分配的。這些內(nèi)存將被標(biāo)記為不可訪問的,并被放到一
                          個(gè)已釋放內(nèi)存的隊(duì)列中。這樣做的目的是,使釋放的內(nèi)存再次被利用的點(diǎn)
                          盡可能的晚。這有利于memcheck在內(nèi)存塊釋放后這段重要的時(shí)間檢查對塊
                          不合法的訪問。

                          這個(gè)選項(xiàng)指定了隊(duì)列所能容納的內(nèi)存總?cè)萘浚宰止?jié)為單位。默認(rèn)的值是
                          5000000字節(jié)。增大這個(gè)數(shù)目會(huì)增加memcheck使用的內(nèi)存,但同時(shí)也增加了
                          對已釋放內(nèi)存的非法使用的檢測概率。

                   --workaround-gcc296-bugs=<yes|no> [default: no]
                          當(dāng)這個(gè)選項(xiàng)打開時(shí),假定讀寫棧指針以下的一小段距離是gcc 2.96的bug,
                          并且不報(bào)告為錯(cuò)誤。距離默認(rèn)為256字節(jié)。注意gcc 2.96是一些比較老的
                          Linux發(fā)行版(RedHat 7.X)的默認(rèn)編譯器,所以你可能需要使用這個(gè)選項(xiàng)。
                          如果不是必要請不要使用這個(gè)選項(xiàng),它可能會(huì)使一些真正的錯(cuò)誤溜掉。
                          一個(gè)更好的解決辦法是使用較新的,修正了這個(gè)bug的gcc/g++版本。

                   --partial-loads-ok=<yes|no> [default: no]
                          控制memcheck如何處理從地址讀取時(shí)字長度,字對齊,因此哪些字節(jié)是可
                          以尋址的,哪些是不可以尋址的。當(dāng)設(shè)置為yes是,這樣的讀取并不拋出
                          一個(gè)尋址錯(cuò)誤。而是從非法地址讀取的V字節(jié)顯示為未定義,訪問
                          合法地址仍然是像平常一樣映射到內(nèi)存。

                          設(shè)置為no時(shí),從部分錯(cuò)誤的地址讀取與從完全錯(cuò)誤的地址讀取同樣處理:
                          拋出一個(gè)非法地址錯(cuò)誤,結(jié)果的V字節(jié)顯示為合法數(shù)據(jù)。

                          注意這種代碼行為是違背ISO C/C++標(biāo)準(zhǔn),應(yīng)該被認(rèn)為是有問題的。如果可
                          能,這種代碼應(yīng)該修正。這個(gè)選項(xiàng)應(yīng)該只是做為一個(gè)最后考慮的方法。

                   --undef-value-errors=<yes|no> [default: yes]
                          控制memcheck是否檢查未定義值的危險(xiǎn)使用。當(dāng)設(shè)為yes時(shí),Memcheck的行
                          為像Addrcheck, 一個(gè)輕量級的內(nèi)存檢查工具,是Valgrind的一個(gè)部分,它
                          并不檢查未定義值的錯(cuò)誤。使用這個(gè)選項(xiàng),如果你不希望看到未定義值錯(cuò)誤。


            CACHEGRIND選項(xiàng):
                   手動(dòng)指定I1/D1/L2緩沖配置,大小是用字節(jié)表示的。這三個(gè)必須用逗號(hào)隔開,中間
                   沒有空格,例如:
                       valgrind --tool=cachegrind --I1=65535,2,64

                   你可以指定一個(gè),兩個(gè)或三個(gè)I1/D1/L2緩沖。如果沒有手動(dòng)指定,每個(gè)級別使用
                   普通方式(通過CPUID指令得到緩沖配置,如果失敗,使用默認(rèn)值)得到的配置。

                   --I1=<size>,<associativity>,<line size>
                          指定第一級指令緩沖的大小,關(guān)聯(lián)度和行大小。

                   --D1=<size>,<associativity>,<line size>
                          指定第一級數(shù)據(jù)緩沖的大小,關(guān)聯(lián)度和行大小。

                   --L2=<size>,<associativity>,<line size>
                          指定第二級緩沖的大小,關(guān)聯(lián)度和行大小。

            CALLGRIND選項(xiàng):
                   --heap=<yes|no> [default: yes]
                          當(dāng)這個(gè)選項(xiàng)打開時(shí),詳細(xì)的追蹤堆的使用情況。關(guān)閉這個(gè)選項(xiàng)時(shí),
                          massif.pid.txt或massif.pid.html將會(huì)非常的簡短。

                   --heap-admin=<number> [default: 8]
                          每個(gè)塊使用的管理字節(jié)數(shù)。這只能使用一個(gè)平均的估計(jì)值,因?yàn)樗赡茏兓?br>              glibc使用的分配器每塊需要4~15字節(jié),依賴于各方面的因素。管理已經(jīng)釋放
                          的塊也需要空間,盡管massif不計(jì)算這些。            

                   --stacks=<yes|no> [default: yes]
                          當(dāng)打開時(shí),在剖析信息中包含棧信息。多線程的程序可能有多個(gè)棧。

                   --depth=<number> [default: 3]
                          詳細(xì)的堆信息中調(diào)用過程的深度。增加這個(gè)值可以給出更多的信息,但是
                          massif會(huì)更使這個(gè)程序運(yùn)行得慢,使用更多的內(nèi)存,并且產(chǎn)生一個(gè)大的
                          massif.pid.txt或者massif.pid.hp文件。

                   --alloc-fn=<name>
                          指定一個(gè)分配內(nèi)存的函數(shù)。這對于使用malloc()的包裝函數(shù)是有用的,可以
                          用它來填充原來無效的上下文信息。(這些函數(shù)會(huì)給出無用的上下文信息,
                          并在圖中給出無意義的區(qū)域)。指定的函數(shù)在上下文中被忽略,例如,像對
                          malloc()一樣處理。這個(gè)選項(xiàng)可以在命令行中重復(fù)多次,指定多個(gè)函數(shù)。

                   --format=<text|html> [default: text]
                          產(chǎn)生text或者HTML格式的詳細(xì)堆信息,文件的后綴名使用.txt或者.html。

            HELGRIND選項(xiàng):
                   --private-stacks=<yes|no> [default: no]
                          假定線程棧是私有的。

                   --show-last-access=<yes|some|no> [default: no]
                          顯示最后一次字訪問出錯(cuò)的位置。

            LACKEY選項(xiàng):
                   --fnname=<name> [default: _dl_runtime_resolve()]
                          對<name>函數(shù)計(jì)數(shù)。

                   --detailed-counts=<no|yes> [default: no]
                          對讀取,存儲(chǔ)和alu操作計(jì)數(shù)。

            參考:
                    /usr/share/doc/valgrind/html/index.html, 和/或者
                   http://www.valgrind.org/docs/manual/index.html.

            作者信息:
                   Julian Seward <jseward@acm.org>是Valgrind的初始作者,在
                   /usr/share/doc/valgrind/AUTHORS還有其他的貢獻(xiàn)者的信息。
                   這份手冊由Andres Roldan <aroldan@debian.org>為Debian工程編寫,但是可以在
                   任何其它發(fā)行版上使用。
                  
                   2.4.0版本的更新,重排,和擴(kuò)展由Robert Walsh <rjwalsh@durables.org>,
                   后來由其它的Valgrind開發(fā)者完成。

                   本手冊的翻譯工作由鄧杰和莊禮深同學(xué)共同完成。

            posted on 2008-06-04 09:40 Wealth 閱讀(3790) 評論(0)  編輯 收藏 引用 所屬分類: Translation

            <2025年5月>
            27282930123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567

            導(dǎo)航

            統(tǒng)計(jì)

            常用鏈接

            留言簿

            隨筆分類(8)

            隨筆檔案(8)

            文章分類

            Around Web

            CoBlog

            Develop Usage Link

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            亚洲AV无码久久精品蜜桃| 狠狠色综合久久久久尤物| 久久伊人中文无码| 99国产欧美久久久精品蜜芽| 欧美亚洲国产精品久久高清 | 久久99国产精品久久99| 亚洲人成伊人成综合网久久久| 久久se这里只有精品| 色综合久久中文综合网| 国产高潮国产高潮久久久91 | 精品久久久久久久中文字幕| 97精品伊人久久久大香线蕉| 国产成人精品久久亚洲高清不卡| 久久亚洲国产午夜精品理论片| 亚洲狠狠久久综合一区77777| 狠狠精品久久久无码中文字幕 | 一本大道久久东京热无码AV| 精品久久久一二三区| 午夜不卡久久精品无码免费| 精品999久久久久久中文字幕| 99久久夜色精品国产网站| 久久久久久久综合日本| 久久精品国产久精国产果冻传媒| 亚洲AV无码1区2区久久| 69久久精品无码一区二区| 99久久精品免费看国产一区二区三区 | 99久久无色码中文字幕| 91精品国产色综合久久| 久久偷看各类wc女厕嘘嘘| 久久99国产精品99久久| 四虎影视久久久免费| 久久久久亚洲AV片无码下载蜜桃 | 国产精品久久久久免费a∨| 久久久久久久亚洲Av无码| 久久人妻少妇嫩草AV蜜桃| 婷婷综合久久中文字幕蜜桃三电影| 久久精品成人国产午夜| 综合久久一区二区三区| 久久99精品久久久久久| 国产香蕉久久精品综合网| 国产叼嘿久久精品久久|