日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Valgrind 安装与使用

發布時間:2024/2/28 编程问答 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Valgrind 安装与使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

調不盡的內存泄漏,用不完的Valgrind

Valgrind 安裝

1. 到www.valgrind.org下載最新版valgrind-3.2.3.tar.bz2

2. 解壓安裝包:tar –jxvf valgrind-3.2.3.tar.bz2

3. 解壓后生成目錄valgrind-3.2.3

4. cd valgrind-3.2.3

5. 運行./autogen.sh設置環境(需要標準的autoconf工具)(可選)

6. ./configure;配置Valgrind,生成MakeFile文件,具體參數信息詳見INSTALL文件。一般只需要設置--prefix=/where/you/want/it/installed

7. Make;編譯Valgrind

8. make install;安裝Valgrind

Valgrind包含的工具

Valgrind支持很多工具:memcheck,addrcheck,cachegrind,Massif,helgrind和Callgrind等。在運行Valgrind時,你必須指明想用的工具,如果省略工具名,默認運行memcheck。

1、memcheck

memcheck探測程序中內存管理存在的問題。它檢查所有對內存的讀/寫操作,并截取所有的malloc/new/free/delete調用。因此memcheck工具能夠探測到以下問題:

1)使用未初始化的內存

2)讀/寫已經被釋放的內存

3)讀/寫內存越界

4)讀/寫不恰當的內存??臻g

5)內存泄漏

6)使用malloc/new/new[]和free/delete/delete[]不匹配。

7)src和dst的重疊

2、cachegrind

cachegrind是一個cache剖析器。它模擬執行CPU中的L1, D1和L2 cache,因此它能很精確的指出代碼中的cache未命中。如果你需要,它可以打印出cache未命中的次數,內存引用和發生cache未命中的每一行代碼,每一個函數,每一個模塊和整個程序的摘要。如果你要求更細致的信息,它可以打印出每一行機器碼的未命中次數。在x86和amd64上, cachegrind通過CPUID自動探測機器的cache配置,所以在多數情況下它不再需要更多的配置信息了。

3、helgrind

helgrind查找多線程程序中的競爭數據。helgrind查找內存地址,那些被多于一條線程訪問的內存地址,但是沒有使用一致的鎖就會被查出。這表示這些地址在多線程間訪問的時候沒有進行同步,很可能會引起很難查找的時序問題。

它主要用來檢查多線程程序中出現的競爭問題。Helgrind 尋找內存中被多個線程訪問,而又沒有一貫加鎖的區域,這些區域往往是線程之間失去同步的地方,而且會導致難以發掘的錯誤。Helgrind實現了名為”Eraser” 的競爭檢測算法,并做了進一步改進,減少了報告錯誤的次數。

4、Callgrind

Callgrind收集程序運行時的一些數據,函數調用關系等信息,還可以有選擇地進行cache 模擬。在運行結束時,它會把分析數據寫入一個文件。callgrind_annotate可以把這個文件的內容轉化成可讀的形式。

一般用法:

$valgrind --tool=callgrind ./sec_infod

會在當前目錄下生成callgrind.out.[pid], 如果我們想結束程序, 可以

$killall callgrind

然后我們可以用

$callgrind_annotate --auto=yes callgrind.out.[pid] > log

$vi log

5、Massif

堆棧分析器,它能測量程序在堆棧中使用了多少內存,告訴我們堆塊,堆管理塊和棧的大小。Massif能幫助我們減少內存的使用,在帶有虛擬內存的現代系統中,它還能夠加速我們程序的運行,減少程序停留在交換區中的幾率。

6、lackey

lackey是一個示例程序,以其為模版可以創建你自己的工具。在程序結束后,它打印出一些基本的關于程序執行統計數據。

Valgrind的參數

用法: valgrind [options] prog-and-args [options]: 常用選項,適用于所有Valgrind工具

--tool=<name>

最常用的選項。運行 valgrind中名為toolname的工具。默認memcheck。

-h --help

顯示所有選項的幫助,包括內核和選定的工具兩者。

--version

顯示valgrind內核的版本,每個工具都有各自的版本。

-q --quiet

安靜地運行,只打印錯誤信息。

--verbose

更詳細的信息。

--trace-children=<yes|no>

跟蹤子線程? [default: no]

--track-fds=<yes|no>

跟蹤打開的文件描述?[default: no]

--time-stamp=<yes|no>

增加時間戳到LOG信息? [default: no]

--log-fd=<number>

輸出LOG到描述符文件 [2=stderr]

--log-file=<file>

將輸出的信息寫入到filename.PID的文件里,PID是運行程序的進行ID

--log-file-exactly=<file>

輸出LOG信息到 file

LOG信息輸出

--xml=yes

將信息以xml格式輸出,只有memcheck可用

--num-callers=<number>

show <number> callers in stack traces [12]

--error-exitcode=<number>

如果發現錯誤則返回錯誤代碼 [0=disable]

--db-attach=<yes|no>

當出現錯誤,valgrind會自動啟動調試器gdb。[default: no]

--db-command=<command>

啟動調試器的命令行選項[gdb -nw %f %p]

適用于Memcheck工具的相關選項:

--leak-check=<no|summary|full>

要求對leak給出詳細信息? Leak是指,存在一塊沒有被引用的內存空間,或沒有被釋放的內存空間,如summary,只反饋一些總結信息,告訴你有多少個malloc,多少個free 等;如果是full將輸出所有的leaks,也就是定位到某一個malloc/free。 [default: summary]

--show-reachable=<yes|no>

如果為no,只輸出沒有引用的內存leaks,或指向malloc返回的內存塊中部某處的leaks [default: no]

更詳細的參數指令見附錄A。

Valgrind的使用

首先,在編譯程序的時候打開調試模式(gcc編譯器的-g選項)。如果沒有調試信息,即使最好的valgrind工具也將中能夠猜測特定的代碼是屬于哪一個函數。打開調試選項進行編譯后再用valgrind檢查,valgrind將會給你的個詳細的報告,比如哪一行代碼出現了內存泄漏。

當檢查的是C++程序的時候,還應該考慮另一個選項 -fno-inline。它使得函數調用鏈很清晰,這樣可以減少你在瀏覽大型C++程序時的混亂。比如在使用這個選項的時候,用memcheck檢查openoffice就很容易。當然,你可能不會做這項工作,但是使用這一選項使得valgrind生成更精確的錯誤報告和減少混亂。

一些編譯優化選項(比如-O2或者更高的優化選項),可能會使得memcheck提交錯誤的未初始化報告,因此,為了使得valgrind的報告更精確,在編譯的時候最好不要使用優化選項。

如果程序是通過腳本啟動的,可以修改腳本里啟動程序的代碼,或者使用--trace-children=yes選項來運行腳本。

下面是用memcheck檢查sample.c的例子

這里用到的示例程序文件名為:sample.c(如下所示),選用的編譯器為gcc。

生成可執行程序

gcc –g sample.c –o sample

圖1

運行Valgrind

valgrind --tool=memcheck ./sample

以下是運行上述命令后的輸出

圖2

左邊顯示類似行號的數字(10297)表示的是 Process ID。

最上面的紅色方框表示的是 valgrind 的版本信息。

中間的紅色方框表示 valgrind 通過運行被測試程序,發現的內存問題。通過閱讀這些信息,可以發現:

l 這是一個對內存的非法寫操作,非法寫操作的內存是4 bytes。

l 發生錯誤時的函數堆棧,以及具體的源代碼行號。

l 非法寫操作的具體地址空間。

最下面的紅色方框是對發現的內存問題和內存泄漏問題的總結。內存泄漏的大小(40 bytes)也能夠被檢測出來。

Valgrind的示例

例1.使用未初始化的內存

代碼如下

#include <stdio.h>??????????????????????????????????????????????????????????????
int main()
{
??? int x;
??? if(x == 0)
??? {
??????? printf("X is zero");
??? }
??? return 0;
}
Valgrind提示如下
==14222== Conditional jump or move depends on uninitialised value(s)
==14222== at 0x400484: main (sample2.c:6)
X is zero==14222==
==14222== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 5 from 1)
==14222== malloc/free: in use at exit: 0 bytes in 0 blocks.
==14222== malloc/free: 0 allocs, 0 frees, 0 bytes allocated.
==14222== For counts of detected errors, rerun with: -v
==14222== All heap blocks were freed -- no leaks are possible.
  

例2.內存讀寫越界

代碼如下

#include <stdlib.h>
#include <stdio.h>
int main(int argc,char *argv[])
{
??? int len=5;
??? int i;
??? int *pt=(int*)malloc(len*sizeof(int));
??? int *p=pt;
??? for(i=0;i<len;i++)
??? {p++;}
??? *p=5;
??? printf(“%d”,*p);
??? return;
}
Valgrind提示如下
==23045== Invalid write of size 4
==23045== at 0x40050A: main (sample2.c:11)
==23045== Address 0x4C2E044 is 0 bytes after a block of size 20 alloc'd
==23045== at 0x4A05809: malloc (vg_replace_malloc.c:149)
==23045== by 0x4004DF: main (sample2.c:7)
==23045==
==23045== Invalid read of size 4
==23045== at 0x400514: main (sample2.c:12)
==23045== Address 0x4C2E044 is 0 bytes after a block of size 20 alloc'd
==23045== at 0x4A05809: malloc (vg_replace_malloc.c:149)
==23045== by 0x4004DF: main (sample2.c:7)
5==23045==
==23045== ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 5 from 1)
==23045== malloc/free: in use at exit: 20 bytes in 1 blocks.
==23045== malloc/free: 1 allocs, 0 frees, 20 bytes allocated.
==23045== For counts of detected errors, rerun with: -v
==23045== searching for pointers to 1 not-freed blocks.
==23045== checked 66,584 bytes.
==23045==
==23045== LEAK SUMMARY:
==23045== definitely lost: 20 bytes in 1 blocks.
==23045== possibly lost: 0 bytes in 0 blocks.
==23045== still reachable: 0 bytes in 0 blocks.
==23045== suppressed: 0 bytes in 0 blocks.
==23045== Use --leak-check=full to see details of leaked memory.
  


例3.src和dst內存覆蓋

代碼如下

#include <stdlib.h>

#include <stdio.h>

#include <string.h>

int main(int argc,char *argv[])

{ char x[50];

int i;

for(i=0;i<50;i++)

{x[i]=i;}

strncpy(x+20,x,20); //Good

strncpy(x+20,x,21); //Overlap

x[39]=’\0’;

strcpy(x,x+20); //Good

x[39]=40;

x[40]=’\0’;

strcpy(x,x+20); //Overlap

return 0;

}

Valgrind提示如下

==24139== Source and destination overlap in strncpy(0x7FEFFFC09, 0x7FEFFFBF5, 21)

==24139== at 0x4A0724F: strncpy (mc_replace_strmem.c:116)

==24139== by 0x400527: main (sample3.c:10)

==24139==

==24139== Source and destination overlap in strcpy(0x7FEFFFBE0, 0x7FEFFFBF4)

==24139== at 0x4A06E47: strcpy (mc_replace_strmem.c:106)

==24139== by 0x400555: main (sample3.c:15)

==24139==

==24139== ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 5 from 1)

==24139== malloc/free: in use at exit: 0 bytes in 0 blocks.

==24139== malloc/free: 0 allocs, 0 frees, 0 bytes allocated.

==24139== For counts of detected errors, rerun with: -v

==24139== All heap blocks were freed -- no leaks are possible.

例4.動態內存管理錯誤

常見的內存分配方式分三種:靜態存儲,棧上分配,堆上分配。全局變量屬于靜態存儲,它們是在編譯時就被分配了存儲空間,函數內的局部變量屬于棧上分配,而最靈活的內存使用方式當屬堆上分配,也叫做內存動態分配了。常用的內存動態分配函數包括:malloc, alloc, realloc, new等,動態釋放函數包括free, delete。

一旦成功申請了動態內存,我們就需要自己對其進行內存管理,而這又是最容易犯錯誤的。常見的內存動態管理錯誤包括:

l 申請和釋放不一致

由于 C++ 兼容 C,而 C 與 C++ 的內存申請和釋放函數是不同的,因此在 C++ 程序中,就有兩套動態內存管理函數。一條不變的規則就是采用 C 方式申請的內存就用 C 方式釋放;用 C++ 方式申請的內存,用 C++ 方式釋放。也就是用 malloc/alloc/realloc 方式申請的內存,用 free 釋放;用 new 方式申請的內存用 delete 釋放。在上述程序中,用 malloc 方式申請了內存卻用 delete 來釋放,雖然這在很多情況下不會有問題,但這絕對是潛在的問題。

l 申請和釋放不匹配

申請了多少內存,在使用完成后就要釋放多少。如果沒有釋放,或者少釋放了就是內存泄露;多釋放了也會產生問題。上述程序中,指針p和pt指向的是同一塊內存,卻被先后釋放兩次。

l 釋放后仍然讀寫

本質上說,系統會在堆上維護一個動態內存鏈表,如果被釋放,就意味著該塊內存可以繼續被分配給其他部分,如果內存被釋放后再訪問,就可能覆蓋其他部分的信息,這是一種嚴重的錯誤,上述程序第16行中就在釋放后仍然寫這塊內存。

下面的一段程序,就包括了內存動態管理中常見的錯誤。

#include <stdlib.h>

#include <stdio.h>

int main(int argc,char *argv[])

{ char *p=(char*)malloc(10);

char *pt=p;

int i;

for(i=0;i<10;i++)

{p[i]=’z’;}

delete p;

p[1]=’a’;

free(pt);

return 0;

}

Valgrind提示如下

==25811== Mismatched free() / delete / delete []

==25811== at 0x4A05130: operator delete(void*) (vg_replace_malloc.c:244)

==25811== by 0x400654: main (sample4.c:9)

==25811== Address 0x4C2F030 is 0 bytes inside a block of size 10 alloc'd

==25811== at 0x4A05809: malloc (vg_replace_malloc.c:149)

==25811== by 0x400620: main (sample4.c:4)

==25811==

==25811== Invalid write of size 1

==25811== at 0x40065D: main (sample4.c:10)

==25811== Address 0x4C2F031 is 1 bytes inside a block of size 10 free'd

==25811== at 0x4A05130: operator delete(void*) (vg_replace_malloc.c:244)

==25811== by 0x400654: main (sample4.c:9)

==25811==

==25811== Invalid free() / delete / delete[]

==25811== at 0x4A0541E: free (vg_replace_malloc.c:233)

==25811== by 0x400668: main (sample4.c:11)

==25811== Address 0x4C2F030 is 0 bytes inside a block of size 10 free'd

==25811== at 0x4A05130: operator delete(void*) (vg_replace_malloc.c:244)

==25811== by 0x400654: main (sample4.c:9)

==25811==

==25811== ERROR SUMMARY: 3 errors from 3 contexts (suppressed: 5 from 1)

==25811== malloc/free: in use at exit: 0 bytes in 0 blocks.

==25811== malloc/free: 1 allocs, 2 frees, 10 bytes allocated.

==25811== For counts of detected errors, rerun with: -v

==25811== All heap blocks were freed -- no leaks are possible.

例5.內存泄漏

代碼如下

#include <stdlib.h>

int main()

{

char *x = (char*)malloc(20);

char *y = (char*)malloc(20);

x=y;

free(x);

free(y);

return 0;

}

Valgrind提示如下

==19013== Invalid free() / delete / delete[]

==19013== at 0x4A0541E: free (vg_replace_malloc.c:233)

==19013== by 0x4004F5: main (sample5.c:8)

==19013== Address 0x4C2E078 is 0 bytes inside a block of size 20 free'd

==19013== at 0x4A0541E: free (vg_replace_malloc.c:233)

==19013== by 0x4004EC: main (sample5.c:7)

==19013==

==19013== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 5 from 1)

==19013== malloc/free: in use at exit: 20 bytes in 1 blocks.

==19013== malloc/free: 2 allocs, 2 frees, 40 bytes allocated.

==19013== For counts of detected errors, rerun with: -v

==19013== searching for pointers to 1 not-freed blocks.

==19013== checked 66,584 bytes.

==19013==

==19013== LEAK SUMMARY:

==19013== definitely lost: 20 bytes in 1 blocks.

==19013== possibly lost: 0 bytes in 0 blocks.

==19013== still reachable: 0 bytes in 0 blocks.

==19013== suppressed: 0 bytes in 0 blocks.

==19013== Use --leak-check=full to see details of leaked memory.

例6.非法寫/讀

代碼如下

int main()

{

int i, *x;

x = (int *)malloc(10*sizeof(int));

for (i=0; i<11; i++)

x[i] = i;

free(x);

}

Valgrind提示如下

==21483== Invalid write of size 4

==21483== at 0x4004EA: main (sample6.c:6)

==21483== Address 0x4C2E058 is 0 bytes after a block of size 40 alloc'd

==21483== at 0x4A05809: malloc (vg_replace_malloc.c:149)

==21483== by 0x4004C9: main (sample6.c:4)

==21483==

==21483== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 5 from 1)

==21483== malloc/free: in use at exit: 0 bytes in 0 blocks.

==21483== malloc/free: 1 allocs, 1 frees, 40 bytes allocated.

==21483== For counts of detected errors, rerun with: -v

==21483== All heap blocks were freed -- no leaks are possible.

例7.無效指針

代碼如下

#include <stdlib.h>

int main()

{

char *x = malloc(10);

x[10] = 'a';

free(x);

return 0;

}

Valgrind提示如下

==15262== Invalid write of size 1

==15262== at 0x4004D6: main (sample7.c:5)

==15262== Address 0x4C2E03A is 0 bytes after a block of size 10 alloc'd

==15262== at 0x4A05809: malloc (vg_replace_malloc.c:149)

==15262== by 0x4004C9: main (sample7.c:4)

==15262==

==15262== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 5 from 1)

==15262== malloc/free: in use at exit: 0 bytes in 0 blocks.

==15262== malloc/free: 1 allocs, 1 frees, 10 bytes allocated.

==15262== For counts of detected errors, rerun with: -v

==15262== All heap blocks were freed -- no leaks are possible.

例8.重復釋放

代碼如下

#include <stdlib.h>

int main()

{

char *x = malloc(10);

free(x);

free(x);

return 0;

}

Valgrind提示如下

==15005== Invalid free() / delete / delete[]

==15005== at 0x4A0541E: free (vg_replace_malloc.c:233)

==15005== by 0x4004DF: main (sample8.c:6)

==15005== Address 0x4C2E030 is 0 bytes inside a block of size 10 free'd

==15005== at 0x4A0541E: free (vg_replace_malloc.c:233)

==15005== by 0x4004D6: main (sample8.c:5)

==15005==

==15005== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 5 from 1)

==15005== malloc/free: in use at exit: 0 bytes in 0 blocks.

==15005== malloc/free: 1 allocs, 2 frees, 10 bytes allocated.

==15005== For counts of detected errors, rerun with: -v

==15005== All heap blocks were freed -- no leaks are possible.

Valgrind的局限

l Valgrind不對靜態數組(分配在棧上)進行邊界檢查。如果在程序中聲明了一個數組:

int main()

{

char x[10];

x[11] = 'a';

}

Valgrind則不會警告你,你可以把數組改為動態在堆上分配的數組,這樣就可能進行邊界檢查了。這個方法好像有點得不償失的感覺。

l Valgrind占用了更多的內存--可達兩倍于你程序的正常使用量。如果你用Valgrind來檢測使用大量內存的程序就會遇到問題,它可能會用很長的時間來運行測試。大多數情況下,這都不是問題,即使速度慢也僅是檢測時速度慢,如果你用Valgrind來檢測一個正常運行時速度就很慢的程序,這下問題就大了。 Valgrind不可能檢測出你在程序中犯下的所有錯誤--如果你不檢查緩沖區溢出,Valgrind也不會告訴你代碼寫了它不應該寫的內存。

附錄A:參數指令

基本選項:

這些選項對所有工具都有效。

-h --help

顯示所有選項的幫助,包括內核和選定的工具兩者。

--help-debug

和--help相同,并且還能顯示通常只有Valgrind的開發人員使用的調試選項。

--version

顯示Valgrind內核的版本號。工具可以有他們自已的版本號。這是一種保證工具只在它們可以運行的內核上工作的一種設置。這樣可以減少在工具和內核之間版本兼容性導致奇怪問題的概率。

-q --quiet

安靜的運行,只打印錯誤信息。在進行回歸測試或者有其它的自動化測試機制時會非常有用。

-v --verbose

顯示詳細信息。在各個方面顯示你的程序的額外信息,例如:共享對象加載,使用的重置,執行引擎和工具的進程,異常行為的警告信息。重復這個標記可以增加詳細的級別。

-d

調試Valgrind自身發出的信息。通常只有Valgrind開發人員對此感興趣。重復這個標記可以產生更詳細的輸出。如果你希望發送一個bug報告,通過-v -v -d -d生成的輸出會使你的報告更加有效。

--tool=<toolname> [default: memcheck]

運行toolname指定的Valgrind,例如,Memcheck, Addrcheck, Cachegrind,等等。

--trace-children=<yes|no> [default: no]

當這個選項打開時,Valgrind會跟蹤到子進程中。這經常會導致困惑,而且通常不是你所期望的,所以默認這個選項是關閉的。

--track-fds=<yes|no> [default: no]

當這個選項打開時,Valgrind會在退出時打印一個打開文件描述符的列表。每個文件描述符都會打印出一個文件是在哪里打開的?;厮?#xff0c;和任何與此文件描述符相關的詳細信息比如文件名或socket信息。

--time-stamp=<yes|no> [default: no]

當這個選項打開時,每條信息之前都有一個從程序開始消逝的時間,用天,小時,分鐘,秒和毫秒表示。

--log-fd=<number> [default: 2, stderr]

指定Valgrind把它所有的消息都輸出到一個指定的文件描述符中去。默認值2, 是標準錯誤輸出(stderr)。注意這可能會干擾到客戶端自身對stderr的使用, Valgrind的輸出與客戶程序的輸出將穿插在一起輸出到stderr。

--log-file=<filename>

指定Valgrind把它所有的信息輸出到指定的文件中。實際上,被創建文件的文件名是由filename、'.'和進程號連接起來的(即<filename>.<pid>),從而每個進程創建不同的文件。

--log-file-exactly=<filename>

類似于--log-file,但是后綴".pid"不會被添加。如果設置了這個選項,使用Valgrind跟蹤多個進程,可能會得到一個亂七八糟的文件。

--log-file-qualifier=<VAR>

當和--log-file一起使用時,日志文件名將通過環境變量$VAR來篩選。這對于MPI程序是有益的。更多的細節,查看手冊2.3節 "注解"。

--log-socket=<ip-address:port-number>

指定Valgrind輸出所有的消息到指定的IP,指定的端口。當使用1500端口時,端口有可能被忽略。如果不能建立一個到指定端口的連接,Valgrind將輸出寫到標準錯誤(stderr)。這個選項經常和一個Valgrind監聽程序一起使用。更多的細節,查看手冊2.3節 "注解"。

錯誤相關選項:

這些選項適用于所有產生錯誤的工具,比如Memcheck, 但是Cachegrind不行。

--xml=<yes|no> [default: no]

當這個選項打開時,輸出將是XML格式。這是為了使用Valgrind的輸出做為輸入的工具,例如GUI前端更加容易些。目前這個選項只在Memcheck時生效。

--xml-user-comment=<string>

在XML開頭 附加用戶注釋,僅在指定了--xml=yes時生效,否則忽略。

--demangle=<yes|no> [default: yes]

打開/關閉C++的名字自動解碼。默認打開。當打開時,Valgrind將嘗試著把編碼過的C++名字自動轉回初始狀態。這個解碼器可以處理g++版本為2.X,3.X或4.X生成的符號。一個關于名字編碼解碼重要的事實是,禁止文件中的解碼函數名仍然使用他們未解碼的形式。Valgrind在搜尋可用的禁止條目時不對函數名解碼,因為這將使禁止文件內容依賴于Valgrind的名字解碼機制狀態,會使速度變慢,且無意義。

--num-callers=<number> [default: 12]

默認情況下,Valgrind顯示12層函數調用的函數名有助于確定程序的位置。可以通過這個選項來改變這個數字。這樣有助在嵌套調用的層次很深時確定程序的位置。注意錯誤信息通常只回溯到最頂上的4個函數。(當前函數,和它的3個調用者的位置)。所以這并不影響報告的錯誤總數。這個值的最大值是50。注意高的設置會使Valgrind運行得慢,并且使用更多的內存,但是在嵌套調用層次比較高的程序中非常實用。

--error-limit=<yes|no> [default: yes]

當這個選項打開時,在總量達到10,000,000,或者1,000個不同的錯誤,Valgrind停止報告錯誤。這是為了避免錯誤跟蹤機制在錯誤很多的程序下變成一個巨大的性能負擔。

--error-exitcode=<number> [default: 0]

指定如果Valgrind在運行過程中報告任何錯誤時的退出返回值,有兩種情況;當設置為默認值(零)時,Valgrind返回的值將是它模擬運行的程序的返回值。當設置為非零值時,如果Valgrind發現任何錯誤時則返回這個值。在Valgrind做為一個測試工具套件的部分使用時這將非常有用,因為使測試工具套件只檢查Valgrind返回值就可以知道哪些測試用例Valgrind報告了錯誤。

--show-below-main=<yes|no> [default: no]

默認地,錯誤時的?;厮莶伙@示main()之下的任何函數(或者類似的函數像glibc的__libc_start_main(),如果main()沒有出現在?;厮葜?;這些大部分都是令人厭倦的C庫函數。如果打開這個選項,在main()之下的函數也將會顯示。

--suppressions=<filename> [default: $PREFIX/lib/valgrind/default.supp]

指定一個額外的文件讀取不需要理會的錯誤;你可以根據需要使用任意多的額外文件。

--gen-suppressions=<yes|no|all> [default: no]

當設置為yes時,Valgrind將會在每個錯誤顯示之后自動暫停并且打印下面這一行:---- Print suppression ? --- [Return/N/n/Y/y/C/c] ----這個提示的行為和--db-attach選項(見下面)相同。如果選擇是,Valgrind會打印出一個錯誤的禁止條目,你可以把它剪切然后粘帖到一個文件,如果不希望在將來再看到這個錯誤信息。當設置為all時,Valgrind會對每一個錯誤打印一條禁止條目,而不向用戶詢問。這個選項對C++程序非常有用,它打印出編譯器調整過的名字。注意打印出來的禁止條目是盡可能的特定的。如果需要把類似的條目歸納起來,比如在函數名中添加通配符。并且,有些時候兩個不同的錯誤也會產生同樣的禁止條目,這時Valgrind就會輸出禁止條目不止一次,但是在禁止條目的文件中只需要一份拷貝(但是如果多于一份也不會引起什么問題)。并且,禁止條目的名字像<在這兒輸入一個禁止條目的名字>;名字并不是很重要,它只是和-v選項一起使用打印出所有使用的禁止條目記錄。

--db-attach=<yes|no> [default: no]

當這個選項打開時,Valgrind將會在每次打印錯誤時暫停并打出如下一行:---- Attach to debugger ? --- [Return/N/n/Y/y/C/c] ---- 按下回車,或者N、回車,n、回車,Valgrind不會對這個錯誤啟動調試器。按下Y、回車,或者y、回車,Valgrind會啟動調試器并設定在程序運行的這個點。當調試結束時,退出,程序會繼續運行。在調試器內部嘗試繼續運行程序,將不會生效。按下C、回車,或者c、回車,Valgrind不會啟動一個調試器,并且不會再次詢問。注意:--db-attach=yes與--trace-children=yes有沖突。你不能同時使用它們。Valgrind在這種情況下不能啟動。

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

2002.11:如果你發送輸出到日志文件或者到網絡端口,我猜這不會讓你有任何感覺。不須理會。

--db-command=<command> [default: gdb -nw %f %p]

通過--db-attach指定如何使用調試器。默認的調試器是gdb.默認的選項是一個運行時擴展Valgrind的模板。 %f會用可執行文件的文件名替換,%p會被可執行文件的進程ID替換。

這指定了Valgrind將怎樣調用調試器。默認選項不會因為在構造時是否檢測到了GDB而改變,通常是/usr/bin/gdb.使用這個命令,你可以指定一些調用其它的調試器來替換。

給出的這個命令字串可以包括一個或多個%p %f擴展。每一個%p實例都被解釋成將調試的進程的PID,每一個%f實例都被解釋成要調試的進程的可執行文件路徑。

--input-fd=<number> [default: 0, stdin]

使用--db-attach=yes和--gen-suppressions=yes選項,在發現錯誤時,Valgrind會停下來去讀取鍵盤輸入。默認地,從標準輸入讀取,所以關閉了標準輸入的程序會有問題。這個選項允許你指定一個文件描述符來替代標準輸入讀取。

--max-stackframe=<number> [default: 2000000]

棧的最大值。如果棧指針的偏移超過這個數量,Valgrind則會認為程序是切換到了另外一個棧執行。如果在程序中有大量的棧分配的數組,你可能需要使用這個選項。valgrind保持對程序棧指針的追蹤。如果棧指針的偏移超過了這個數量,Valgrind假定你的程序切換到了另外一個棧,并且Memcheck行為與棧指

針的偏移沒有超出這個數量將會不同。通常這種機制運轉得很好。然而,如果你的程序在棧上申請了大的結構,這種機制將會表現得愚蠢,并且Memcheck將會報告大量的非法棧內存訪問。這個選項允許把這個閥值設置為其它值。應該只在Valgrind的調試輸出中顯示需要這么做時才使用這個選項。在這種情況下,它會告訴你應該指定的新的閥值。普遍地,在棧中分配大塊的內存是一個壞的主意。因為這很容易用光你的棧空間,尤其是在內存受限的系統或者支持大量小堆棧的線程的系統上,因為Memcheck執行的錯誤檢查,對于堆上的數據比對棧上的數據要高效很多。如果你使用這個選項,你可能希望考慮重寫代碼在堆上分配內存而不是在棧上分配。

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,輕微的修改模擬行為的非標準或危險方式,可能有助于模擬奇怪的特性。默認沒有提示打開。小心使用!目前已知的提示有:

l lax-ioctls: 對ioctl的處理非常不嚴格,唯一的假定是大小是正確的。不需要在寫時緩沖區完全的初始化。沒有這個,用大量的奇怪的ioctl命令來使用一些設備驅動將會非常煩人。

l enable-inner:打開某些特殊的效果,當運行的程序是Valgrind自身時。

--kernel-variant=variant1,variant2,...

處理系統調用和ioctls在這個平臺的默認核心上產生不同的變量。這有助于運行在改進過的內核或者支持非標準的ioctls上。小心使用。如果你不理解這個選項做的是什么那你幾乎不需要它。已經知道的變量有:

l 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操作計數。

總結

以上是生活随笔為你收集整理的Valgrind 安装与使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

色综合久久久久网 | 97成人在线免费视频 | 96视频在线 | 久久国产精品99久久久久久丝袜 | 五月天色丁香 | 夜夜躁日日躁 | 天堂网一区二区三区 | 波多野结衣精品在线 | 亚洲人人精品 | 成人久久亚洲 | 韩国视频一区二区三区 | 黄a在线观看 | 亚洲国产精品日韩 | 国产v欧美 | 免费看片成年人 | 国产91av视频在线观看 | 在线成人看片 | 精品国产一区二区三区av性色 | 超碰在线人人艹 | 色五月色开心色婷婷色丁香 | 国产精品99免视看9 国产精品毛片一区视频 | 美女视频黄是免费的 | 国产精品theporn | 91在线中字 | 99精品欧美一区二区三区黑人哦 | 欧美 激情在线 | 黄色一级在线免费观看 | www久久国产 | 精品九九九 | 国产成人高清 | 99在线观看免费视频精品观看 | 亚洲精品国产精品国自产 | 久热只有精品 | 国产综合精品久久 | 久久久久久久久久影视 | 日本精油按摩3 | 中文视频在线 | 欧洲黄色片 | 99精品久久久久久久久久综合 | 精品久久久久久一区二区里番 | 免费在线观看日韩视频 | 久久手机免费视频 | 最新黄色av网址 | 伊人久久国产 | 免费视频97 | 中文字幕 第二区 | 精品视频在线免费观看 | 日本aaaa级毛片在线看 | 国产精品永久 | 久久免费公开视频 | 免费中午字幕无吗 | 黄色片毛片 | 天天综合网天天 | 美女视频黄色免费 | 久久精品久久精品久久39 | 极品久久久 | 国产精品高清一区二区三区 | 国产你懂的在线 | 亚洲免费不卡 | 日韩免费三区 | 91av成人| 亚洲最新av | 天天撸夜夜操 | 国产又粗又长的视频 | 亚洲国产三级在线观看 | 成人sm另类专区 | 国产日韩欧美在线观看视频 | 2019中文在线观看 | 国产美女免费观看 | 丁香婷婷激情五月 | 久久a级片 | 国产精品免费观看网站 | 亚洲激情p | 精品亚洲欧美无人区乱码 | 久久精品导航 | 福利区在线观看 | 婷婷在线精品视频 | 久久公开免费视频 | 天天操狠狠干 | 国产永久免费高清在线观看视频 | 久草视频看看 | 久久爱导航 | 欧美污网站 | 最新的av网站 | 草久视频在线 | 国产人免费人成免费视频 | 欧美 国产 视频 | 久久久国产精品一区二区三区 | 精品亚洲一区二区 | 免费观看国产视频 | www麻豆视频 | 日韩一级片大全 | 久久美女高清视频 | 三级毛片视频 | 日韩精品aaa| 国产在线观看不卡 | 国产精品久久一区二区三区不卡 | 精品在线视频播放 | 国产精品久久9 | 99看视频在线观看 | 色婷婷视频在线 | 99精品视频观看 | 国产a视频免费观看 | 欧美精品成人在线 | 精品国产伦一区二区三区观看方式 | 国产一区二区在线免费播放 | 中文字幕在线观看一区二区 | 国产黄色免费在线观看 | 天天干夜夜爱 | 亚洲男女精品 | 一级片色播影院 | 亚洲免费在线播放视频 | 丰满少妇对白在线偷拍 | 成人网页在线免费观看 | 天天干天天摸 | 人人看97| 日本婷婷色 | 在线看片一区 | 亚洲国产人午在线一二区 | 久久久久久久久久久电影 | 国产1区2区3区在线 亚洲自拍偷拍色图 | 福利一区在线 | 九九免费精品 | 婷婷国产v亚洲v欧美久久 | 中文字幕免费观看全部电影 | 色网站黄 | wwwav视频| 97小视频 | 亚洲精品欧洲精品 | 日韩欧美精品在线 | 久久欧美在线电影 | 国产91大片 | 亚洲午夜精品久久久久久久久久久久 | 日b黄色片 | 97超碰人人澡人人爱 | 久久视频 | 麻豆系列在线观看 | 欧美一区二区视频97 | 99亚洲精品在线 | 婷婷五情天综123 | 欧美日韩在线播放 | 最新91在线视频 | av在线免费在线观看 | 黄色在线小网站 | 日韩在线观看网站 | 久草免费新视频 | 日韩欧美观看 | 亚洲电影图片小说 | 在线观看精品黄av片免费 | 国产h片在线观看 | 日日夜夜av | 国产黄色片免费在线观看 | 综合久久精品 | 色综合国产| 最近中文字幕在线 | 国产午夜精品福利视频 | www.97视频| 天天操夜夜摸 | 欧美a级免费视频 | 国产精品精品 | 免费看亚洲毛片 | 色婷婷av一区 | 日日日爽爽爽 | 国产又粗又猛又爽又黄的视频免费 | 国产精品久久久久一区二区国产 | 天天碰天天操 | 91免费高清视频 | 婷婷国产v亚洲v欧美久久 | 亚洲精品男人的天堂 | 日韩中文字幕a | 五月综合婷 | 日韩精品一区二区免费视频 | 一级理论片在线观看 | 亚洲 欧美日韩 国产 中文 | 国产偷国产偷亚洲清高 | 国产成人精品网站 | 香蕉影院在线观看 | 开心婷婷色 | 国产精品久久久久久久久久久免费 | 在线免费视 | 亚洲涩涩一区 | 狠狠干狠狠艹 | 欧美日韩视频 | 国产精品 国产精品 | www.啪啪.com| 欧美福利在线播放 | 亚洲动漫在线观看 | 天天操综合网站 | 嫩草伊人久久精品少妇av | 久99热| 丝袜网站在线观看 | 久久精品波多野结衣 | 手机看片国产 | 欧美亚洲成人xxx | 又紧又大又爽精品一区二区 | 国产很黄很色的视频 | 中文在线a√在线 | 色偷偷网站视频 | 成人动图 | 国产精品视频专区 | 亚洲国内精品在线 | 日日干夜夜草 | 国产电影一区二区三区四区 | 在线免费性生活片 | 国产r级在线观看 | 在线观看成人av | 国产97视频在线 | 国内精品久久久精品电影院 | 91大神电影 | 狠狠做六月爱婷婷综合aⅴ 日本高清免费中文字幕 | 99热精品免费观看 | 日韩mv欧美mv国产精品 | 国产最顶级的黄色片在线免费观看 | 精品99在线观看 | 99热精品国产 | 91高清免费看| 97视频久久久 | 99视频在线观看免费 | 色综合激情网 | 亚洲欧美成人在线 | 免费看的黄色小视频 | 在线视频你懂 | 伊人成人久久 | 国产精品v欧美精品v日韩 | 国产精品久久久久婷婷 | 亚洲首页 | 国产手机在线视频 | 伊人黄色网 | 日本久久91| 色噜噜日韩精品一区二区三区视频 | 国产二区视频在线观看 | www.激情五月.com | 综合激情网 | 美女免费黄视频网站 | 久在线观看视频 | 久草a视频| 成人av免费播放 | 国产视频日韩 | 韩国三级一区 | 在线看片一区 | 三级黄色大片在线观看 | 国内久久久久久 | 亚洲国产精品久久久久久 | 免费黄色a级毛片 | 亚洲精品综合在线 | 最新国产精品久久精品 | 特级毛片网| av电影av在线 | 国内精品久久久久久久影视麻豆 | 在线91播放 | 91成人短视频在线观看 | 超碰在线最新 | 国产成人精品亚洲 | 91精品啪在线观看国产线免费 | zzijzzij日本成熟少妇 | 中文字幕在线观看亚洲 | 一区二区三区在线观看免费视频 | 激情黄色一级片 | 国产高清在线观看 | 西西44人体做爰大胆视频 | 看污网站| 亚洲成av人片在线观看 | 国产一级一片免费播放放 | 欧美色图88| 精品久久久久久久久久岛国gif | 永久免费视频国产 | 成人av中文字幕在线观看 | 高清日韩一区二区 | 美女免费电影 | 日韩在观看线 | 国产精品情侣视频 | 天天天干天天射天天天操 | 爱爱av网站 | 91最新网址 | 成年人免费看片网站 | 国产成人精品999 | 久久精视频 | 亚洲 欧美 精品 | 手机在线欧美 | 国产96在线观看 | 久久久国产电影 | 久久99精品国产 | 国产精品69av | 国产剧情一区二区在线观看 | 国产精品久久 | 国产精品欧美在线 | 精品一区二区久久久久久久网站 | 成人av在线直播 | 手机成人免费视频 | 日韩欧美在线视频一区二区三区 | 精品一区二区免费 | 国产精品一区二区三区免费看 | 69久久久| 99精品国自产在线 | 在线黄网站 | 草久在线观看视频 | 成人a大片 | 亚洲美女视频网 | 国产精品va在线观看入 | 99色精品视频 | 国产伦精品一区二区三区四区视频 | 国产成人av免费在线观看 | 麻豆免费视频观看 | 97超在线视频 | 中文字幕免费一区 | 中文在线a在线 | 又爽又黄又刺激的视频 | 国产亚洲精品久久久久秋 | 亚洲免费在线播放视频 | 欧美日韩精品综合 | 国产精品久久久777 成人手机在线视频 | 天堂va在线高清一区 | 免费在线观看中文字幕 | 五月激情天 | 午夜久久美女 | 亚洲精品麻豆 | 国产精品久久一卡二卡 | 色婷婷色 | 成人手机在线视频 | 欧美精品久久久久久久久老牛影院 | 国产精品嫩草影院9 | 麻豆精品在线视频 | 天天激情综合网 | 欧美日韩xx| 日狠狠 | 日韩欧美精品一区二区 | 99久久婷婷国产综合亚洲 | 日韩黄色软件 | 亚洲开心激情 | 欧洲精品码一区二区三区免费看 | 免费一级日韩欧美性大片 | 综合激情| 奇米网8888| av日韩国产 | 国产一线二线三线性视频 | av高清影院 | 尤物97国产精品久久精品国产 | 在线看的av网站 | 91探花国产综合在线精品 | 国产成人在线观看免费 | 精品国产电影一区 | 一区二区三区 亚洲 | 色婷婷狠 | 国产一区二区三区高清播放 | 999毛片| 超碰99在线 | 国产v在线播放 | 国产黑丝一区二区 | 日韩一级黄色av | av综合网址| 91视频91蝌蚪 | 亚洲精品高清在线观看 | 狠狠狠色丁香婷婷综合久久88 | 在线观看国产高清视频 | 久草在线观看资源 | 麻豆国产露脸在线观看 | 成人a视频 | 五月花婷婷 | 午夜精品中文字幕 | 亚洲精品久久久久久久不卡四虎 | 丁香婷婷激情啪啪 | 91资源在线免费观看 | 狠狠88综合久久久久综合网 | 激情五月婷婷 | 激情综合网五月婷婷 | 色wwww| 日韩com| 亚洲成av人影院 | 亚洲视频电影在线 | 久久精品xxx | 日韩videos | 色a综合| av在线永久免费观看 | 国产九九九视频 | 中文字幕乱码电影 | 亚洲综合小说电影qvod | 亚洲日本黄色 | 国产无遮挡又黄又爽在线观看 | 91在线资源 | 97夜夜澡人人爽人人免费 | 午夜精品一区二区三区在线观看 | av福利免费 | 成人黄色在线 | 香蕉视频亚洲 | 96久久精品| 国产 一区二区三区 在线 | 国内综合精品午夜久久资源 | 日韩专区在线播放 | 国产在线观看免费观看 | 婷婷视频在线 | 国产精品毛片久久 | 亚洲精品自拍视频在线观看 | 亚洲激情av | 久久久亚洲电影 | 日韩欧美一区二区三区视频 | 中国一级片免费看 | 精品a视频 | 国产中文字幕视频在线观看 | 波多野结衣最新 | 91 在线视频 | 欧美色操| 亚洲激情视频 | 欧美 亚洲 另类 激情 另类 | 人人爱人人射 | 国产不卡免费视频 | 精品亚洲免费 | 天天操狠狠操网站 | www.99热精品 | 伊人五月天婷婷 | 麻豆国产网站 | 欧美日韩中文在线观看 | 国产精品男女视频 | 人人添人人澡人人澡人人人爽 | 黄色在线视频网址 | av超碰在线 | 国产韩国精品一区二区三区 | 波多野结衣视频一区二区三区 | 亚洲精品国偷自产在线99热 | 日本一区二区三区视频在线播放 | 久久91久久久久麻豆精品 | 免费亚洲黄色 | 亚洲砖区区免费 | 久久国产一二区 | 在线视频 一区二区 | 成人久久久电影 | www.com久久 | 国产精品资源在线 | 久久亚洲欧美 | 国产亚洲精品精品精品 | 国产亚洲在线观看 | 九九久久久久99精品 | 欧美日韩99 | a级片在线播放 | 不卡的av电影在线观看 | 久久国产精品免费一区 | 亚洲 综合 精品 | 97超碰.com | 久久综合9988久久爱 | 色狠狠综合天天综合综合 | 91喷水 | 最新精品视频在线 | 国产成人a亚洲精品 | 综合国产在线观看 | 日韩一区二区在线免费观看 | 最新超碰 | 美腿丝袜一区二区三区 | 日本黄色黄网站 | 亚洲精品自拍视频在线观看 | 99久久99久久精品国产片 | 天天做天天爽 | 在线成人国产 | 日韩理论片在线观看 | 黄色三级在线 | 久久极品 | 青草视频免费观看 | 久久男人中文字幕资源站 | 久久国产经典 | 亚洲第一中文网 | 久久国产精品影视 | 国产黄免费看 | 波多野结衣电影久久 | 激情欧美一区二区三区 | 视频在线日韩 | 亚洲激情小视频 | 中文乱码视频在线观看 | 免费网站看v片在线a | 国产群p | 久久精品婷婷 | 99在线高清视频在线播放 | 六月婷婷久香在线视频 | 五月天天在线 | 9在线观看免费高清完整版 玖玖爱免费视频 | 99久热在线精品视频成人一区 | 麻豆视屏 | 麻豆国产电影 | 激情偷乱人伦小说视频在线观看 | 成人久久综合 | 99在线观看 | 久操中文字幕在线观看 | 久久艹艹| 婷婷久久久久 | 国产做a爱一级久久 | 五月情婷婷 | 国产999精品久久久影片官网 | 欧美最新大片在线看 | 99久久精品免费看 | 国产专区精品 | 久久久午夜电影 | 中文字幕在线观看网站 | 久久视频网址 | 亚洲国产欧美在线人成大黄瓜 | 亚洲精品视频在线观看免费视频 | 久久午夜电影院 | 国产69精品久久99不卡的观看体验 | 1024手机看片国产 | 亚洲综合视频在线 | 久久综合狠狠 | 国产伦理一区二区三区 | 狠狠综合久久av | 免费av一级电影 | 免费在线观看日韩视频 | 国产一级视频免费看 | 久久99精品国产麻豆宅宅 | 久久久久国产一区二区 | 欧美激情精品久久久久久免费印度 | 日韩中文字幕电影 | 在线观看香蕉视频 | 国产精品久久久久久久久久久久冷 | 97超碰中文字幕 | 免费视频你懂得 | 特黄色大片 | 免费看的国产视频网站 | 亚洲欧美激情插 | 丰满少妇久久久 | 色播六月天 | 国产黄a三级三级三级三级三级 | 国产黄色免费看 | 精品毛片一区二区免费看 | 午夜精品久久久久久99热明星 | 国产精品午夜在线观看 | 天天操夜夜拍 | 99r在线观看 | 日韩久久视频 | 国产一区二区中文字幕 | 欧美日韩性生活 | 国产伦理久久精品久久久久_ | 亚洲a网 | 国产热re99久久6国产精品 | 亚州精品一二三区 | 超碰人人做 | 国产精品国产三级国产aⅴ9色 | 一区二区三高清 | 五月婷综合| 国产精品中文在线 | 国色天香在线观看 | 日日日视频 | 亚洲爱爱视频 | 综合中文字幕 | 亚洲精品视频免费在线观看 | 国产一区二区三区在线免费观看 | 成人在线黄色 | 亚洲成人av片在线观看 | 日韩一区精品 | 美女福利视频一区二区 | 日本中文字幕系列 | 天天干天天操天天操 | 国产精品激情 | 亚洲三级网 | 久久综合久久综合久久综合 | 日韩电影中文字幕 | 韩日精品视频 | 午夜视频在线观看一区二区三区 | 天天躁天天狠天天透 | 九九久久国产精品 | 国产免费成人av | 亚洲蜜桃在线 | 日韩精品免费一区二区三区 | 亚洲一级黄色片 | 国产人成精品一区二区三 | 激情影院在线观看 | 91精品免费在线 | 九九九九精品九九九九 | 日韩两性视频 | 在线播放亚洲激情 | 五月综合激情 | 97国产精品视频 | 国产不卡在线观看视频 | 97色综合 | 深夜国产福利 | 黄色最新网址 | 伊人一级| 日韩免费视频线观看 | 天天做天天爱天天综合网 | 人人爽人人爽人人爽学生一级 | 久草在线视频资源 | 在线天堂中文在线资源网 | 不卡的av在线 | www久久国产 | 成人av中文字幕在线观看 | 伊人天天狠天天添日日拍 | 成人免费一级 | 91精品亚洲影视在线观看 | 日日操操操 | 色婷婷狠狠操 | 激情伊人五月天久久综合 | 69av国产 | 久久久91精品国产一区二区精品 | 91麻豆精品国产91久久久更新时间 | 久久久久久久久精 | 欧美日韩电影在线播放 | 在线观看中文字幕av | 2021国产精品 | 国产一区91| 国产18精品乱码免费看 | 91社区国产高清 | 国产亚洲精品成人 | 亚洲国产精品va在线看 | 日韩欧美国产免费播放 | 久久免费视频一区 | 婷婷丁香在线 | 欧美大荫蒂xxx | 黄色字幕网 | 欧美尹人 | 美女免费视频网站 | 日韩xxx视频 | 久久精品资源 | 国产精品免费观看久久 | 欧美精品久久久久久久久久 | 在线国产能看的 | 中文字幕精品三级久久久 | 热久久最新地址 | 日本乱码在线 | 少妇bbw揉bbb欧美 | 77国产精品 | 伊人中文字幕在线 | 久久久久久高潮国产精品视 | 中文在线a在线 | 欧美在线视频免费 | 97国产精品久久 | 国产99久久九九精品免费 | 欧美国产91| 日韩精品一区二区在线视频 | 色婷婷亚洲综合 | 福利视频一区二区 | 欧美91av| 亚洲天堂精品视频 | 国产高清av在线播放 | 国产精品一区二区三区四 | 国产成人av在线影院 | 国产一级在线观看视频 | 国产h在线观看 | 亚洲精品国偷拍自产在线观看 | 激情伊人| 国产成人精品综合久久久久99 | 精品嫩模福利一区二区蜜臀 | 在线视频手机国产 | 成人手机在线视频 | 国产99久久 | 久久九九网站 | 午夜精品一区二区三区免费视频 | 精品国产乱码久久久久久久 | 亚洲性xxxx| 91在线视频精品 | 人九九精品 | 一区二区三区在线观看免费 | 伊人久操| 精品久久一区二区三区 | 中文字幕在线免费看 | 99久久超碰中文字幕伊人 | 日韩久久网站 | 亚洲六月丁香色婷婷综合久久 | 91av在线免费观看 | 超碰国产97 | 免费午夜视频在线观看 | 在线播放 日韩专区 | 国产.精品.日韩.另类.中文.在线.播放 | 久久成人黄色 | 亚洲精品视 | 五月天久久 | 国产乱对白刺激视频不卡 | 在线观看理论 | 男女拍拍免费视频 | 在线播放日韩 | 在线观看免费高清视频大全追剧 | 国产精品原创视频 | 黄色视屏免费在线观看 | 国产一级片不卡 | 天天综合网在线观看 | 日韩av资源在线观看 | 91原创在线观看 | 色爱成人网 | 久久开心激情 | 在线免费观看一区二区三区 | 亚洲一级黄色大片 | 日韩欧美在线中文字幕 | 在线免费试看 | 久久国产精品视频观看 | 欧美日韩精品在线一区二区 | av免费高清观看 | 人人爽人人片 | 日韩欧美高清在线 | 国产男女免费完整视频 | 午夜体验区 | av中文字幕剧情 | 911精品视频 | 国内视频一区二区 | 黄色毛片在线看 | 波多在线视频 | 精品欧美一区二区三区久久久 | a黄色大片 | 五月婷婷六月丁香 | 国产一区在线免费观看 | 99久久久久免费精品国产 | 日本精品久久久久 | 国产精品一区二区在线观看 | 成人在线网站观看 | 久久精品国产一区二区三区 | 99热国产在线中文 | 婷婷综合久久 | 日韩欧美在线观看一区二区三区 | 久久99视频 | 免费观看av网站 | 日韩一区二区三区免费视频 | 日韩三级视频 | 国产91成人| 亚洲视频电影在线 | 国产精品视频专区 | 久久精品久久久久电影 | 日韩精品视频在线观看免费 | 亚洲精品视频国产 | av在线播放快速免费阴 | 超碰97在线看 | 日韩欧美高清一区二区 | 久久免费美女视频 | av网站免费线看精品 | 国产精品v欧美精品v日韩 | 精品久久久久久久久久久久久久久久 | 18性欧美xxxⅹ性满足 | 香蕉日日 | 99视频这里有精品 | 国产在线观看免 | 亚洲精品美女在线 | 欧美日韩国产一区二区在线观看 | 久久艹欧美 | 免费网站在线观看人 | 天天久久综合 | 久久人人爽人人爽人人片av免费 | 黄色大片日本免费大片 | 国产精品久久一区二区三区不卡 | 欧美日韩一区二区视频在线观看 | 国产一区在线免费观看视频 | 18国产精品福利片久久婷 | 天天草天天爽 | 99精品在线免费 | 天天操天天舔天天干 | 啪嗒啪嗒免费观看完整版 | 亚洲精品久久久久久久蜜桃 | 99av国产精品欲麻豆 | 日韩精品久久一区二区三区 | 97色婷婷| 日韩中文字幕国产 | 91在线观看欧美日韩 | 日韩av电影网站在线观看 | 丁香视频五月 | 亚洲一级理论片 | 国产不卡在线看 | 西西4444www大胆艺术 | 亚洲影院国产 | 在线播放第一页 | 亚洲精品黄| 男女全黄一级一级高潮免费看 | 超碰97人人干 | 国产原厂视频在线观看 | 国产精品a久久久久 | 欧美综合久久久 | 日韩在线免费看 | 超碰在线公开 | 91精品视屏 | 色偷偷男人的天堂av | av丝袜美腿| 超碰在线人人爱 | 最近更新好看的中文字幕 | 久久视频6| 狠狠干干 | 天天综合网天天 | 最新日韩在线观看视频 | 91一区啪爱嗯打偷拍欧美 | 欧美在线91 | 91av免费看| 国产精品成人aaaaa网站 | 五月天激情电影 | 欧美激情第十页 | 在线观看www91 | 综合久色 | 亚洲精品2区 | 91一区二区三区久久久久国产乱 | 日韩高清国产精品 | 亚洲精品高清视频在线观看 | 中文字幕免费高清在线 | 精品国产一区二区在线 | 综合在线观看 | 天天操天天射天天爽 | 成人在线视频一区 | 麻豆视频免费入口 | 伊人五月综合 | 日韩免费看视频 | 欧美色图狠狠干 | 国产美女网站视频 | 欧美老人xxxx18 | 亚洲精品在线观看的 | 91亚洲精品久久久蜜桃借种 | 久草网首页 | 成人三级网站在线观看 | 日韩中文字幕在线观看 | 中午字幕在线观看 | 91九色国产蝌蚪 | 国内少妇自拍视频一区 | 狠狠做六月爱婷婷综合aⅴ 日本高清免费中文字幕 | 欧美a视频在线观看 | 欧美91视频 | 国产aa精品 | 天天爽夜夜爽人人爽一区二区 | 中文字幕专区高清在线观看 | 国产精品va在线观看入 | 美女视频黄免费网站 | 欧美精品亚洲精品日韩精品 | 亚洲精品综合一区二区 | 天天操夜夜做 | 一级黄色在线免费观看 | 天天玩天天干 | 欧美日韩在线观看一区二区三区 | 韩国av免费在线观看 | 91丨九色丨蝌蚪丨对白 | 免费在线观看日韩欧美 | 国产成人久久精品77777 | 最新亚洲视频 | 日本动漫做毛片一区二区 | 婷婷在线免费视频 | 日韩91精品| 丁香婷婷综合网 | 国产精品久久久久久麻豆一区 | 免费国产在线精品 | 亚洲免费在线观看视频 | 国产美女免费 | 国产一区免费在线观看 | 亚洲精品国产精品99久久 | 日韩高清不卡一区二区三区 | 中文字幕免费高清av | 国产精品毛片一区二区 | 亚洲春色综合另类校园电影 | 黄a在线观看 | 欧美色图视频一区 | 国产成人av一区二区三区在线观看 | 91精品导航 | 一级黄网 | 少妇精69xxtheporn | 国产三级久久久 | 久久看片| 精品在线观看视频 | 在线免费观看一区二区三区 | 欧美性色综合网 | 96国产精品视频 | 国内一区二区视频 | 成人综合日日夜夜 | 黄色a大片 | 一区二区欧美激情 | 日韩高清av在线 | 国产精品18久久久久久久 | 精品国产电影 | 探花视频在线观看免费版 | 二区三区在线观看 | 欧美日韩高清在线一区 | 日韩av在线一区二区 | 最新日韩在线 | 成人国产精品入口 | 国产精品正在播放 | 97精品国自产拍在线观看 | 亚洲在线| 丁香六月五月婷婷 | 日韩欧美视频在线免费观看 | 国产综合在线观看视频 | 成人黄色大片在线免费观看 | 国产欧美综合视频 | 午夜在线免费观看 | 人人视频网站 | 国产日韩精品在线观看 | 蜜臀久久99精品久久久无需会员 | 国产在线中文字幕 | 超碰人人草人人 | 日日夜夜精品视频 | 亚洲精品视频在线观看免费视频 | 久久欧美综合 | 国产短视频在线播放 | 精壮的侍卫呻吟h | 国产精品美女999 | 国产黄在线免费观看 | 一本一道久久a久久综合蜜桃 | 国产精品理论片在线播放 | 色综合久久天天 | 三级黄色理论片 | 国产成本人视频在线观看 | 久久国产精品99久久人人澡 | 欧美日韩破处 | 精品女同一区二区三区在线观看 | 精品99免费 | 国产亚洲精品久久久网站好莱 | 91久久丝袜国产露脸动漫 | 久久国产精品影视 | 久久久久激情 | 中文字幕亚洲欧美日韩2019 | 日韩精品电影在线播放 | 夜色资源网 | 日韩欧美xxx | av短片在线观看 | 香蕉网在线播放 | 麻豆一二三精选视频 | 国产精品久久一卡二卡 | 欧美成人高清 | 久久久国产精品网站 | 69国产在线观看 | 亚洲欧美国内爽妇网 | 国产精品久久久久久高潮 | 亚洲最大色| 性色av一区二区三区在线观看 | 精品久久久久国产免费第一页 | 亚洲理论视频 | 日本一区二区三区免费观看 | 久草网在线观看 | 国产精品高潮在线观看 | 91久久奴性调教 | 精品国产不卡 | 在线观看深夜福利 | 久久精选视频 | 久久久久五月 | 91人人爽人人爽人人精88v | 国产精品成人一区 | 国产又粗又猛又黄又爽 | 97在线精品国自产拍中文 | 欧美日韩免费观看一区二区三区 | 日韩天堂在线观看 | 9在线观看免费高清完整版在线观看明 | 国产粉嫩在线观看 | 久操操 | 日日日操操 | 国产精品18久久久久白浆 | 成人免费视频网址 | 亚洲视屏一区 | 超碰成人网 | 在线亚洲人成电影网站色www | 亚洲综合在线五月 | 五月婷婷av在线 | 日韩av片无码一区二区不卡电影 | 成年人视频免费在线播放 | 91精品啪在线观看国产 | 国产精品久久久区三区天天噜 | 99在线精品免费视频九九视 | 玖玖精品在线 | 久草香蕉在线视频 | 97在线免费视频 | 成人aaa毛片 | 国产日韩在线一区 | 最新av网站在线观看 | 久久,天天综合 | 丁香花在线观看免费完整版视频 | 欧美天堂视频在线 | 成人免费观看视频网站 | 碰超在线97人人 | 免费的国产精品 | 久久久久国产成人免费精品免费 | 欧美一级片在线 | 久久精品综合 | 国产精品久久久网站 | 夜夜爽夜夜操 | 97精品国产一二三产区 | 亚洲精品国产拍在线 | 国产裸体永久免费视频网站 | 午夜精品久久久久久中宇69 | 99在线精品免费视频九九视 | 日韩久久激情 | 久久久久久综合网天天 | 色婷婷综合久久久久中文字幕1 | 成人国产在线 | 欧美在线观看视频 | 日韩大片在线 | 国产一区视频在线播放 | 亚洲网站在线 | 91男人影院| 狠狠狠色丁香婷婷综合久久五月 | 青草视频在线免费 | 久久久久久国产一区二区三区 | 免费观看的黄色片 | 日韩一级片大全 | 亚洲三级性片 | 久久这里只有精品久久 | 国产又粗又猛又爽 | 天天操天天干天天玩 | 在线观看国产高清视频 | 在线中文日韩 | 激情xxxx | 免费看一及片 | 日韩中文字幕免费电影 | 精品美女久久久久 | 四虎国产精品免费 | 91九色自拍 | 97色国产| 亚洲天堂网站 | 六月丁香激情综合 | 国产成人精品久久亚洲高清不卡 | 美女网站黄免费 | 国产成人av在线 | 在线看片成人 | 麻豆果冻剧传媒在线播放 | 日韩影视精品 | 亚洲欧美国产日韩在线观看 | 在线高清一区 | 国产资源精品在线观看 | 日本巨乳在线 | 久久久久女人精品毛片 |