Valgrind是一個開源的應用程序,提供軟件開發人員提供的內存和線程錯誤管理自動發現在他們的項目中最好的和最常用的工具之一。
換句話說,它可以被用來大大加快你的程序。它&rsquo的; sa命令行應用程序僅在Linux控制台或運行一個X11終端emulator.State的最先進的功能和functionalityKey功能包括內存錯誤檢測器,堆剖析,分支預測和緩存分析器,線程錯誤探測器,以及調用圖生成的分支預測和緩存剖析。
此外,它還帶有一些實驗工具,如全球和堆棧溢出陣列探測器,SimPoint基本塊矢量發生器,和第二堆分析器。
該應用支持範圍廣泛的用不同的編程語言,如C,C ++,Python和Perl中,爪哇,Fortran語言,彙編代碼,和許多其他項目。
它&rsquo的; S由內存調試,分析和檢測內存洩漏的幾個有用的工具。這些措施包括Memcheck,Addrcheck,Cachegrind,Callgrind,無,地塊,EXP-sgcheck,EXP-BBV,EXP-dhat,Helgrind和DRD。
它運行良好的GNU / Linux的,安卓和Mac OS X操作系統。支持的架構,包括X86,AMD64,ARM,PPC32,PPC64,s390x,MIPS32,MIPS64和ARM.Availability並根據hoodThe程序可以從專門章節下載(見上文)僅作為源存檔,可以是配置,編譯和安裝在任何基於Linux的操作系統。
但是,用戶可以直接從他們的Linux發行版的默認軟件倉庫安裝Valgrind的。支持的操作系統包括Debian的,紅帽的Mandriva,openSUSE的,Arch Linux的,Slackware的,Gentoo的,而others.Bottom LINEIN結論,Valgrind是一個獨特的應用程序,應該使用任何軟件開發商加快項目和消除討厭的內存錯誤和洩漏。
它大局;一個屢獲殊榮的軟件,已成功用於研究目的在麻省理工學院,劍橋,加州大學伯克利分校,卡內基梅隆大學,加州大學聖巴巴拉分校,康奈爾大學,和世界各地的許多其他大學
<強。 >什麼在此版本中是新的:
- 在3.10.1是一個bug修復版本。它修復了報導3.10.0和反向移植修復所有報告的各種錯誤缺少主幹AArch64 ARMv8指令和系統調用。如果您打包或交付3.10.0供他人使用,你可能要考慮升級到3.10.1代替。
什麼是3.10.0版本,新的:
- 在3.10.0是一個功能版本有許多改進和錯誤修正通常的集合。
- 在此版本支持X86 / Linux的,AMD64 / Linux上,ARM32 / Linux上,ARM64 / Linux的,PPC32 / Linux的,PPC64BE / Linux的,PPC64LE / Linux的,S390X / Linux的,MIPS32 / Linux的,MIPS64 / Linux上,ARM / Android的, MIPS32 / Android的X86 / Android的X86 / MacOSX的10.9和AMD64 / MacOSX的10.9。支持MacOSX的10.8和10.9的顯著提高相對於3.9.0版本。
什麼是3.9.0版本,新的:
- 在此版本支持X86 / Linux的,AMD64 / Linux的,ARM / Linux的,PPC32 / Linux的,PPC64 / Linux的,S390X / Linux的,MIPS32 / Linux的,MIPS64 / Linux上,ARM / Android的X86 / Android的X86 / MacOSX的10.7和AMD64 / MacOSX的10.7。支持Mac OS X 10.8的顯著提高相對於3.8.0版本。
- 在平台的更改:
- 在支持MIPS64 LE和BE運行Linux。 Valgrind的已經過測試的MIPS64 Debian的擠壓和Debian喘息分佈。
- 在MIPS32平台MIPS DSP ASE支持。
- 對於s390x十進制浮點指令的支持上安裝了DFP設備的主機。
- 在支持POWER8(電源ISA 2.07),說明
- 在支持Intel AVX2指令。這是僅適用於64位代碼。
- 在英特爾事務性同步擴展,無論是RTM和初步支持HLE。
- 有關電源硬件事務內存的初步支持。
- 在對MacOSX的10.8提高支持(僅限64位)。 Memcheck現在可以運行大型GUI應用得相當好。
- 換刀:
- 在Memcheck:
- 在改進中處理矢量化的代碼,從而導致顯著減少虛假的錯誤報告。您需要使用標誌--partial-負載返回= yes來獲取這些變化所帶來的好處。
- 在更好地控制洩漏檢查。現在可以指定哪些洩漏種(定/間接/壞/可達)應該被顯示,這應該由一個給定的洩漏抑制被視為錯誤,並且其應當被抑制。這是使用的選項 - 顯示,洩漏種= kind1,kind2,...,--errors換洩漏種= kind1,kind2,..和一個可選的&QUOT;比賽洩漏種:&QUOT; ,線壓制項分別。需要注意的是產生洩漏鎮壓包含這個新的生產線,因此比以前的版本更加具體。要獲得相同的行為以前的版本中,刪除和QUOT;比賽洩漏種:&QUOT;使用前從產生鎮壓行。
- 在減少和QUOT;可能洩漏&QUOT;從洩漏檢查通過使用更好的啟發式報告。可用試探法提供檢測有效內部指針到std :: stdstring的,以新[]分配數組具有析的元素和至內部指針指向一個C使用多重繼承++對象的內部的一部分。它們可以單獨使用該選項可以選擇--leak檢查啟發式= heur1,heur2,...
- 在堆分配塊更好地控制堆棧跟踪收購。使用--keep-踪跡選項,能夠獨立地控制是否獲取棧跟踪對於每個分配和釋放。這可以用來創造更好的&QUOT;免費&QUOT後使用;錯誤或記錄較少的信息,以減少Valgrind的的資源消耗。
- 在洩漏抑制用法的好報告。用鎮壓的列表(-v選項時給出如圖)現在顯示,每個洩漏鎮壓,有多少塊和字節的最後一個洩漏的搜索過程中也抑制。
- 在Helgrind:
- 在虛假的錯誤已被刪除。
- 從使用的超時pthread_cond_waits而導致的虛假錯誤,已被刪除。
- 在其他更改:
- 在一些試圖調整Valgrind的的空間要求,目標的預期功能:
- 在翻譯高速緩存的缺省大小已經由8部門6在Android平台上,因為每個部門使用Memcheck時,佔地約40MB。
- 在翻譯高速緩存的缺省大小已增加至所有其他平台16個扇區,這反映了大型的應用程序需要的儀器和儲存的大量代碼的事實。出於同樣的原因,可被跟踪的存儲器映射的段的數量已增加的6倍。
- 在所有的情況下,扇區中的翻譯高速緩存的最大數目可通過新的標誌--num-transtab部門來控制。
- 在變化中如何調試信息(行號等)被讀取:
- 在Valgrind的不再是暫時mmaps整個對象從中讀取。相反,讀出通過一個小的固定大小的緩衝區完成的。這就避免了虛擬內存的使用高峰時,Valgrind的,從大的共享對象讀取debuginfo軟。
- 在一個新的實驗性遠程調試信息服務器。 Valgrind的可以讀取從那裡debuginfo軟物的存放不同的機器上(通常是構建主機)調試信息。在資源有限的目標(手機,平板電腦)運行Valgrind的時候,當全debuginfo軟對象存儲在別處這樣可以節省大量的時間和麻煩。這是由--debuginfo服務器=選項啟用。
- 在主一致性和調試對象之間的檢查可以使用--allow不匹配-debuginfo軟件選項被禁用。
- 在棧展開了棧掃描,對ARM。由放卷疊掃描可以恢復堆棧跟踪在某些情況下,當正常的開卷機制失敗。棧掃描是最好的形容為&QUOT;一個討厭的,危險的和誤導性的黑客&QUOT;所以默認情況下禁用。使用--unw棧 - 掃描 - 脫粒和--unw棧掃描幀啟用和控制它。
- 在檢測和遞歸堆棧幀週期合併。當你的程序有遞歸算法,這限制了記錄的堆棧跟踪使用Valgrind的內存,並避免記錄無趣重複調用。這是通過命令行選項--merge遞歸幀和監控命令與控制QUOT; v.set合併遞歸幀&QUOT;
- 在文件名以及用於鎮壓行號。用於鎮壓(-v選項時給出所示)現在顯示,對於每一個使用壓制,文件名和行號的抑制定義。名單
- 在新的和修改的GDB服務器監控功能:
- valgrind.h有一個新的客戶端請求,VALGRIND_MONITOR_COMMAND,可用於從客戶端程序執行gdbserver的監視命令。
- 在新顯示器的命令,&QUOT; v.info open_fds&QUOT ;,,讓打開的文件描述符和其他詳細信息列表
- 在可選消息&QUOT; v.info n_errs_found&QUOT;監視命令,例如&QUOT; v.info n_errs_found測試1234完成&QUOT ;,允許註釋字符串被添加到過程輸出,也許用於分離不同的測試或試驗階段的錯誤的目的
- 在一個新的監視命令&QUOT; v.info execontext&QUOT;顯示有關記錄Valgrind的堆棧跟踪信息。
- 在一個新的監視命令&QUOT; v.do expensive_sanity_check_general&QUOT;運行一些內部的一致性檢查。
- 新標誌--sigill診斷控制是否當JIT遇到的指令無法翻譯打印診斷消息。實際行為 - 交付SIGILL的應用 - 是不變的
- 的內存Valgrind的可以在64位的目標使用的最高金額已增加從32GB到64GB。這應該使人們有可能運行Memcheck應用本身需要高達大約35GB。
- 修正錯誤:
- 在下面的錯誤已得到修復或解決。需要注意的是&QUOT; N-I-BZ&QUOT;
- 表示&QUOT;不要在Bugzilla的&QUOT; - 即,據報導,我們的一個錯誤
- 在,但從來沒有得到一個Bugzilla條目。我們鼓勵您在提交錯誤
- 在Bugzilla的(https://bugs.kde.org/enter_bug.cgi?product=valgrind),而
- 在比郵寄開發商(或郵件列表)直接 - 臭蟲
- 在不進入的Bugzilla往往會得到遺忘或忽略。
- 要看到一個給定的錯誤的詳細信息,請訪問https://bugs.kde.org/show_bug.cgi?id=XXXXXX其中XXXXXX是下面列出的錯誤號碼。
- 在123837系統調用:第四個參數是可選的,這取決於CMD
- 135425 memcheck應該告訴你在哪裡釋放的塊是Mallocd
- 164485 VG_N_SEGNAMES和VG_N_SEGMENTS(仍然)太小
- 207815添加一些DRM的ioctl來syswrap-linux.c
- 251569 VEX amd64-&GT; IR:0xF的為0x1 0xF9為0xBF 0x90處0xD0 0x3中為0x0(RDTSCP)
- 252955不可能編譯的ccache
- 253519 Memcheck報告auxv指針訪問無效讀取。
- 263034崩潰加載一些PPC64二進制文件時
- 269599增加最深回溯
- 274695 s390x:支持和QUOT;從邏輯&QUOT比較/;指令(z196的)
- 275800 s390x:自動檢測緩存信息(部分2)
- 280271 Valgrind的報告可能的內存洩漏仍然可達的std :: string的
- 284540 Memcheck不應指望鎮壓匹配仍然可達[..]
- 289578回溯與ARM展開表(堆棧掃描標誌)
- 296311錯誤的堆棧跟踪由於-fomit幀指針(86)
- 304832 PPC32:構建失敗
- 305431使用find_buildid SHDR後備單獨的.debug文件
- 在305728添加支持
- 305948 PPC64:代碼生成ShlD64 / ShrD64斷言
- 306035 s390x:修復IR新一代的LAAG和朋友
- 306054 s390x:條件碼計算的轉換至INT /邏輯
- 306098 s390x:轉換為另一種形式的操作碼/從固定
- 306587修復緩存行檢測,從輔助矢量PPC。
- 在306783的Mips未處理的系統調用:4025 /四千一百八十二分之四千零七十九
- 307038 DWARF2 CFI讀者:未處理DW_OP_操作碼地址0x8(DW_OP_const1u等)
- 307082 HG誤報:pthread_cond_destroy:毀滅未知的CV
- 307101 sys_capget第二個參數可以是NULL
- 307103 sys_openat:如果是絕對路徑,那麼dirfd被忽略
- 307106 amd64-&GT; IR:F0 0F C0 02(鎖定XADD字節)
- 307113 s390x:DFP支持
- 在307141的valgrind在MIPS-linux系統簡化版,工作
- 307155 filter_gdb應該過濾掉的系統調用,template.S T_PSEUDO
- 在對AVX 307285 x86_amd64功能測試在測試套件是錯
- 307290 memcheck重疊測試用例需要memcpy的版本過濾
- 307463請添加&QUOT;&極限= 0&QUOT;到&QUOT;所有打開的bug和QUOT;鏈接
- 307465 --show-可能丟=不應該減少錯誤計數/退出代碼
- 307557洩漏在Mac OS X :: recursiveInit [..]
- 307729 pkgconfig支持破valgrind.pc
- 307828 Memcheck虛假錯誤SSE優化wcscpy,wcscmp,wcsrchr,wcschr
- 307955大廈的valgrind 3.7.0-R4中的Gentoo AMD64使用鐺當失敗
- 308089未處理的PPC64系統調用:使用prctl
- 308135 PPC32 MPC8xx有16個字節的緩存大小
- 308321測試套件memcheck過濾干擾gdb_filter
- 308333 == 307106
- 308341 vgdb應報告進程退出(或致命的信號)
- 308427 S390 memcheck報告TSEARCH C跳轉/ cmove取決於UNINIT
- 308495刪除生成依賴
- 在308573內部錯誤
- 308626 == 308627
- 308627 PMOVMSKB有效性位傳播是不精確
- 308644 vgdb命令
- 308711提供有關aspacemgr和out_of_memory 競技場更多信息
- 308717 ARM:實行定點VCVT.F64 [蘇] 32 。
- 308718 ARM實現SMLALBB系列指令
- 在308886缺少支持
- 在308930系統調用name_to_handle_at(303 AMD64)沒有處理好
- 在309229 V-位測試儀不報告數
- 309323打印無法識別instuction
- 309425提供一個--sigill診斷標誌打壓非法[..]
- 309427 SSE優化stpncpy觸發未初始化值[..]錯誤
- 309430自託管PPC64遇到操作數類型vassert誤差
- 309600 Valgrind是有點困惑0大小的段
- 309823生成仍可達塊 錯誤
- 309921 PCMPISTRI有效性位傳播是不精確
- 309922無/測試/ PPC64 / test_dfp5有時會失敗
- 310169是不支持VBIT檢查的Iop_CmpORD類的IOPS。
- 310424 --read-VAR-信息不正確描述靜態變量
- 在310792的搜索其他路徑
- 310931 s390x:消息安全輔助(MSA)指令擴展[..]
- 311100 PPC DFP執行的整數操作數的不一致[..]
- 311318 ARM:&QUOT; 128位常數未實現&QUOT;錯誤信息
- 311407 SSSE3 BCOPY(實際上轉換的memcpy)導致無效讀[..]
- 311690 V崩潰,因為它重定向重定向功能,內部分支機構
- 311880 x86_64的:使regtest掛在shell_valid1
- 311922警告:未處理的系統調用:170
- 311933 == 251569
- 312171 PPC:insn中選擇的DFP
- 312571舍入模式調用錯的DFP IOPS [..]
- 312620更改為Iop_D32toD64 [..]為S390 DFP支持打破PPC [..]
- 312913懸擺指針錯誤也應報告ALLOC堆棧跟踪
- 312980大廈山獅產生一些編譯器警告
- 313267添加MIPS64 / Linux移植到Valgrind的
- 313348 == 251569
- 313354 == 251569
- 313811緩衝區溢出
- 314099 Coverity公司在VEX guest_ppc_toIR.c insn_suffix 指出錯誤
- 314269 PPC:在insn中選擇死代碼
- 314718 ARM:實現整數除法指令(SDIV和UDIV)
- 315345 CL-format.xml和callgrind / dump.c不同意使用CFL =或CFI =
- 315441 SENDMSG系統調用應該忽略未設置msghdr msg_flags
- 315534 msgrcv一個線程內導致Valgrind的掛起(塊)
- 315545斷言“(UCHAR *)節&GT; TT [tteNo] .tcptr的soname”
- 320895添加fanotify支持(包括補丁)
- 320998 VEX amd64-&GT; IR pcmpestri和pcmpestrm SSE4.2指令
- 321065 Valgrind的更新的Xen 4.3
- 321148未處理的指令:PLI(拇指1,2,3)
- 321363未處理的指令:SSAX(ARM +拇指)
- 321364未處理的指令:SXTAB16(ARM +拇指)
- 321466未處理的指令:SHASX(ARM +拇指)
- 321467未處理的指令:SHSAX(ARM +拇指)
- 321468未處理的指令:SHSUB16(ARM +拇指)
- 321619未處理的指令:SHSUB8(ARM +拇指)
- 321620未處理的指令:UASX(ARM +拇指)
- 321621未處理的指令:USAX(ARM +拇指)
- 321692未處理的指令:UQADD16(ARM +拇指)
- 321693未處理的指令:LDRSBT(拇指)
- 321694未處理的指令:UQASX(ARM +拇指)
- 321696未處理的指令:UQSAX(拇指+ ARM)
- 321697未處理的指令:UHASX(ARM +拇指)
- 321703未處理的指令:UHSAX(ARM +拇指)
- 321704未處理的指令:REVSH(ARM +拇指)
- 在321730添加cg_diff和cg_merge手冊頁
- 在321738添加vgdb和Valgrind的監聽手冊頁
- 321814 == 315545
- 321891未處理的指令:LDRHT(拇指)
- 在321960的pthread_create(),然後的alloca()導致無效堆棧寫入錯誤
- 321969 PPC32和PPC64不支持[LF] setxattr
- 322254顯示threadname連同TID如果通過應用程序設置
- 在322294添加初步支持IBM的Power ISA 2.07
- 322368斷言失敗下OS X 10.8
- 322563 VEX MIPS-&GT; IR:0x70 0x83開0XF0 0x3A的
- 322807 VALGRIND_PRINTF_BACKTRACE寫調用堆棧,以XML和文本到stderr
- 322851 0bXXX二進制文字語法不規範
- 323035未處理的指令:LDRSHT(拇指)
- 323036未處理的指令:SMMLS(ARM和Thumb)
- 在323116的memcheck /測試/ PPC64 / power_ISA2_05.c構建失敗,[..]
- 323175未處理的指令:SMLALD(ARM +拇指)
- 323177未處理的指令:SMLSLD(ARM +拇指)
- 在323432調用pthread_cond_destroy()或pthread_mutex_destroy()[..]
- 323437期2支持
- 323713支持mmxext(整數SSE)的子集
- 323803事務內存的說明
- 323893 SSE3上AMD的CPU不具備的valgrind
- 323905從Valgrind的可能的誤報/ DRD上的close()
- 323912 valgrind.h頭是不是mingw64兼容
- 324047 Valgrind的不支持[LDR,ST] {S} [B,H] T,ARM指令
- 324149 helgrind:當那麼pthread_cond_timedwait返回ETIMEDOUT [..]
- 324181 MMAP不處理MAP_32BIT
- 324227 memcheck當一個線程調用exit +塊假陽性洩漏[..]
- 324421支持ARM架構fanotify API
- 324514 gdbserver的監視CMD輸出行為的一致性[..]
- 324518 PPC64:中dcbt指令仿真不處理[..]
- 324546無/測試/ PPC32 test_isa_2_07_part2請求-m64
- 324582當訪問時,以釋放內存,同時報告分配[..]
- 324594修復溢出計算的電力ISA 2.06的insn:mulldo / mulldo
- 324765 PPC64:非法指令執行時沒有/測試/ PPC64 / JM-雜項
- 324816不正確的VEX實現xscvspdp / xvcvspdp為SNaN時輸入
- 324834未處理說明的x86_64
- 324894期3支持
- 326091 DRD:避免優化的strlen假賽報告()impls
- 在326113的valgrind libvex hwcaps在AMD64誤差
- NI-BZ一些錯誤的命令行選項可以忽略
- NI-BZ補丁,允許公平sched的在Android
- NI-BZ報告錯誤vgdb快照執行前要求
- NI-BZ相同303624(固定3.8.0),但是對於Android的86
從使用的靜態初始化互斥和條件變量(PTHREAD_MUTEX_INITIALISER等)產生的
對AVX2指令
10.7.5庫在ImageLoader的
安裝Xen的頭在
在32位模式下執行64位指令
具有用於軌道-FDS選項信息
對於PTRACE_SET / GETREGSET
生成的測試
在MIPS
調試符號
在assert_fail
在wqthread_hijack
針對IBM的Power ISA 2.07
在i386(速龍)
不支持功耗
在Microsoft C運行時間
針對IBM的Power ISA 2.07
什麼是3.8.1版本,新的:
- 在它修復了一些斷言失敗的3.8.0的發生中度經常在實際使用的情況下,增加了對ARM的一些缺失的說明,並修正MacOSX的死鎖情況。
- 如果您打包或交付3.8.0供他人使用,你可能要考慮升級到3.8.1吧。
什麼是3.6.0版本,新的:
- 在這是一個功能版本有許多顯著的改善和平時收集的缺陷修復。
- 在主要的改進是,Valgrind的,現在工作在ARM / Linux和在Mac OS X 10.6(雪豹)。
評論沒有發現