亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁(yè) > 編程 > C > 正文

c語(yǔ)言中調(diào)試工具的用法

2020-02-24 14:30:13
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

相信大家都想過(guò)我們寫(xiě)錯(cuò)程序之后是不是只有編譯的時(shí)候才能發(fā)現(xiàn),那么我們?cè)谖淳幾g的時(shí)候有沒(méi)有什么辦法幫我們檢查錯(cuò)誤呢?現(xiàn)在我們就去看看c語(yǔ)言中調(diào)試工具的用法。

splint工具.用一個(gè)最簡(jiǎn)單的HELLO WORLD來(lái)表述:
=====================================

?

/*錯(cuò)誤很明顯*/
#include <stdio.h>

?

int main(void)
{
?? print("hello world/n", s);
?? return
}


-----------------------------------------------------
casio$ splint -strict foo.c
Splint 3.1.1 --- 03 Nov 2006

?

foo.c: (in function main)
foo.c:5:2: Unrecognized identifier: print <-------找到print不是printf
Identifier used in code has not been declared. (Use -unrecog to inhibit
warning)
foo.c:5:25: Unrecognized identifier: s <-------未定義變量s
foo.c:5:2: Statement has no effect (possible undected modification through call
to unconstrained function print): print("hello wor... <---------不存在prinf函數(shù)
Statement has no visible effect --- no values are modified. It may modify
something through a call to an unconstrained function. (Use -noeffectuncon to
inhibit warning)
foo.c:7:2: Parse Error. (For help on parse errors, see splint -help <------對(duì)應(yīng)return語(yǔ)法錯(cuò)誤
parseerrors.)
*** Cannot continue.

=============================================

cxref

cxref程序分析C源代碼并且生成一個(gè)交叉引用。他顯示了每一個(gè)符號(hào)在程序中何處被提到。他使用標(biāo)記星號(hào)的每一個(gè)符號(hào)定義位置生成一個(gè)排序列表,如下所示:

SYMBOL FILE FUNCTION LINE
BASENID prog.c — *12 *96 124 126 146 156 166
BINSIZE prog.c — *30 197 198 199 206
BUFMAX prog.c — *44 45 90
BUFSIZ /usr/include/stdio.h — *4
EOF /usr/include/stdio.h — *27
argc prog.c — 36
prog.c main *37 61 81
argv prog.c — 36
prog.c main *38 61
calldata prog.c — *5
prog.c main 64 188
calls prog.c — *19
prog.c main 54

在作者的機(jī)子上,前面的輸入在程序的源碼目錄中使用下面的命令來(lái)生成的:

$ cxref *.c *.h

但是實(shí)際的語(yǔ)法因?yàn)榘姹镜牟煌煌?。查看我們系統(tǒng)的文檔或是man手冊(cè)可以得到更多的信息。

cflow <使用時(shí)輸入cflow *.c就可以了.可以馬上搞清除什么函數(shù)調(diào)用了什么.>

cflow程序會(huì)輸出一個(gè)函數(shù)調(diào)用樹(shù),這是一個(gè)顯示函數(shù)調(diào)用關(guān)系的圖表。這對(duì)于查看程序結(jié)構(gòu)來(lái)了解他是如何操作的以及了解對(duì)于一個(gè)函數(shù)有哪些影響是十分有用的。一些版本的cflow可以同時(shí)作用于目標(biāo)文件與源代碼。查看手冊(cè)頁(yè)我們可以了解更為詳細(xì)的操作。

下面是由一個(gè)cflow版本(cflow-2.0)所獲得的例子輸出,這個(gè)版本的cflow版本是由Marty Leisner維護(hù)的,并且可以網(wǎng)上得到。

1 file_ungetc {prcc.c 997}
2 main {prcc.c 70}
3 getopt {}
4 show_all_lists {prcc.c 1070}
5 display_list {prcc.c 1056}
6 printf {}
7 exit {}
8 exit {}
9 usage {prcc.c 59}
10 fprintf {}
11 exit {}

從這個(gè)輸出中我們可以看到main函數(shù)調(diào)用show_all_lists,而show_all_lists調(diào)用display_list,display_list本身調(diào)用printf。

這個(gè)版本cflow的一個(gè)選項(xiàng)就是-i,這會(huì)生成一個(gè)反轉(zhuǎn)的流程圖。對(duì)于每一個(gè)函數(shù),cflow列出調(diào)用他的其他函數(shù)。這聽(tīng)起來(lái)有些復(fù)雜,但是實(shí)際上并不是這樣。下面是一個(gè)例子。

19 display_list {prcc.c 1056}
20 show_all_lists {prcc.c 1070}
21 exit {}
22 main {prcc.c 70}
23 show_all_lists {prcc.c 1070}
24 usage {prcc.c 59}
...
74 printf {}
75 display_list {prcc.c 1056}
76 maketag {prcc.c 487}
77 show_all_lists {prcc.c 1070}
78 main {prcc.c 70}
...
99 usage {prcc.c 59}
100 main {prcc.c 70}

例如,這告訴我們調(diào)用exit的函數(shù)有main,show_all_lists與usage。

使用prof/gprof執(zhí)行性能測(cè)試

當(dāng)我們?cè)囍粉櫼粋€(gè)程序的性能問(wèn)題時(shí)一個(gè)十分有用的技術(shù)就是執(zhí)行性能測(cè)試(execution profiling)。通常被特殊的編譯器選項(xiàng)以及輔助程序所支持,一個(gè)程序的性能顯示他在哪里花費(fèi)時(shí)間。

prof程序(以及其GNU版本gprof)會(huì)由性能測(cè)試程序運(yùn)行時(shí)所生成的執(zhí)行追蹤文件中輸出報(bào)告。一個(gè)可執(zhí)行的性能測(cè)試是由指定-p選項(xiàng)(對(duì)prof)或是-pg選項(xiàng)(對(duì)gprof)所生成的:

$ cc -pg -o program program.c

這個(gè)程序是使用一個(gè)特殊版本的C庫(kù)進(jìn)行鏈接的并且被修改來(lái)包含監(jiān)視代碼。對(duì)于不同的系統(tǒng)結(jié)果也許不同,但是通常是由安排頻繁被中斷的程序以及記錄執(zhí)行位置來(lái)做到的。監(jiān)視數(shù)據(jù)被寫(xiě)入當(dāng)前目錄中的一個(gè)文件,mon.out(對(duì)于gprof為gmon.out)。

$ ./program
$ ls -ls
2 -rw-r--r-- 1 neil users 1294 Feb 4 11:48 gmon.out

然后用命令:gprof ./program可以查看到下面的報(bào)告

prof/gprof程序讀取這些監(jiān)視數(shù)據(jù)并且生成一個(gè)報(bào)告。查看其手冊(cè)頁(yè)可以詳細(xì)了解其程序選項(xiàng)。下面以gprof輸出作為一個(gè)例子:

cumulative self self total
time seconds seconds calls ms/call ms/call name
18.5 0.10 0.10 8664 0.01 0.03 _doscan [4]
18.5 0.20 0.10 mcount (60)
14.8 0.28 0.08 43320 0.00 0.00 _number [5]
9.3 0.33 0.05 8664 0.01 0.01 _format_arg [6]
7.4 0.37 0.04 112632 0.00 0.00 _ungetc [8]
7.4 0.41 0.04 8757 0.00 0.00 _memccpy [9]
7.4 0.45 0.04 1 40.00 390.02 _main [2]
3.7 0.47 0.02 53 0.38 0.38 _read [12]
3.7 0.49 0.02 w4str [10]
1.9 0.50 0.01 26034 0.00 0.00 _strlen [16]
1.9 0.51 0.01 8664 0.00 0.00 strncmp [17]

內(nèi)存調(diào)試

富含bug而且難于跟蹤調(diào)試的一個(gè)區(qū)域就是動(dòng)態(tài)內(nèi)存分配。如果我們編譯一個(gè)使用malloc與free來(lái)分配內(nèi)存的程序,很重要的一點(diǎn)就是我們要跟蹤我們所分配的內(nèi)存塊,并且保證不要使用已經(jīng)釋放的內(nèi)存塊。

通常,內(nèi)存是由malloc分配并且賦給一個(gè)指針變量的。如果指針變量被修改了,而又沒(méi)有其他的指針來(lái)指向這個(gè)內(nèi)存塊,他就會(huì)變?yōu)椴豢稍L問(wèn)的內(nèi)存塊。這就是一個(gè)內(nèi)存泄露,而且會(huì)使得我們程序尺寸變大。如果我們泄露了大量的內(nèi)存,那么我們的系統(tǒng)就會(huì)變慢并且會(huì)最終用盡內(nèi)存。

如 果我們?cè)诔鲆粋€(gè)分配的內(nèi)存塊的結(jié)束部分(或是在一個(gè)內(nèi)存塊的開(kāi)始部分)寫(xiě)入數(shù)據(jù),我們很有可能會(huì)破壞malloc庫(kù)來(lái)跟蹤分配所用的數(shù)據(jù)結(jié)構(gòu)。在這種情 況下,在將來(lái)的某個(gè)時(shí)刻,調(diào)用malloc,或者甚至是free,就會(huì)引起段錯(cuò)誤,而我們的程序就會(huì)崩潰。跟蹤錯(cuò)誤發(fā)生的精確點(diǎn)是非常困難的,因?yàn)楹芸赡?他在引起崩潰的事件發(fā)生以前很一段時(shí)間就已經(jīng)發(fā)生了。

不必奇怪的是,有一些工具,商業(yè)或是自由的,可以有助于處理這兩種問(wèn)題類型。例如,有許多不同的malloc與free版本,其中的一些包含額外的代碼在分配與回收上進(jìn)行檢測(cè)嘗試檢測(cè)一個(gè)內(nèi)存塊被釋放兩次或是其他一些濫用類型的情況。

ElectricFence

ElectricFence 庫(kù)是由Bruce Perens開(kāi)發(fā)的,并且在一些Linux發(fā)行版本中作為一個(gè)可選的組件來(lái)提供,例如RedHat,而且已經(jīng)可以在網(wǎng)絡(luò)上獲得。他嘗試使用Linux的虛 擬內(nèi)存工具來(lái)保護(hù)malloc與free所使用的內(nèi)存,從而在內(nèi)存被破壞時(shí)終止程序。

試驗(yàn)--ElectricFence

下面的程序,efence.c,使用malloc分配一個(gè)內(nèi)存塊,然后在超出塊結(jié)束處寫(xiě)入數(shù)據(jù)。讓我們看一下會(huì)發(fā)生什么情況。

?

#include <stdio.h>
#include <stdlib.h>
int main()
{
?? char *ptr = (char *) malloc(1024);
?? ptr[0] = 0;
?? /* Now write beyond the block */
?? ptr[1024] = 0;/*寫(xiě)非法*/
?? exit(0);
}


當(dāng)我們編譯運(yùn)行這個(gè)程序時(shí),我們并不會(huì)看到進(jìn)一步的行為。然而,似乎malloc所分配的內(nèi)存區(qū)域有一些問(wèn)題,而我們實(shí)際上已經(jīng)遇到了麻煩。

?

$ cc -o efence efence.c
$ ./efence
$

然而,如果我們使用ElectricFence庫(kù),libefence.a來(lái)鏈接這個(gè)程序,我們就會(huì)得到一個(gè)即時(shí)的響應(yīng)。

$ cc -o efence efence.c -lefence
$ ./efence
Electric Fence 2.2.0 Copyright (C) 1987-1999 Bruce Perens <bruce@perens.com>
Segmentation fault
$

在調(diào)試器下運(yùn)行可以定位這個(gè)問(wèn)題:

$ cc -g -o efence efence.c -lefence
$ gdb efence
(gdb) run
Starting program: /home/neil/BLP3/chapter10/efence
[New Thread 1024 (LWP 1869)]
Electric Fence 2.2.0 Copyright (C) 1987-1999 Bruce Perens <bruce@perens.com>
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 1024 (LWP 1869)]
0x080484ad in main () at efence.c:10
10 ptr[1024] = 0;
(gdb)

工作原理

Electric替換malloc并且將函數(shù)與計(jì)算機(jī)處理器的虛擬內(nèi)存特性相關(guān)聯(lián)來(lái)阻止非法的內(nèi)存訪問(wèn)。當(dāng)這樣的訪問(wèn)發(fā)生時(shí),就會(huì)拋出一個(gè)段錯(cuò)誤信息從而可以終止程序。

valgrind

valgrind是一個(gè)可以檢測(cè)我們已經(jīng)討論過(guò)的許多問(wèn)題的工具。事實(shí)上,他可以檢測(cè)數(shù)據(jù)訪問(wèn)錯(cuò)誤與內(nèi)存泄露。也許他并沒(méi)有被包含在我們的Linux發(fā)行版本中,但是我們可以在http://developer.kde.org/~sewardj處得到。

程序并不需要使用valgrind重新編譯,而我們甚至可以調(diào)用一個(gè)正在運(yùn)行的程序的內(nèi)存訪問(wèn)。他很值得一看,他已經(jīng)用在主要的開(kāi)發(fā)上,包含KDE版本3。

試驗(yàn)--valgrind

下面的程序,checker.c,分配一些內(nèi)存,讀取超過(guò)那塊內(nèi)存限制的位置,在其結(jié)束處之外寫(xiě)入數(shù)據(jù),然后使其不能訪問(wèn)。

?

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
?? char *ptr = (char *) malloc(1024);
?? char ch;
?? /* Uninitialized read */
?? ch = ptr[1024];/*讀非法*/
?? /* Write beyond the block */
?? ptr[1024] = 0;/*寫(xiě)非法*/
?? /* Orphan the block */
?? ptr = 0;/*野指針*/
?? exit(0);
}


要使用valgrind,我們只需要簡(jiǎn)單的運(yùn)行valgrind命令,傳遞我們希望檢測(cè)的選項(xiàng),其后是使用其參數(shù)運(yùn)行的程序。

?

當(dāng)我們使用valgrind來(lái)運(yùn)行我們的程序時(shí),我們可以看到診斷出許多問(wèn)題:

$ valgrind --leak-check=yes -v ./checker
==3436== valgrind-1.0.4, a memory error detector for x86 GNU/Linux.
==3436== Copyright (C) 2000-2002, and GNU GPL'd, by Julian Seward.
==3436== Estimated CPU clock rate is 452 MHz
==3436== For more details, rerun with: -v
==3436==
==3436== Invalid read of size 1
==3436== at 0x8048397: main (checker.c:10)
==3436== by 0x402574F2: __libc_start_main (in /lib/libc.so.6)
==3436== by 0x80482D1: exit@@GLIBC_2.0 (in /home/neil/BLP3/chapter10/checker)
==3436== Address 0x42AD1424 is 0 bytes after a block of size 1024 alloc'd
==3436== at 0x4003CA75: malloc (vg_clientfuncs.c:100)
==3436== by 0x8048389: main (checker.c:6)
==3436== by 0x402574F2: __libc_start_main (in /lib/libc.so.6)
==3436== by 0x80482D1: exit@@GLIBC_2.0 (in /home/neil/BLP3/chapter10/checker)
==3436==
==3436== Invalid write of size 1
==3436== at 0x80483A4: main (checker.c:13)
==3436== by 0x402574F2: __libc_start_main (in /lib/libc.so.6)
==3436== by 0x80482D1: exit@@GLIBC_2.0 (in /home/neil/BLP3/chapter10/checker)
==3436== Address 0x42AD1424 is 0 bytes after a block of size 1024 alloc'd
==3436== at 0x4003CA75: malloc (vg_clientfuncs.c:100)
==3436== by 0x8048389: main (checker.c:6)
==3436== by 0x402574F2: __libc_start_main (in /lib/libc.so.6)
==3436== by 0x80482D1: exit@@GLIBC_2.0 (in /home/neil/BLP3/chapter10/checker)
==3436==
==3436== ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0)
==3436== malloc/free: in use at exit: 1024 bytes in 1 blocks.
==3436== malloc/free: 1 allocs, 0 frees, 1024 bytes allocated.
==3436== For counts of detected errors, rerun with: -v
==3436== searching for pointers to 1 not-freed blocks.
==3436== checked 3468724 bytes.
==3436==
==3436== definitely lost: 1024 bytes in 1 blocks.
==3436== possibly lost: 0 bytes in 0 blocks.
==3436== still reachable: 0 bytes in 0 blocks.
==3436==
==3436== 1024 bytes in 1 blocks are definitely lost in loss record 1 of 1
==3436== at 0x4003CA75: malloc (vg_clientfuncs.c:100)
==3436== by 0x8048389: main (checker.c:6)
==3436== by 0x402574F2: __libc_start_main (in /lib/libc.so.6)
==3436== by 0x80482D1: exit@@GLIBC_2.0 (in /home/neil/BLP3/chapter10/checker)
==3436==
==3436== LEAK SUMMARY:
==3436== definitely lost: 1024 bytes in 1 blocks.
==3436== possibly lost: 0 bytes in 0 blocks.
==3436== still reachable: 0 bytes in 0 blocks.
==3436== Reachable blocks (those to which a pointer was found) are not shown.
==3436== To see them, rerun with: --show-reachable=yes
==3436== $

這里我們可以看到錯(cuò)誤的讀取與寫(xiě)入已經(jīng)被捕獲,而所關(guān)注的內(nèi)存塊與他們被分配的位置相關(guān)聯(lián)。我們可以使用調(diào)試器在出錯(cuò)點(diǎn)斷開(kāi)程序。

valgrind 有許多選項(xiàng),包含特定的錯(cuò)誤類型表達(dá)式與內(nèi)存泄露檢測(cè)。要檢測(cè)我們的例子泄露,我們必須使用一個(gè)傳遞給valgrind的選項(xiàng)。當(dāng)程序結(jié)束時(shí)要檢測(cè)內(nèi)存泄 露,我們需要指定 --leak-check=yes。我們可以使用valgrind --help得到一個(gè)選項(xiàng)列表。

工作原理

我們的程序在valgrind的控制下執(zhí)行,這會(huì)檢測(cè)我們程序所執(zhí)行的各種動(dòng)作,并且執(zhí)行許多檢測(cè),包括內(nèi)存訪問(wèn)。如果程序訪問(wèn)一個(gè)已分配的內(nèi)存塊并且訪問(wèn) 是非法的,valgrind就會(huì)輸出一條信息。在程序結(jié)束時(shí),一個(gè)垃圾收集例程就會(huì)運(yùn)行來(lái)檢測(cè)是否在存在分配的內(nèi)存塊沒(méi)有被釋放。這些孤兒內(nèi)存也會(huì)被報(bào)告。

以上就是關(guān)于c語(yǔ)言中調(diào)試工具的用法,學(xué)習(xí)c語(yǔ)言中的調(diào)試工具對(duì)于我們的學(xué)習(xí)和工作都是有一定幫助的哦。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

欧美成人在线免费视频| 国产激情在线免费观看| 人人插人人射| 免费黄网站在线| 日本免费久久高清视频| 精品亚洲aⅴ在线观看| 国产ts丝袜人妖系列视频| 精品毛片久久久久久| 国产精品麻豆网站| 欧美一级裸体视频| 91精品国产色综合久久不卡98口| 午夜伦理大片视频在线观看| 中文字幕一区av| av福利精品导航| 亚洲成av人片在线观看| av在线国产精品| 精品成人免费自拍视频| 亚洲激情在线| 香蕉久久夜色| 97精品国产97久久久久久| 中文字幕免费精品| 亚洲成人av中文字幕| 伊人精品综合| 国产又大又长又粗| av电影在线观看网址| 国产自产2019最新不卡| 在线观看欧美一区| 4438欧美| 无人区在线高清完整免费版 一区二| www在线视频| 日韩国产激情在线| 国产丝袜视频在线观看| 日本一区免费在线观看| 国产精品国模在线| 精品国产99久久久久久宅男i| 日韩欧美一起| 国产在线观看免费一区| 特级西西444www高清大视频| 国产精品白丝久久av网站| 成人影院在线观看视频| 黑人巨大亚洲一区二区久| 国产乱理伦片在线观看夜一区| 污视频网站在线观看| 久久电影tv| 日本午夜精品电影| 91精品一区二区三区四区| 亚洲色图21p| 第一福利永久视频精品| 9国产精品视频| 在线影视一区| 欧美淫片网站| 国色天香一二三期区别大象| 一道在线中文一区二区三区| 精品国产一区在线| 免费一级欧美片在线观看| 国产香蕉在线视频| 国产日韩视频一区二区三区| 国产精品久久久久久久久久齐齐| 久久亚洲欧洲| 国产精品精品视频| 综合天天久久| 国产欧美日韩亚洲精品| 亚洲免费高清视频| 黄色激情在线视频| 伊人激情综合网| 卡一卡二国产精品| 欧美老女人另类| 一级黄色电影片| 91精品在线观| 精品偷拍一区二区三区在线看| 亚洲综合五月天| 亚洲精品v亚洲精品v日韩精品| 国产在线1区| 午夜精品久久久久久久99热| 精品亚洲aⅴ无码一区二区三区| 草莓视频末满18勿| 久久久久久久久爱| www.亚洲天堂.com| 一级在线免费视频| 91在线播放国产| 亚洲欧美日韩在线综合| 不卡毛片在线看| 国产精品美乳在线观看| 粉嫩av性色av蜜臀av网站| 精品美女调教视频| 欧美岛国在线观看| 国产精品日韩精品欧美在线| 欧洲亚洲一区二区| 日韩毛片一区二区三区| 牛人盗摄一区二区三区视频| 少妇丰满尤物大尺度写真| 51视频国产精品一区二区| 97国产精东麻豆人妻电影| 国产成人亚洲综合a∨婷婷| 最新国产一区二区| 欧美日韩中文在线视频| 懂色av一区二区在线播放| 成视频在线观看免费观看| 91精品国产aⅴ一区二区| 日韩vs国产vs欧美| 欧美与黑人午夜性猛交久久久| 欧美高清视频在线播放| 在线中文av| 91中文在线观看| 亚洲乱码国产乱码精品精软件| 国产精品免费精品一区| 在线观看日韩中文字幕| 99精品久久久| 四虎影院在线免费播放| 欧美三级欧美成人高清www| 四虎成人免费观看在线网址| 国产精品一区二区久久国产| 欧美久久久久久久久久久久| 日韩av在线一区二区| 亚洲国产精品成人天堂| 国产精品久久午夜夜伦鲁鲁| 国产乱码精品1区2区3区| 日韩午夜免费视频| 亚洲人在线视频| 欧美三级韩国三级日本一级| 欧美一区二区三区四区夜夜大片| 亚洲天堂av电影| 日本欧美日韩| 欧美日韩日本国产| 国产一级黄色录像| 免费在线观看黄色av| 欧美日韩国产限制| 日韩一级片在线免费观看| 成人午夜剧场视频网站| 欧美日韩 一区二区三区| 亚州视频一区二区三区| 午夜免费高清视频| 国产亚洲成av人在线观看导航| 午夜精品久久久久久久第一页按摩| 在线观看国产高清视频| 色呦呦在线看| 欧美视频不卡中文| 日韩和一区二区| 色戒在线免费观看| 国产精品臀控福利在线观看| h片在线观看| 波多野结衣视频观看| 粉嫩久久久久久久极品| 欧美日韩另类一区| 国产一级在线视频| 亚洲天堂日韩电影| 国产人妻精品一区二区三区| 国产免费视频在线| 成人免费网址在线| 中文字幕一区日韩精品欧美| 欧美三日本三级少妇三99| 久久国产加勒比精品无码| 精品美女久久| 亚洲综合自拍网| 狠狠色丁香婷婷综合| xxxxbbbb欧美| 欧美一级理论性理论a| 精品国产伦一区二区三区观看体验| 日韩av电影免费在线| 国产成人一二片| 午夜福制92视频| 日韩高清二区| 久久激情av| 台湾亚洲精品一区二区tv| 视频在线观看成人| 国产在线激情视频| 精品精品国产国产自在线| 特黄国产免费播放| 国产人妖一区二区| 在线观看日韩电影| 免费影视亚洲| 97精品久久久中文字幕免费| 久久久久久久人妻无码中文字幕爆| 91av看片| 中文字幕欧美一区二区| 中文字幕亚洲图片| 成av人片在线观看www| 蜜桃久久精品成人无码av| 日韩中文欧美在线| 一道本无吗一区| 经典三级一区二区| 国产精品久久久久久无人区| 亚洲国产mv| 一区二区日韩欧美| 一级黄色特级片| 久久久久国色av免费看影院| 亚洲伦理精品| 日韩精品一级中文字幕精品视频免费观看| 不卡一卡2卡3卡4卡精品在| 五月天最新网址| 五月天婷婷激情网| 91精品视频大全| 日本爱爱免费视频| av高清久久久| 久久99国产综合精品免费| 日韩久久久久久久久久| 亚洲成**性毛茸茸| 欧美日韩高清不卡| 久草视频在线看| 亚洲一区视频在线播放| 97精品一区二区| 欧美韩国日本精品一区二区三区| 国产特级黄色片| 中文久久电影小说| 欧美裸身视频免费观看| 久久久久这里只有精品| 亚洲欧美日本伦理| 丝袜美腿美女被狂躁在线观看| 欧美黑人精品一区二区不卡| 久久久久久久蜜桃| 亚洲av无码片一区二区三区| 日韩免费高清在线| 最新日本在线观看| 一区二区在线观看免费视频播放| 99re99热| 特级西西444www大精品视频免费看| 中文字幕亚洲欧美在线| 国产精品jizz在线观看美国| 日韩精品一区二区三区三区免费| 亚洲电影观看| 五月婷婷激情综合网| 日韩成人av网址| www精品久久| 午夜久久久久久久久久| 91高清国产视频| 激情五月激情综合网| 欧美日韩久久久久| 五月婷婷六月合| 精品产品国产在线不卡| 最新亚洲一区| 日本五十熟hd丰满| 午夜精品无码一区二区三区| 精品视频中文字幕| 成人看的视频| 亚洲精品videossex少妇| 欧洲精品在线播放| 国产精品拍天天在线| 亚洲男女一区二区三区| 在线观看av每日更新免费| 日本中文字幕亚洲| 欧美人成在线视频| 欧洲美女网站| 777久久久精品一区二区三区| 91精品国产全国免费观看| 日韩精品在线观看免费| avtt香蕉久久| 色综合久久网| 日本一二三区不卡| 国语对白精品一区二区| 国产精品yjizz视频网| 久久久久亚洲无码| 久久高清精品| 欧美日韩精品一区二区三区四区| 中文字幕一区二区三区不卡在线| 亚洲av综合色区无码一区爱av| 天天爱天天做色综合| 小说区图片区色综合区| 欧美日韩在线一区二区三区| jvid福利在线一区二区| 美女喷白浆视频| 欧美精品一区二区蜜臀亚洲| 欧美一级在线免费| 香蕉精品视频在线观看| 婷婷另类小说| 性娇小13――14欧美| 国产1卡2卡三卡四卡网站| 亚洲欧美日韩国产| 综合久久中文字幕| 男女小视频在线观看| 国内不卡的二区三区中文字幕| 成人高潮成人免费观看| 同产精品九九九| 香蕉久久久久久久av网站| 天天色天天射综合网| 一本大道久久a久久精二百| 久久久精品免费| 国模视频一区二区三区| 9l视频自拍九色9l视频成人| 午夜免费福利视频在线观看| 精品人妻无码一区二区色欲产成人| 亚洲综合精品伊人久久| 亚洲国产婷婷香蕉久久久久久99| 中文字幕剧情在线观看一区| 国内偷自视频区视频综合| 婷婷激情图片久久| 久久久久毛片| 日韩电影免费观看中文字幕| 青青国产在线视频| 色欲AV无码精品一区二区久久| 精品久久久久久久久久久久久久| 日本一区二区三区在线视频| 亚洲另类黄色| 黄页视频在线观看| 欧美日韩一区二区免费视频| 伦理一区二区| 国产aⅴ精品一区二区三区久久| 999久久久久久久久6666| 91丨porny丨国产入口| 成人国产精品一区二区免费麻豆| 欧美一级黄色带| 2018国产精品| 欧美色图婷婷| 5g国产欧美日韩视频| 在线观看视频色| 亚洲爱爱视频| 欧美老女人在线视频| 亚洲av色香蕉一区二区三区| 日韩av无码中文字幕| 国产精品theporn88| 亚洲欧洲国产专区| 免费黄色在线网站| 久久激情视频久久| 美国十次av导航亚洲入口| 久久av免费观看| 精品一区二区三区中文字幕在线| 不用播放器的免费av| 精品视频站长推荐| 国产精品久99| 夜间精品视频| 六月婷婷七月丁香| 99在线精品视频在线观看| 不卡影院一区二区| 亚洲欧美日本另类| 久久久久狠狠高潮亚洲精品| 亚洲精品国产精品粉嫩| gogo在线观看| 午夜在线观看视频18| 久久成人亚洲精品|