Valgrind手冊翻譯(下)

 Valgrind手冊翻譯(下)
2008-03-28 14:19
MALLOC()相關的選項:
       對於使用自有版本的malloc() (例如Memcheck和massif),下面的選項可以使用。

       --alignment=<number> [default: 8]
              默認Valgrind的malloc(),realloc(), 等等,是8字節對齊地址的。這
              是大部分處理器的標準。然而,一些程序可能假定malloc()等總是返回
              16字節或更多對齊的內存。提供的數值必須在8和4096區間之內,並且
              必須是2的冪數。

非通用選項:
       這些選項可以用於所有的工具,它們影響Valgrind core的幾個特性。大部分人不
       會用到這些選項。

       --run-libc-freeres=<yes|no> [default: yes]
       GNU C庫(libc.so),所有程序共用的,可能會分配一部分內存自已用。通
              常在程序退出時釋放內存並不麻煩 -- 這裏沒什麼問題,因爲Linux內核在
              一個進程退出時會回收進程全部的資源,所以這只是會造成速度慢。
             
              glibc的作者認識到這樣會導致內存檢查器,像Valgrind,在退出時檢查
              內存錯誤的報告glibc的內存泄漏問題,爲了避免這個問題,他們提供了
              一個__libc_freeres()例程特別用來讓glibc釋放分配的所有內存。
              因此Memcheck在退出時嘗試着去運行__libc_freeres()。

              不幸的是,在glibc的一些版本中,__libc_freeres是有bug會導致段錯誤的。
              這在Red Hat 7.1上有特別聲明。所以,提供這個選項來決定是否運行
              __libc_freeres。如果你的程序看起來在Valgrind上運行得很好,但是在
              退出時發生段錯誤,你可能需要指定--run-libc-freeres=no來修正,這將
              可能錯誤的報告libc.so的內存泄漏。

       --sim-hints=hint1,hint2,...
              傳遞雜湊的提示給Valgrind,輕微的修改模擬行爲的非標準或危險方式,
              可能有助於模擬奇怪的特性。默認沒有提示打開。小心使用!目前已知
              的提示有:
              o lax-ioctls: 對ioctl的處理非常不嚴格,唯一的假定是大小是正確的。
              不需要在寫時緩衝區完全的初始化。沒有這個,用大量的奇怪的ioctl
              命令來使用一些設備驅動將會非常煩人。
              o enable-inner:打開某些特殊的效果,當運行的程序是Valgrind自身時。

       --kernel-variant=variant1,variant2,...
              處理系統調用和ioctls在這個平臺的默認核心上產生不同的變量。這有助
              於運行在改進過的內核或者支持非標準的ioctls上。小心使用。如果你不
              理解這個選項做的是什麼那你幾乎不需要它。已經知道的變量有:
              o bproc: 支持X86平臺上的sys_broc系統調用。這是爲了運行在BProc,
              它是標準Linux的一個變種,有時用來構建集羣。

       --show-emwarns=<yes|no> [default: no]
              當這個選項打開時,Valgrind在一些特定的情況下將對CPU仿真產生警告。
              通常這些都是不引人注意的。

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


調試VALGRIND選項:
       還有一些選項是用來調試Valgrind自身的。在運行一般的東西時不應該需要的。
       如果你希望看到選項列表,使用--help-debug選項。

內存檢查選項:
       --leak-check=<no|summary|yes|full> [default: summary]
              當這個選項打開時,當客戶程序結束時查找內存泄漏。內存泄漏意味着
              有用malloc分配內存塊,但是沒有用free釋放,而且沒有指針指向這塊
              內存。這樣的內存塊永遠不能被程序釋放,因爲沒有指針指向它們。如
              果設置爲summary,Valgrind會報告有多少內存泄漏發生了。如果設置爲
              full或yes,Valgrind給出每一個獨立的泄漏的詳細信息。

       --show-reachable=<yes|no> [default: no]
              當這個選項關閉時,內存泄漏檢測器只顯示沒有指針指向的內存塊,或
              者只能找到指向塊中間的指針。當這個選項打開時,內存泄漏檢測器還
              報告有指針指向的內存塊。這些塊是最有可能出現內存泄漏的地方。你
              的程序可能,至少在原則上,應該在退出前釋放這些內存塊。這些有指
              針指向的內存塊和沒有指針指向的內存塊,或者只有內部指針指向的塊,
              都可能產生內存泄漏,因爲實際上沒有一個指向塊起始的指針可以拿來釋
              放,即使你想去釋放它。

       --leak-resolution=<low|med|high> [default: low]
              在做內存泄漏檢查時,確定memcheck將怎麼樣考慮不同的棧是相同的情況。
              當設置爲low時,只需要前兩層棧匹配就認爲是相同的情況;當設置爲med,
              必須要四層棧匹配,當設置爲high時,所有層次的棧都必須匹配。
             
              對於hardcore內存泄漏檢查,你很可能需要使用--leak-resolution=high和
              --num-callers=40或者更大的數字。注意這將產生巨量的信息,這就是爲什
              麼默認選項是四個調用者匹配和低分辨率的匹配。
              注意--leak-resolution= 設置並不影響memcheck查找內存泄漏的能力。它
              只是改變了結果如何輸出。

       --freelist-vol=<number> [default: 5000000]
              當客戶程序使用free(C中)或者delete(C++)釋放內存時,這些內存並不是
              馬上就可以用來再分配的。這些內存將被標記爲不可訪問的,並被放到一
              個已釋放內存的隊列中。這樣做的目的是,使釋放的內存再次被利用的點
              儘可能的晚。這有利於memcheck在內存塊釋放後這段重要的時間檢查對塊
              不合法的訪問。

              這個選項指定了隊列所能容納的內存總容量,以字節爲單位。默認的值是
              5000000字節。增大這個數目會增加memcheck使用的內存,但同時也增加了
              對已釋放內存的非法使用的檢測概率。

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

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

              設置爲no時,從部分錯誤的地址讀取與從完全錯誤的地址讀取同樣處理:
              拋出一個非法地址錯誤,結果的V字節顯示爲合法數據。

              注意這種代碼行爲是違背ISO C/C++標準,應該被認爲是有問題的。如果可
              能,這種代碼應該修正。這個選項應該只是做爲一個最後考慮的方法。

       --undef-value-errors=<yes|no> [default: yes]
              控制memcheck是否檢查未定義值的危險使用。當設爲yes時,Memcheck的行
              爲像Addrcheck, 一個輕量級的內存檢查工具,是Valgrind的一個部分,它
              並不檢查未定義值的錯誤。使用這個選項,如果你不希望看到未定義值錯誤。


CACHEGRIND選項:
       手動指定I1/D1/L2緩衝配置,大小是用字節表示的。這三個必須用逗號隔開,中間
       沒有空格,例如:
           valgrind --tool=cachegrind --I1=65535,2,64

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

       --I1=<size>,<associativity>,<line size>
              指定第一級指令緩衝的大小,關聯度和行大小。

       --D1=<size>,<associativity>,<line size>
              指定第一級數據緩衝的大小,關聯度和行大小。

       --L2=<size>,<associativity>,<line size>
              指定第二級緩衝的大小,關聯度和行大小。

CALLGRIND選項:
       --heap=<yes|no> [default: yes]
              當這個選項打開時,詳細的追蹤堆的使用情況。關閉這個選項時,
              massif.pid.txt或massif.pid.html將會非常的簡短。

       --heap-admin=<number> [default: 8]
              每個塊使用的管理字節數。這隻能使用一個平均的估計值,因爲它可能變化。
              glibc使用的分配器每塊需要4~15字節,依賴於各方面的因素。管理已經釋放
              的塊也需要空間,儘管massif不計算這些。             

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

       --depth=<number> [default: 3]
              詳細的堆信息中調用過程的深度。增加這個值可以給出更多的信息,但是
              massif會更使這個程序運行得慢,使用更多的內存,並且產生一個大的
              massif.pid.txt或者massif.pid.hp文件。

       --alloc-fn=<name>
              指定一個分配內存的函數。這對於使用malloc()的包裝函數是有用的,可以
              用它來填充原來無效的上下文信息。(這些函數會給出無用的上下文信息,
              並在圖中給出無意義的區域)。指定的函數在上下文中被忽略,例如,像對
              malloc()一樣處理。這個選項可以在命令行中重複多次,指定多個函數。

       --format=<text|html> [default: text]
              產生text或者HTML格式的詳細堆信息,文件的後綴名使用.txt或者.html。

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

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

LACKEY選項:
       --fnname=<name> [default: _dl_runtime_resolve()]
              對<name>函數計數。

       --detailed-counts=<no|yes> [default: no]
              對讀取,存儲和alu操作計數。

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

作者信息:
       Julian Seward <[email protected]>是Valgrind的初始作者,在
       /usr/share/doc/valgrind/AUTHORS還有其他的貢獻者的信息。
       這份手冊由Andres Roldan <[email protected]>爲Debian工程編寫,但是可以在
       任何其它發行版上使用。
      
       2.4.0版本的更新,重排,和擴展由Robert Walsh <[email protected]>,
       後來由其它的Valgrind開發者完成。

       本手冊的翻譯工作由鄧傑和莊禮深同學共同完成。

發佈了31 篇原創文章 · 獲贊 5 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章