婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 詳解Linux下調試器GDB的基本使用方法

詳解Linux下調試器GDB的基本使用方法

熱門標簽:400電話辦理介紹信 宿城區電話機器人找哪家 福州企業電銷機器人排名 10086外包用的什么外呼系統 河南防封號電銷機器人是什么 上海申請高400開頭的電話 麗江真人語音電話外呼系統 怎么找到沒有地圖標注的店 打400電話怎么辦理收費

一、概述

GDB調試的三種方式:

1. 目標板直接使用GDB進行調試。

2. 目標板使用gdbserver,主機使用xxx-linux-gdb作為客戶端。

3. 目標板使用ulimit -c unlimited,生成core文件;然后主機使用xxx-linux-gdb ./test ./core。

二、gdb調試

構造測試程序如下main.c和sum.c如下:

main.c:#include <stdio.h>
#include <stdlib.h>
 
extern int sum(int value);
 
struct inout {
    int value;
    int result;
};

int main(int argc, char * argv[])
{
    struct inout * io = (struct inout * ) malloc(sizeof(struct inout));
    if (NULL == io) {
        printf("Malloc failed.\n");
        return -1;
    }

    if (argc != 2) {
        printf("Wrong para!\n");
        return -1;
    }

    io -> value = *argv[1] - '0';
    io -> result = sum(io -> value);
    printf("Your enter: %d, result:%d\n", io -> value, io -> result);
    return 0;
}
sum.c:
int sum(int value) {
    int result = 0;
    int i = 0;
    for (i = 0; i < value; i++)
        result += (i + 1);
    return result;
}

然后gcc main.c sum.c -o main -g, 得到main可執行文件.

下面介紹了gdb大部分功能,1.1 設置斷點以及 1.3顯示棧幀是常用功能;調試過程中可以需要1.6 單步執行,并且1.4 顯示變量、1.5顯示寄存器、1.8 監視點、1.9 改變變量的值。

如果進程已經運行中,需要1.11 attach到進程,或者1.10 生成轉儲文件進行分析。當然為了提高效率可以自定義1.13 初始化文件。

2.1、設置斷點

設置斷點可以通過b或者break設置斷點,斷點的設置可以通過函數名、行號、文件名+函數名、文件名+行號以及偏移量、地址等進行設置。

格式為:

break 函數名

break 行號

break 文件名:函數名

break 文件名:行號

break +偏移量

break -偏移量

break *地址

查看斷點,通過info break查看斷點列表。

刪除斷點通過命令包括:

delete <斷點id>:刪除指定斷點

delete:刪除所有斷點

clear

clear 函數名

clear 行號

clear 文件名:行號

clear 文件名:函數名

斷點還可以條件斷住

break 斷點 if 條件;比如break sum if value==9,當輸入的value為9的時候才會斷住。

condition 斷點編號:給指定斷點刪除觸發條件

condition 斷點編號 條件:給指定斷點添加觸發條件

如下可以看出,當入參為9的時候被斷住,而入參為8的時候運行到結束。

斷點還可以通過disable/enable臨時停用啟用。

disable

disable 斷點編號

disable display 顯示編號

disable mem 內存區域

enable

enable 斷點編號

enable once 斷點編號:該斷點只啟用一次,程序運行到該斷點并暫停后,該斷點即被禁用。

enable delete 斷點編號

enable display 顯示編號

enable mem 內存區域

2.1.1、斷點commands高級功能

大多數時候需要在斷點處執行一系列動作,gdb提供了在斷點處執行命令的高級功能commands。

#include <stdio.h>

int total = 0;

int square(int i)
{
    int result=0;

    result = i*i;

    return result;
}

int main(int argc, char **argv)
{
    int i;

    for(i=0; i<10; i++)
    {
        total += square(i);
    }
    return 0;
}

比如需要對如上程序square參數i為5的時候斷點,并在此時打印棧、局部變量以及total的值

編寫gdb.init如下:

set logging on gdb.log


b square if i == 5
commands
  bt full
  i locals
  p total
  print "Hit break when i == 5"
end

在gdb shell中source gdb.init,然后r執行命令,結果如下:

可以看出斷點在i==5的時候斷住了,并且此時打印了正確的值。

2.2、運行

“gdb 命令”之后,run可以在gdb下運行命令;如果命令需要參數則跟在run之后。

如果需要斷點在main()處,直接執行start就可以。

2.3、顯示棧幀

如果遇到斷點而暫停執行,或者coredump可以顯示棧幀。

通過bt可以顯示棧幀,bt full可以顯示局部變量。

命令格式如下:

bt

bt full:不僅顯示backtrace,還顯示局部變量

bt N:顯示開頭N個棧幀

bt full N

2.4、顯示變量

“print 變量”可以顯示變量內容。

如果需要一行監控多個變量,可以通過p {var1, var2, var3}。

如果要跟蹤自動顯示,可以使用display {var1, var2, var3}

2.5、顯示寄存器

info reg可以顯示寄存器內容。

在寄存器名之前加$可以顯示寄存器內容,

p $寄存器:顯示寄存器內容

p/x $寄存器:十六進制顯示寄存器內容。

用x命令可以顯示內容內容,“x/格式 地址”。

x $pc:顯示程序指針內容

x/i $pc:顯示程序指針匯編。

x/10i $pc:顯示程序指針之后10條指令。

x/128wx 0xfc207000:從0xfc20700開始以16進制打印128個word。

還可以通過disassemble指令來反匯編。

disassemble

disassemble 程序計數器:反匯編pc所在函數的整個函數。

disassemble addr-0x40,addr+0x40:反匯編addr前后0x40大小。

2.6、單步執行

單步執行有兩個命令next和step,兩者的區別是next遇到函數不會進入函數內部,step會執行到函數內部。

如果需要逐條匯編指令執行,可以分別使用nexti和stepi。

2.7、繼續執行

調試時,使用continue命令繼續執行程序。程序遇到斷電后再次暫停執行;如果沒有斷點,就會一直執行到結束。

continue:繼續執行

continue 次數:繼續執行一定次數。

2.8、監視點

要想找到變量在何處被改變,可以使用watch命令設置監視點watchpoint。

watch <表達式>:表達式發生變化時暫停運行

awatch<表達式>:表達式被訪問、改變是暫停執行

rwatch<表達式>:表達式被訪問時暫停執行

其他變種還包括watch expr [thread thread-id] [mask maskvalue],其中mask需要架構支持。

GDB不能監控一個常量,比如watch 0x600850報錯。

但是可以watch *(int *)0x600850。

2.9、改變變量的值

“通過set variable <變量>=<表達式>”來修改變量的值。

set $r0=xxx:設置r0寄存器的值為xxx。

2.10、生成內核轉儲文件

通過“generate-core-file”生成core.xxxx轉儲文件。

然后gdb ./main ./core.xxxx查看恢復的現場。

另一命令gcore可以從命令行直接生成內核轉儲文件。

gcore `pidof 命令`:無需停止正在執行的程序已獲得轉儲文件。

2.11、attach到進程

如果程序已經運行,或者是調試陷入死循環而無法返回控制臺進程,可以使用attach命令。

attach pid

通過ps aux可以查看進程的pid,然后使用bt查看棧幀。

以top為例操作步驟為:

1. ps -aux查看進程pid,為16974.

2. sudo gdb attach 16974,使用gdb 附著到top命令。

3. 使用bt full查看,當前棧幀。此時使用print等查看信息。

4. 還可以通過info proc查看進程信息。

2.12、反復執行

continue、step、stepi、next、nexti都可以指定重復執行的次數。

ignore 斷點編號 次數:可以忽略指定次數斷點。

2.13、初始化文件

Linux環境下初始化文件為.gdbinit。

如果存在.gdbinit文件,gdb在啟動的之前就將其作為命令文件運行。

初始化文件和命令文件執行順序為:HOME/.gdbinit > 運行命令行選項 > ./.gdbinit > -x指定命令文件。

2.14、設置源碼目錄

調試過程中如果需要關聯到源碼,查看更詳細的信息。

可以通過directory或者set substitute-path來制定源碼目錄。

2.15、TUI調試

TUI(TextUserInterface)為GDB調試的文本用戶界面,可以方便地顯示源代碼、匯編和寄存器文本窗口。

源代碼窗口和匯編窗口會高亮顯示程序運行位置并以'>'符號標記。有兩個特殊標記用于標識斷點,第一個標記用于標識斷點類型:

  • B:程序至少有一次運行到了該斷點
  • b:程序沒有運行到過該斷點
  • H:程序至少有一次運行到了該硬件斷點
  • h:程序沒有運行到過該硬件斷點

第二個標記用于標識斷點使能與否:

+:斷點使能Breakpointisenabled.-:斷點被禁用Breakpointisdisabled.

當調試程序時,源代碼窗口、匯編窗口和寄存器窗口的內容會自動更新。

2.16、Catchpoint

catch可以根據某些類型事件來停止程序執行。

可以通過catch syscall close,捕捉產生系統調用close的時候停止程序執行。

其他的catch事件還包括,throw、syscall、assert、exception等等。

2.17、自定義腳本

命令行的入參可以通過argc和*argv獲取。

2.17.0、注釋、賦值、顯示

# - 為腳本添加注釋。

set - 為變量賦值,以$開頭,以便區分gdb還是調試程序變量。

例如:set $x = 1

顯示變量可以通過echo、printf。

2.17.1、自定義命令

利用define命令可以自行定義命令,還可以使用document命令給自定義命令添加說明。

define adder
  if $argc == 2
    print $arg0 + $arg1
  end
  if $argc == 3
    print $arg0 + $arg1 + $arg2
  end
end

document adder
  Sum two or three variables.
end

執行bf自定義命令,結果如下。

無行參聲明,但可以直接用$arg0,$arg1引用, $argc 為形參個數

2.17.2、條件語句

條件命令:if...else...end。這個同其它語言中提供的if命令沒什么區別,只是注意結尾的end

2.17.3、循環語句

循環命令:while...end。gdb同樣提供了loop_breakloop_continue命令分別對應其它語言中的breakcontinue,另外同樣注意結尾的end

set logging on overwrite gdb.log------------將顯示log保存到gdb.log中。
set pagination off--------------------------關閉分頁顯示功能。

tar jtag jtag://localhost:1025--------------連接上JTAG。

d-------------------------------------------刪除現有斷點。

b func_a------------------------------------在func_a增加斷點。
commands------------------------------------斷點后,執行如下命令。
  b func_b----------------------------------在func_a斷點之后,在func_b增加斷點。
    commands      bt full-------------------------------打印func_b處棧幀。
      c-------------------------------------繼續執行。
    end
  b file.c:555------------------------------在file.c的555行增加斷點
    commands
      while 1-------------------------------無限執行next命令。
        next
      end
    end
  c-----------------------------------------繼續執行,才會觸發func_b和file.c:555斷點。
end

c-------------------------------------------是程序得到繼續執行。

在命令行gdb -x gdb.init bin;或者gdb bin,然后在命令行soruce gdb.init同樣可以更新腳本。

2.18、dump內存到指定文件

在gdb調試中可能需要將一段內存導出到文件中,可以借助dump命令。

命令格式:

dump binary memory FILE START STOP

比如dump binary memory ./dump.bin 0x0 0x008000000,將內存區間從0x0到0x00800000導出到dump.bin中。

三、gdb+gdbserver遠程調試

目標板gdbserver+主機gdb遠程調試的方式,比較適合目標板性能受限,只能提供gdbserver功能。

在主機上執行gdb進行遠程調試。測試程序如下。

#include <stdio.h>

void C(int *p)
{
    *p = 0x12;
}

void B(int *p)
{
    C(p);
}
void A(int *p)
{
    B(p);
}
void A2(int *p)
{
    C(p);
}
int main(int argc, char **argv)
{
    int a;
    int *p = NULL;
    A2(&a);  // A2 > C
    printf("a = 0x%x\n", a);
    A(p);    // A > B > C
    return 0;
}

對目標板的設置方式是:開啟端口2345作為gdbserver銅線端口。

gdbserver :2345 test_debug

主機上執行gdb test_debug,然后tar remote 192.168.2.84.2345連接遠程gdbserver。

目標板會收到“Remote debugging from host 192.168.33.77”消息,表示兩者連接成功。

主機上就可以進行遠程調試,continue之后兩端得到的結果如下:

目標板輸出“a=0x12”之后停止運行,

主機上得到SIGSEGV,并可以查看backtrace信息。可以看出問題點在指針p指向NULL,0指針賦值錯誤。

四、通過core+gdb離線分析

在目標板上執行ulimit -c unlimited,執行應用程序。

程序出錯后,會在當前目錄下生成core文件。

將core文件拷出后,再PC上執行xxx-linux-gdb ./test ./core進行分析。

4.1、加載庫文件

在運行xxx-linux-gdb ./test ./core之后,可能存在庫文件關聯不上的情況。

使用info sharedlibrary,查看庫加載情況。

From        To          Syms Read   Shared Object Library
                        No          xxx.so
                        No          /lib/libdl.so.2
                        No          /lib/libpthread.so.0
0x2ab6ec00  0x2ac09ba4  Yes         xxx/lib/libstdc++.so.6
                        No          /lib/libm.so.6
0x2acec460  0x2acf626c  Yes         xxx/lib/libgcc_s.so.1
                        No          /lib/libc.so.6
                        No          /lib/ld.so.1

可以通過set solib-search-path和set solib-absolute-prefix來設置,對應庫所在的路徑。

From        To          Syms Read   Shared Object Library
0x2aaca050  0x2aacc8d0  Yes         xxx.so
0x2aad0ad0  0x2aad17ac  Yes (*)     xxx/lib/libdl.so.2
0x2aad8a50  0x2aae7434  Yes (*)     xxx/lib/libpthread.so.0
0x2ab6ec00  0x2ac09ba4  Yes         xxx/lib/libstdc++.so.6
0x2ac4b3d0  0x2acb1988  Yes         xxx/lib/libm.so.6
0x2acec460  0x2acf626c  Yes         xxx/lib/libgcc_s.so.1
0x2ad17b80  0x2adf699e  Yes         xxx/lib/libc.so.6
0x2aaa89e0  0x2aabf66c  Yes (*)     xxx/lib/ld.so.1
(*): Shared library is missing debugging information.

可以看出相關庫文件都已經加載,只是部分庫文件沒有調試信息。

4.2、查看backtrace

查看coredump的backtrace通過bt即可,更全的信息通過bt full。

產看函數調用棧的幾個函數

bt:顯示所有的函數調用棧幀的信息,每個幀一行。

bt n:顯示棧定的n個幀信息。

bt -n:顯示棧底的n個幀信息。

bt full:顯示棧中所有幀的完全信息如:函數參數,本地變量。

bt full n:用法同上。

bt full -n

(gdb) bt
#0  0x2ad71f1e in memcpy () from xxx/lib/libc.so.6
#1  0x2ad71ac0 in memmove () from xxx/lib/libc.so.6
#2  0x0011f36c in std::__copy_move<false, true, std::random_access_iterator_tag>::__copy_m<unsigned char> (__first=0x34dfb008 "\377\330\377", <incomplete sequence \340>, __last=0x34eeea2c "", 
    ...
#3  0x0011ee22 in std::__copy_move_a<false, unsigned char*, unsigned char*> (__first=0x34dfb008 "\377\330\377", <incomplete sequence \340>, __last=0x34eeea2c "", __result=0x2b2013c0 "\377\330\377", <incomplete sequence \340>)
    at xxxinclude/c++/6.3.0/bits/stl_algobase.h:386
#4  0x0011e7e2 in std::__copy_move_a2<false, __gnu_cxx::__normal_iterator<unsigned char*, std::vector<unsigned char> >, unsigned char*> (__first=..., __last=..., __result=0x2b2013c0 "\377\330\377", <incomplete sequence \340>)
    at xxx/bits/stl_algobase.h:424
#5  0x0011dfd2 in std::copy<__gnu_cxx::__normal_iterator<unsigned char*, std::vector<unsigned char> >, unsigned char*> (__first=..., __last=..., __result=0x2b2013c0 "\377\330\377", <incomplete sequence \340>)
    at xxx/6.3.0/bits/stl_algobase.h:456
#6  0x0011c948 in xxx
#7  0x00133e08 in xxx
#8  0x2aada31e in start_thread () from xxx/libc/lib/libpthread.so.0
#9  0x005a11b4 in ?? ()

4.3、Core Dump核心轉存儲文件目錄和命名規則

默認情況下core文件存在應用當前路徑下,為了區分可以進行設置。

區分core主要通過/proc/sys/kernel/core_uses_pid和/proc/sys/kernel/core_pattern進行設置。

/proc/sys/kernel/core_uses_pid:可以控制產生的core文件的文件名中是否添加pid作為擴展,如果添加則文件內容為1,否則為0。

proc/sys/kernel/core_pattern:可以設置格式化的core文件保存位置或文件名,比如原來文件內容是core-%e

echo "/tmp/core-%e-%p" > core_pattern。

將會控制所產生的core文件會存放到/corefile目錄下,產生的文件名為core-命令名-pid-時間戳

以下是參數列表:

%p - insert pid into filename 添加pid
%u - insert current uid into filename 添加當前uid
%g - insert current gid into filename 添加當前gid
%s - insert signal that caused the coredump into the filename 添加導致產生core的信號
%t - insert UNIX time that the coredump occurred into filename 添加core文件生成時的unix時間
%h - insert hostname where the coredump happened into filename 添加主機名
%e - insert coredumping executable name into filename 添加命令名

當然,你可以用下列方式來完成:

sysctl -w kernel.core_pattern=/tmp/core-%e-%p

4.4、ulimit的使用

功能說明:控制shell程序的資源。

語法:ulimit [-aHS][-c <core文件上限>][-d <數據節區大小>][-f <文件大小>][-m <內存大小>][-n <文件數目>][-p <緩沖區大小>][-s <堆疊大小>][-t <CPU時間>][-u <程序數目>][-v <虛擬內存大小>]

補充說明:ulimit為shell內建指令,可用來控制shell執行程序的資源。

參數:

-a  顯示目前資源限制的設定。
-c <core文件上限>  設定core文件的最大值,單位為區塊。
-d <數據節區大小>  程序數據節區的最大值,單位為KB。
-f <文件大小>  shell所能建立的最大文件,單位為區塊。
-H  設定資源的硬性限制,也就是管理員所設下的限制。
-m <內存大小>  指定可使用內存的上限,單位為KB。
-n <文件數目>  指定同一時間最多可開啟的文件數。
-p <緩沖區大小>  指定管道緩沖區的大小,單位512字節。
-s <堆疊大小>  指定堆疊的上限,單位為KB。
-S  設定資源的彈性限制。
-t <CPU時間>  指定CPU使用時間的上限,單位為秒。
-u <程序數目>  用戶最多可開啟的程序數目。
-v <虛擬內存大小>  指定可使用的虛擬內存上限,單位為KB。

五、GDB小技巧

5.1、關閉

Type <return> to continue, or q <return> to quit---

當現實內容多的時候,GDB會強制分頁,現實就會暫停。但是可能并不需要,可以通過set pagination off關閉。

5.2、附著到已運行kernel

在已運行的Linux上,如果發生死機異常等問題,這時候定位問題需要使用jtag連接上。

連接方法是:

gdb-----------------------------------------------進入gdb shell。

target remote localhost:1025-------------------在gdb shell中通過ip:port連接上target。

file vmlinux----------------------------------------加載符號表。

然后就可以在線查看運行狀態了。

以上就是詳解Linux下調試器GDB的基本使用方法的詳細內容,更多關于Linux 調試器GDB的資料請關注腳本之家其它相關文章!

標簽:運城 連云港 朝陽 面試通知 荊門 雞西 遵義 隴南

巨人網絡通訊聲明:本文標題《詳解Linux下調試器GDB的基本使用方法》,本文關鍵詞  詳解,Linux,下,調試器,GDB,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《詳解Linux下調試器GDB的基本使用方法》相關的同類信息!
  • 本頁收集關于詳解Linux下調試器GDB的基本使用方法的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    亚洲线精品一区二区三区八戒| 老鸭窝一区二区久久精品| 天天av天天翘天天综合网色鬼国产| 粉嫩一区二区三区在线看| 26uuu欧美| 韩国精品免费视频| 欧美www视频| 不卡av在线网| 亚洲一区二区三区四区五区黄| 91成人网在线| 国产高清无密码一区二区三区| 亚洲精品乱码久久久久久久久 | 亚洲国产成人va在线观看天堂| 欧美午夜电影在线播放| 免费看欧美女人艹b| 中文字幕在线观看不卡视频| 欧美日韩亚洲国产综合| 激情小说欧美图片| 国产精品久久久久久久久图文区| 欧美韩日一区二区三区| 色94色欧美sute亚洲线路一ni | 九九视频精品免费| 亚洲欧美在线aaa| 精品乱码亚洲一区二区不卡| av在线不卡观看免费观看| 亚洲综合久久久久| 中文字幕一区二区三| 久久免费偷拍视频| 欧美肥妇free| 3751色影院一区二区三区| 日本高清视频一区二区| 成人av网站在线观看| 风流少妇一区二区| 国产成人精品免费网站| 狠狠v欧美v日韩v亚洲ⅴ| 人禽交欧美网站| 美腿丝袜亚洲一区| 久久av中文字幕片| 国产老女人精品毛片久久| 国模冰冰炮一区二区| 国产二区国产一区在线观看| 国产精品456露脸| av在线不卡网| 欧美色偷偷大香| 91精品国产免费久久综合| 在线综合视频播放| 国产亚洲欧美日韩在线一区| 亚洲人成网站色在线观看| 亚洲精品日产精品乱码不卡| 日韩综合小视频| 国产不卡视频一区| 在线中文字幕一区| 精品国产91亚洲一区二区三区婷婷| 精品久久久久一区二区国产| 亚洲视频小说图片| 日本中文字幕不卡| 北条麻妃一区二区三区| 91麻豆精品国产自产在线观看一区| 2022国产精品视频| 亚洲v中文字幕| 国产美女主播视频一区| 欧美综合天天夜夜久久| 久久色中文字幕| 亚洲高清免费一级二级三级| 成人免费看的视频| 2021久久国产精品不只是精品| 亚洲3atv精品一区二区三区| 丰满岳乱妇一区二区三区| 日韩免费一区二区三区在线播放| 自拍偷拍国产精品| 国产99精品国产| xf在线a精品一区二区视频网站| 亚洲国产中文字幕| 欧美乱熟臀69xxxxxx| 中文字幕一区二区视频| 成人免费高清在线观看| 精品捆绑美女sm三区| 另类小说视频一区二区| 日韩视频免费直播| 蜜桃久久久久久久| 精品99久久久久久| 麻豆精品一二三| 日韩美女在线视频 | 性久久久久久久| 在线不卡一区二区| 日韩av不卡一区二区| 精品国产伦理网| 国产成人在线色| 国产精品入口麻豆九色| 菠萝蜜视频在线观看一区| 一区二区三区资源| 日韩欧美一区二区在线视频| 国产美女一区二区| 国产精品久久久久精k8 | 欧美www视频| 久草热8精品视频在线观看| 久久久噜噜噜久久中文字幕色伊伊| 国产精品一区在线| 一区二区欧美国产| 日韩精品一区二区三区老鸭窝| 韩日av一区二区| 一区二区三区日本| 久久午夜色播影院免费高清| 成人av影院在线| 日本不卡在线视频| 亚洲精品高清在线| 久久精品一区二区三区不卡牛牛| 韩国在线一区二区| 日韩激情中文字幕| 一区二区三区四区视频精品免费| 久久久久久影视| 精品久久久久久亚洲综合网| 色综合中文综合网| 成人黄色软件下载| 另类小说一区二区三区| 亚洲成人高清在线| 欧美日韩日日摸| 91蝌蚪porny| 久久无码av三级| 97se狠狠狠综合亚洲狠狠| 天天色 色综合| 亚洲精品大片www| 精品久久一二三区| 一区二区三区成人| 日本高清不卡在线观看| 天天综合天天做天天综合| 久久久综合九色合综国产精品| 欧美中文字幕一区| 欧美人狂配大交3d怪物一区| 在线观看av一区二区| 在线视频国内一区二区| 91一区二区三区在线观看| 91蜜桃在线免费视频| 色av成人天堂桃色av| 欧美揉bbbbb揉bbbbb| 91精品国产综合久久精品性色| 884aa四虎影成人精品一区| 欧美日韩精品一区二区三区| 国产精品黄色在线观看| 亚洲v中文字幕| 国产精品综合在线视频| 成人av网在线| 在线观看精品一区| hitomi一区二区三区精品| 成人天堂资源www在线| 91热门视频在线观看| 欧美男人的天堂一二区| 538prom精品视频线放| 久久你懂得1024| 亚洲综合在线免费观看| 日本大胆欧美人术艺术动态| 男人的天堂亚洲一区| 国产成人免费av在线| 欧美日韩一区二区电影| 精品国产一区久久| 国产精品电影一区二区三区| 亚洲第一会所有码转帖| 高清不卡在线观看av| 欧美久久久一区| 国产精品免费视频观看| 亚洲国产精品二十页| 亚洲综合av网| 国产一区二区三区久久久 | 777精品伊人久久久久大香线蕉| 国产欧美一区二区精品性| 石原莉奈一区二区三区在线观看| 国产激情视频一区二区在线观看| 欧美一区二区三区免费视频| 一区二区在线免费观看| 久草在线在线精品观看| 日韩亚洲欧美综合| 日本视频在线一区| 日本高清不卡视频| 国产精品成人免费在线| 99精品在线免费| 一区二区三区视频在线看| 国产成人精品一区二| 国产精品欧美一级免费| 97久久超碰国产精品电影| 亚洲色图欧洲色图婷婷| 99久久国产综合精品麻豆| 一区二区成人在线视频| 91精品国产欧美一区二区成人| 久久精品国产99国产精品| 337p粉嫩大胆色噜噜噜噜亚洲| 国产老女人精品毛片久久| 国产精品欧美综合在线| 欧美日韩一区不卡| 国产精品88av| 亚洲午夜一区二区| 精品免费国产二区三区| 国产精品中文字幕日韩精品| 亚洲同性gay激情无套| 91精品国产乱| 福利电影一区二区| 青青草一区二区三区| 中文字幕免费不卡在线| 欧美日精品一区视频| 国产一区二区三区黄视频 | 国产精品久久影院|