青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

chaosuper85

C++博客 首頁 新隨筆 聯系 聚合 管理
  118 Posts :: 0 Stories :: 3 Comments :: 0 Trackbacks

或是直接就是b func
(gdb) b func
Breakpoint 1 at 0x8048458: file hello.c, line 10.

示例二:敲入b按兩次TAB鍵,你會看到所有b打頭的命令:
(gdb) b
backtrace break bt
(gdb)

示例三:只記得函數的前綴,可以這樣:
(gdb) b make_ <按TAB鍵>
(再按下一次TAB鍵,你會看到:)
make_a_section_from_file make_environ
make_abs_section make_function_type
make_blockvector make_pointer_type
make_cleanup make_reference_type
make_command make_symbol_completion_list
(gdb) b make_
GDB把所有make開頭的函數全部例出來給你查看。

示例四:調試C++的程序時,有可以函數名一樣。如:
(gdb) b 'bubble( M-?
bubble(double,double) bubble(int,int)
(gdb) b 'bubble(
你可以查看到C++中的所有的重載函數及參數。(注:M-?和“按兩次TAB鍵”是一個意思)

要退出gdb時,只用發quit或命令簡稱q就行了。

GDB中運行UNIX的shell程序
————————————

在gdb環境中,你可以執行UNIX的shell的命令,使用gdb的shell命令來完成:

shell

調用UNIX的shell來執行,環境變量SHELL中定義的UNIX的shell將會被用來執行,如
果SHELL沒有定義,那就使用UNIX的標準shell:/bin/sh。(在Windows中使用
Command.com或cmd.exe)

還有一個gdb命令是make:
make
可以在gdb中執行make命令來重新build自己的程序。這個命令等價于“shell make ”。

在GDB中運行程序
————————

當以gdb 方式啟動gdb后,gdb會在PATH路徑和當前目錄中搜索的源文件。如要確認gdb是否讀到源文件,可使用l或list命令,看看gdb是否能列出源代碼。

在gdb中,運行程序使用r或是run命令。程序的運行,你有可能需要設置下面四方面的事。

1、程序運行參數。
set args 可指定運行時參數。(如:set args 10 20 30 40 50)
show args 命令可以查看設置好的運行參數。

2、運行環境。
path
可設定程序的運行路徑。
show paths 查看程序的運行路徑。
set environment varname [=value] 設置環境變量。如:set env USER=hchen
show environment [varname] 查看環境變量。

3、工作目錄。
cd
相當于shell的cd命令。
pwd 顯示當前的所在目錄。

4、程序的輸入輸出。
info terminal 顯示你程序用到的終端的模式。
使用重定向控制程序輸出。如:run > outfile
tty命令可以指寫輸入輸出的終端設備。如:tty /dev/ttyb


調試已運行的程序
————————

兩種方法:
1、在UNIX下用ps查看正在運行的程序的PID(進程ID),然后用gdb PID格式掛接正在運行的程序。
2、先用gdb 關聯上源代碼,并進行gdb,在gdb中用attach命令來掛接進程的PID。并用detach來取消掛接的進程。

暫停 / 恢復程序運行
—————————

調試程序中,暫停程序運行是必須的,GDB可以方便地暫停程序的運行。你可以設置
程序的在哪行停住,在什么條件下停住,在收到什么信號時停往等等。以便于你查
看運行時的變量,以及運行時的流程。

當進程被gdb停住時,你可以使用info program 來查看程序的是否在運行,進程號,被
暫停的原因。

在gdb中,我們可以有以下幾種暫停方式:斷點(BreakPoint)、觀察點
(WatchPoint)、捕捉點(CatchPoint)、信號(Signals)、線程停止(Thread
Stops)。如果要恢復程序運行,可以使用c或是continue命令。

一、設置斷點(BreakPoint)

我們用break命令來設置斷點。正面有幾點設置斷點的方法:

break
在進入指定函數時停住。C++中可以使用class::function或function(type,type)格式來指定函數名。

break
在指定行號停住。

break +offset
break -offset
在當前行號的前面或后面的offset行停住。offiset為自然數。

break filename:linenum
在源文件filename的linenum行處停住。

break filename:function
在源文件filename的function函數的入口處停住。

break *address
在程序運行的內存地址處停住。

break
break命令沒有參數時,表示在下一條指令處停住。

break ... if
...可以是上述的參數,condition表示條件,在條件成立時停住。比如在循環境體中,可以設置break if i=100,表示當i為100時停住程序。

查看斷點時,可使用info命令,如下所示:(注:n表示斷點號)
info breakpoints [n]
info break [n]


二、設置觀察點(WatchPoint)

觀察點一般來觀察某個表達式(變量也是一種表達式)的值是否有變化了,如果有變化,馬上停住程序。我們有下面的幾種方法來設置觀察點:

watch
為表達式(變量)expr設置一個觀察點。一量表達式值有變化時,馬上停住程序。

rwatch
當表達式(變量)expr被讀時,停住程序。

awatch
當表達式(變量)的值被讀或被寫時,停住程序。

info watchpoints
列出當前所設置了的所有觀察點。

三、設置捕捉點(CatchPoint)

你可設置捕捉點來補捉程序運行時的一些事件。如:載入共享庫(動態鏈接庫)或是C++的異常。設置捕捉點的格式為:

catch
當event發生時,停住程序。event可以是下面的內容:
1、throw 一個C++拋出的異常。(throw為關鍵字)
2、catch 一個C++捕捉到的異常。(catch為關鍵字)
3、exec 調用系統調用exec時。(exec為關鍵字,目前此功能只在HP-UX下有用)
4、fork 調用系統調用fork時。(fork為關鍵字,目前此功能只在HP-UX下有用)
5、vfork 調用系統調用vfork時。(vfork為關鍵字,目前此功能只在HP-UX下有用)
6、load 或 load 載入共享庫(動態鏈接庫)時。(load為關鍵字,目前此功能只在HP-UX下有用)
7、unload 或 unload 卸載共享庫(動態鏈接庫)時。(unload為關鍵字,目前此功能只在HP-UX下有用)

tcatch
只設置一次捕捉點,當程序停住以后,應點被自動刪除。

四、維護停止點

上面說了如何設置程序的停止點,GDB中的停止點也就是上述的三類。在GDB中,如
果你覺得已定義好的停止點沒有用了,你可以使用delete、clear、disable、
enable這幾個命令來進行維護。

clear
清除所有的已定義的停止點。

clear
clear
清除所有設置在函數上的停止點。

clear
clear
清除所有設置在指定行上的停止點。

delete [breakpoints] [range...]
刪除指定的斷點,breakpoints為斷點號。如果不指定斷點號,則表示刪除所有的斷點。range 表示斷點號的范圍(如:3-7)。其簡寫命令為d。

比刪除更好的一種方法是disable停止點,disable了的停止點,GDB不會刪除,當你還需要時,enable即可,就好像回收站一樣。

disable [breakpoints] [range...]
disable所指定的停止點,breakpoints為停止點號。如果什么都不指定,表示disable所有的停止點。簡寫命令是dis.

enable [breakpoints] [range...]
enable所指定的停止點,breakpoints為停止點號。

enable [breakpoints] once range...
enable所指定的停止點一次,當程序停止后,該停止點馬上被GDB自動disable。

enable [breakpoints] delete range...
enable所指定的停止點一次,當程序停止后,該停止點馬上被GDB自動刪除。

五、停止條件維護

前面在說到設置斷點時,我們提到過可以設置一個條件,當條件成立時,程序自動停
止,這是一個非常強大的功能,這里,我想專門說說這個條件的相關維護命令。一般
來說,為斷點設置一個條件,我們使用if關鍵詞,后面跟其斷點條件。并且,條件設
置好后,我們可以用condition命令來修改斷點的條件。(只有break和watch命令支
持if,catch目前暫不支持if)

condition
修改斷點號為bnum的停止條件為expression。

condition
清除斷點號為bnum的停止條件。


還有一個比較特殊的維護命令ignore,你可以指定程序運行時,忽略停止條件幾次。

ignore
表示忽略斷點號為bnum的停止條件count次。

六、為停止點設定運行命令

我們可以使用GDB提供的command命令來設置停止點的運行命令。也就是說,當運行
的程序在被停止住時,我們可以讓其自動運行一些別的命令,這很有利行自動化調
試。對基于GDB的自動化調試是一個強大的支持。


commands [bnum]
... command-list ...
end

為斷點號bnum指寫一個命令列表。當程序被該斷點停住時,gdb會依次運行命令列表中的命令。

例如:

break foo if x>0
commands
printf "x is %d\n",x
continue
end
斷點設置在函數foo中,斷點條件是x>0,如果程序被斷住后,也就是,一旦x的值在foo函數中大于0,GDB會自動打印出x的值,并繼續運行程序。

如果你要清除斷點上的命令序列,那么只要簡單的執行一下commands命令,并直接在打個end就行了。

七、斷點菜單

在C++中,可能會重復出現同一個名字的函數若干次(函數重載),在這種情況
下,break 不能告訴GDB要停在哪個函數的入口。當然,你可以使用break 也就是把
函數的參數類型告訴GDB,以指定一個函數。否則的話,GDB會給你列出一個斷點菜
單供你選擇你所需要的斷點。你只要輸入你菜單列表中的編號就可以了。如:

(gdb) b String::after
[0] cancel
[1] all
[2] file:String.cc; line number:867
[3] file:String.cc; line number:860
[4] file:String.cc; line number:875
[5] file:String.cc; line number:853
[6] file:String.cc; line number:846
[7] file:String.cc; line number:735
> 2 4 6
Breakpoint 1 at 0xb26c: file String.cc, line 867.
Breakpoint 2 at 0xb344: file String.cc, line 875.
Breakpoint 3 at 0xafcc: file String.cc, line 846.
Multiple breakpoints were set.
Use the "delete" command to delete unwanted
breakpoints.
(gdb)

可見,GDB列出了所有after的重載函數,你可以選一下列表編號就行了。

0表示放棄設置斷點,1表示所有函數都設置斷點。

八、恢復程序運行和單步調試

當程序被停住了,你可以用continue命令恢復程序的運行直到程序結束,或下一個斷點到來。也可以使用step或next命令單步跟蹤程序。

continue [ignore-count]
c [ignore-count]
fg [ignore-count]
恢復程序運行,直到程序結束,或是下一個斷點到來。ignore-count表示忽略其后的斷點次數。continue,c,fg三個命令都是一樣的意思。


step

單步跟蹤,如果有函數調用,他會進入該函數。進入函數的前提是,此函數被編譯有
debug信息。很像VC等工具中的step in。后面可以加count也可以不加,不加表示
一條條地執行,加表示執行后面的count條指令,然后再停住。

next

同樣單步跟蹤,如果有函數調用,他不會進入該函數。很像VC等工具中的step
over。后面可以加count也可以不加,不加表示一條條地執行,加表示執行后面的
count條指令,然后再停住。

set step-mode
set step-mode on
打開step-mode模式,于是,在進行單步跟蹤時,程序不會因為沒有debug信息而不停住。這個參數有很利于查看機器碼。

set step-mod off
關閉step-mode模式。

finish
運行程序,直到當前函數完成返回。并打印函數返回時的堆棧地址和返回值及參數值等信息。

until 或 u
當你厭倦了在一個循環體內單步跟蹤時,這個命令可以運行程序直到退出循環體。

stepi 或 si
nexti 或 ni

單步跟蹤一條機器指令!一條程序代碼有可能由數條機器指令完成,stepi和nexti
可以單步執行機器指令。與之一樣有相同功能的命令是 “display/i $pc” ,當運
行完這個命令后,單步跟蹤會在打出程序代碼的同時打出機器指令(也就是匯編代
碼)

九、信號(Signals)

信號是一種軟中斷,是一種處理異步事件的方法。一般來說,操作系統都支持許多
信號。尤其是UNIX,比較重要應用程序一般都會處理信號。UNIX定義了許多信號,
比如SIGINT表示中斷字符信號,也就是Ctrl+C的信號,SIGBUS表示硬件故障的信
號;SIGCHLD表示子進程狀態改變信號; SIGKILL表示終止程序運行的信號,等等。
信號量編程是UNIX下非常重要的一種技術。

GDB有能力在你調試程序的時候處理任何一種信號,你可以告訴GDB需要處理哪一種
信號。你可以要求GDB收到你所指定的信號時,馬上停住正在運行的程序,以供你進
行調試。你可以用GDB的handle命令來完成這一功能。

handle

在GDB中定義一個信號處理。信號可以以SIG開頭或不以SIG開頭,可以用定義一個
要處理信號的范圍(如:SIGIO-SIGKILL,表示處理從SIGIO信號到SIGKILL的信號,其
中包括SIGIO,SIGIOT,SIGKILL三個信號),也可以使用關鍵字all來標明要處理所有
的信號。一旦被調試的程序接收到信號,運行程序馬上會被GDB停住,以供調試。其
可以是以下幾種關鍵字的一個或多個。

nostop
當被調試的程序收到信號時,GDB不會停住程序的運行,但會打出消息告訴你收到這種信號。
stop
當被調試的程序收到信號時,GDB會停住你的程序。
print
當被調試的程序收到信號時,GDB會顯示出一條信息。
noprint
當被調試的程序收到信號時,GDB不會告訴你收到信號的信息。
pass
noignore
當被調試的程序收到信號時,GDB不處理信號。這表示,GDB會把這個信號交給被調試程序會處理。
nopass
ignore
當被調試的程序收到信號時,GDB不會讓被調試程序來處理這個信號。


info signals
info handle
查看有哪些信號在被GDB檢測中。

十、線程(Thread Stops)

如果你程序是多線程的話,你可以定義你的斷點是否在所有的線程上,或是在某個特定的線程。GDB很容易幫你完成這一工作。

break thread
break thread if ...

linespec指定了斷點設置在的源程序的行號。threadno指定了線程的ID,注意,這
個ID是GDB分配的,你可以通過“info threads”命令來查看正在運行程序中的線程
信息。如果你不指定thread 則表示你的斷點設在所有線程上面。你還可以為某線
程指定斷點條件。如:

(gdb) break frik.c:13 thread 28 if bartab > lim

當你的程序被GDB停住時,所有的運行線程都會被停住。這方便你你查看運行程序
的總體情況。而在你恢復程序運行時,所有的線程也會被恢復運行。那怕是主進程
在被單步調試時。

查看棧信息
—————

當程序被停住了,你需要做的第一件事就是查看程序是在哪里停住的。當你的程序
調用了一個函數,函數的地址,函數參數,函數內的局部變量都會被壓入
“棧”(Stack)中。你可以用GDB命令來查看當前的棧中的信息。

下面是一些查看函數調用棧信息的GDB命令:

backtrace
bt
打印當前的函數調用棧的所有信息。如:

(gdb) bt
#0 func (n=250) at tst.c:6
#1 0x08048524 in main (argc=1, argv=0xbffff674) at tst.c:30
#2 0x400409ed in __libc_start_main () from /lib/libc.so.6

從上可以看出函數的調用棧信息:__libc_start_main --> main() --> func()


backtrace
bt
n是一個正整數,表示只打印棧頂上n層的棧信息。

backtrace <-n>
bt <-n>
-n表一個負整數,表示只打印棧底下n層的棧信息。

如果你要查看某一層的信息,你需要在切換當前的棧,一般來說,程序停止時,最頂
層的棧就是當前棧,如果你要查看棧下面層的詳細信息,首先要做的是切換當前棧。

frame
f
n是一個從0開始的整數,是棧中的層編號。比如:frame 0,表示棧頂,frame 1,表示棧的第二層。

up
表示向棧的上面移動n層,可以不打n,表示向上移動一層。

down
表示向棧的下面移動n層,可以不打n,表示向下移動一層。

上面的命令,都會打印出移動到的棧層的信息。如果你不想讓其打出信息。你可以使用這三個命令:

select-frame 對應于 frame 命令。
up-silently 對應于 up 命令。
down-silently 對應于 down 命令。


查看當前棧層的信息,你可以用以下GDB命令:

frame 或 f
會打印出這些信息:棧的層編號,當前的函數名,函數參數值,函數所在文件及行號,函數執行到的語句。

info frame
info f

這個命令會打印出更為詳細的當前棧層的信息,只不過,大多數都是運行時的內內
地址。比如:函數地址,調用函數的地址,被調用函數的地址,目前的函數是由什么
樣的程序語言寫成的、函數參數地址及值、局部變量的地址等等。如:

(gdb) info f
Stack level 0, frame at 0xbffff5d4:
eip = 0x804845d in func (tst.c:6); saved eip 0x8048524
called by frame at 0xbffff60c
source language c.
Arglist at 0xbffff5d4, args: n=250
Locals at 0xbffff5d4, Previous frame's sp is 0x0
Saved registers:
ebp at 0xbffff5d4, eip at 0xbffff5d8

info args
打印出當前函數的參數名及其值。

info locals
打印出當前函數中所有局部變量及其值。

info catch
打印出當前的函數中的異常處理信息。


查看源程序
—————

一、顯示源代碼

GDB 可以打印出所調試程序的源代碼,當然,在程序編譯時一定要加上-g的參數,把
源程序信息編譯到執行文件中。不然就看不到源程序了。當程序停下來以后,
GDB會報告程序停在了那個文件的第幾行上。你可以用list命令來打印程序的源代
碼。還是來看一看查看源代碼的GDB命令吧。

list
顯示程序第linenum行的周圍的源程序。

list
顯示函數名為function的函數的源程序。

list
顯示當前行后面的源程序。

list -
顯示當前行前面的源程序。

一般是打印當前行的上5行和下5行,如果顯示函數是是上2行下8行,默認是10行,當
然,你也可以定制顯示的范圍,使用下面命令可以設置一次顯示源程序的行數。

set listsize
設置一次顯示源代碼的行數。

show listsize
查看當前listsize的設置。

list命令還有下面的用法:

list ,
顯示從first行到last行之間的源代碼。

list ,
顯示從當前行到last行之間的源代碼。

list +
往后顯示源代碼。

一般來說在list后面可以跟以下這們的參數:

行號。
<+offset> 當前行號的正偏移量。
<-offset> 當前行號的負偏移量。
哪個文件的哪一行。
函數名。
哪個文件中的哪個函數。
<*address> 程序運行時的語句在內存中的地址。

二、搜索源代碼

不僅如此,GDB還提供了源代碼搜索的命令:

forward-search
search
向前面搜索。

reverse-search
全部搜索。

其中,就是正則表達式,也主一個字符串的匹配模式,關于正則表達式,我就不在這里講了,還請各位查看相關資料。


三、指定源文件的路徑

某些時候,用-g編譯過后的執行程序中只是包括了源文件的名字,沒有路徑名。GDB提供了可以讓你指定源文件的路徑的命令,以便GDB進行搜索。

directory
dir
加一個源文件路徑到當前路徑的前面。如果你要指定多個路徑,UNIX下你可以使用“:”,Windows下你可以使用“;”。
directory
清除所有的自定義的源文件搜索路徑信息。

show directories
顯示定義了的源文件搜索路徑。

四、源代碼的內存

你可以使用info line命令來查看源代碼在內存中的地址。info line后面可以跟
“行號”,“函數名”,“文件名:行號”,“文件名:函數名”,這個命令會打印出所指定的
源碼在運行時的內存地址,如:

(gdb) info line tst.c:func
Line 5 of "tst.c" starts at address 0x8048456 and ends at 0x804845d .

還有一個命令(disassemble)你可以查看源程序的當前執行時的機器碼,這個命令
會把目前內存中的指令dump出來。如下面的示例表示查看函數func的匯編代碼。

(gdb) disassemble func
Dump of assembler code for function func:
0x8048450 : push %ebp
0x8048451 : mov %esp,%ebp
0x8048453 : sub $0x18,%esp
0x8048456 : movl $0x0,0xfffffffc(%ebp)
0x804845d : movl $0x1,0xfffffff8(%ebp)
0x8048464 : mov 0xfffffff8(%ebp),%eax
0x8048467 : cmp 0x8(%ebp),%eax
0x804846a : jle 0x8048470
0x804846c : jmp 0x8048480
0x804846e : mov %esi,%esi
0x8048470 : mov 0xfffffff8(%ebp),


 

posted on 2009-08-04 08:39 chaosuper 閱讀(480) 評論(0)  編輯 收藏 引用

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            久久久久国产成人精品亚洲午夜| 欧美va天堂va视频va在线| 久久av最新网址| 午夜精品久久久久99热蜜桃导演| 亚洲伊人伊色伊影伊综合网| 亚洲一区二区在线看| 欧美一级播放| 久久先锋资源| 亚洲国产专区校园欧美| 亚洲国产精品www| 亚洲图片欧洲图片av| 亚洲欧美日韩第一区| 欧美在线欧美在线| 免费观看亚洲视频大全| 国产精品二区影院| 狠狠色2019综合网| 中文日韩在线| 巨胸喷奶水www久久久免费动漫| 亚洲福利国产| 亚洲欧美日韩国产一区二区三区| 久久综合狠狠综合久久综合88| 欧美日韩精品一区二区| 国产在线精品一区二区中文| 一区二区日韩欧美| 蜜臀av性久久久久蜜臀aⅴ| 日韩午夜精品视频| 久久久久九九九| 国产精品毛片在线| 亚洲人精品午夜| 久久亚洲午夜电影| 亚洲视频在线看| 欧美激情成人在线| 激情综合亚洲| 小黄鸭精品aⅴ导航网站入口 | 国产在线精品一区二区中文 | 性感少妇一区| 国产精品v欧美精品v日韩| 久久国产精品久久w女人spa| 欧美精品观看| 在线观看日韩一区| 久久国产精品99久久久久久老狼 | 亚洲欧美日韩一区二区三区在线观看| 免费不卡在线视频| 伊人成年综合电影网| 欧美一区二区视频网站| 日韩亚洲视频| 美日韩精品免费| 国模私拍一区二区三区| 亚洲欧美美女| 99国产欧美久久久精品| 欧美成人亚洲| 国精产品99永久一区一区| 亚洲一二三区在线观看| 亚洲高清免费在线| 免费欧美视频| 亚洲黄色尤物视频| 久久伊伊香蕉| 久久久精品tv| 好吊一区二区三区| 久久人91精品久久久久久不卡 | 日韩视频精品| 欧美日韩午夜在线| 亚洲一级一区| 亚洲手机成人高清视频| 国产精品视频内| 久久精品麻豆| 久久久女女女女999久久| 在线播放不卡| 最新国产成人av网站网址麻豆| 免费观看亚洲视频大全| 亚洲卡通欧美制服中文| 亚洲六月丁香色婷婷综合久久| 欧美日韩亚洲一区二区三区在线观看| 亚洲视频综合| 欧美一区激情视频在线观看| 影音先锋日韩有码| 亚洲欧洲精品一区二区三区波多野1战4 | 欧美激情一级片一区二区| 麻豆九一精品爱看视频在线观看免费| 亚洲第一精品夜夜躁人人爽| 亚洲激情社区| 国产精品亚洲综合久久| 蜜桃av一区二区三区| 欧美日韩国产一级| 久久国产精品久久精品国产| 久久偷窥视频| 亚洲男人的天堂在线aⅴ视频| 欧美亚洲免费| 日韩一级二级三级| 午夜精品三级视频福利| 亚洲国产成人在线播放| 一本综合久久| 久久av二区| 麻豆精品在线视频| 亚洲系列中文字幕| 久久色在线播放| 亚洲在线一区| 美女免费视频一区| 午夜精品美女久久久久av福利| 欧美专区第一页| 亚洲视频第一页| 久久亚洲私人国产精品va媚药| 亚洲网站视频福利| 久久人人爽人人爽| 欧美一级免费视频| 欧美啪啪一区| 欧美电影免费观看| 国产伦理精品不卡| 日韩亚洲精品视频| 亚洲黄色成人| 欧美伊人久久| 亚洲欧美综合| 欧美日韩亚洲不卡| 亚洲成人在线视频播放 | 欧美一二三区在线观看| 99国产精品99久久久久久粉嫩| 久久爱91午夜羞羞| 欧美一区二区精品久久911| 欧美精品在线一区二区三区| 免费在线国产精品| 国产人成精品一区二区三| 日韩一区二区免费高清| 91久久在线播放| 久久婷婷人人澡人人喊人人爽| 欧美一级免费视频| 国产精品综合av一区二区国产馆| 亚洲美女中出| 一区二区激情视频| 欧美—级a级欧美特级ar全黄| 免费欧美高清视频| 一区二区三区在线视频播放| 午夜在线视频一区二区区别| 午夜视黄欧洲亚洲| 国产精品乱码久久久久久| 在线亚洲欧美专区二区| 一区二区久久久久| 欧美人与性动交α欧美精品济南到| 欧美成人精品高清在线播放| 亚洲第一色中文字幕| 快播亚洲色图| 亚洲国产精品99久久久久久久久| 亚洲人成高清| 欧美日韩一区不卡| 亚洲一本视频| 久久精品国产精品亚洲综合| 国产香蕉97碰碰久久人人| 欧美一区二视频在线免费观看| 久久久蜜桃一区二区人| 激情成人av在线| 久久伊人精品天天| 亚洲片国产一区一级在线观看| 亚洲伦理在线免费看| 欧美日韩伦理在线免费| 亚洲一区免费在线观看| 欧美一区二区三区视频| 国产一区二区黄| 美日韩精品视频免费看| 国产一区二区欧美日韩| 欧美亚洲在线视频| 欧美成人精品在线视频| 亚洲日本va在线观看| 亚洲欧美不卡| 国产在线不卡视频| 欧美韩日一区| 亚洲欧美春色| 亚洲福利在线看| 性欧美办公室18xxxxhd| 影视先锋久久| 欧美性色综合| 久久久最新网址| 99re8这里有精品热视频免费 | 中文在线资源观看网站视频免费不卡 | 欧美精品午夜| 欧美一区亚洲二区| 99精品黄色片免费大全| 麻豆乱码国产一区二区三区| 亚洲深夜影院| 在线成人av.com| 国产精品美女www爽爽爽| 欧美jizzhd精品欧美喷水| 午夜国产精品影院在线观看| 亚洲高清视频的网址| 久久免费99精品久久久久久| 正在播放欧美一区| 在线观看一区二区视频| 国产精品亚洲成人| 欧美三级资源在线| 欧美暴力喷水在线| 久久久久9999亚洲精品| 亚洲一级在线| 亚洲免费观看高清完整版在线观看| 久久亚洲精品视频| 欧美在线播放| 亚洲主播在线播放| av成人免费| 亚洲精品男同| 亚洲黄色精品| 亚洲国产综合在线看不卡| 黄色成人av| 韩曰欧美视频免费观看|