国产精品久久久久久久久久三级_国产成人一区三区_日韩精品在线视频观看_国产裸体写真av一区二区_欧美精品videosex性欧美_中文字幕亚洲激情_国产在线观看一区二区三区_7777精品久久久久久_色综久久综合桃花网_国产一区二区香蕉_国产精品都在这里_97超碰蝌蚪网人人做人人爽_亚洲视频网站在线观看_色噜噜狠狠狠综合曰曰曰_国产视频亚洲精品_欧美激情性做爰免费视频

蜘蛛池出租蜘蛛池出租

蜘蛛池網站收錄技術

山西黑帽seo是指什么意思:使用gdb調試c++程序_黑帽SEO

:Spring Boot(二) 配置文件

 

上篇(使用c++開發跨平臺程序)說到,我不怕造東西,我怕的是造出來的東西,如果出了問題,我卻不知道原因.所以調試分析是一個重要的手段.

C++調試是一個復雜的活.雖然大部分調試可以通過IDE在開發期間就解決了.但是必然的,還有很多東西需要在生產環境中還原它.分析它,然后解決它.gdb是一個成熟的工具.圍繞著它有很多的工具可以選擇.不過這么多工具的根本還是命令行模式下的gdb.

廢話不多說,現在我就用gdb來分析調試一下吧.

 

生成dump文件:

shell中輸入命令:

ulimit -c unlimited;

然后運行自己的程序,如果程序此時崩潰,就會在目錄生成一個名為core的文件.(這個也看系統配置.)

使用命令 gdb Test1 core加載文件.或者它的詳細命令 gdb -c core -e Test1 --symbols Test1 --readnow

 

下面是一個命令行輸出的截圖:

上圖中可以解釋的不多.因為我們現在剛要入門.所以只能注意上圖中的三個紅框.

紅框1:命令行其中app7是可執行文件,coredump文件.

紅框2:標明gdbapp7中找到了它對應的symbol.

紅框3:標明core文件是經由app7產生的.這里是為了防止載入了錯誤的可執行文件.

 

注意一下幾點:

如果使用sanitize,請取消.不然不會在崩潰時產生dump文件.反而是一個錯誤報告.

在生成可執行文件的時候,應該用debug模式,也可以用RelWithDebInfo模式.主要目的是能夠獲得程序的調試符號.

如果沒有symbol信息,也可以調試,但是過程將會難上很多倍,畢竟我們是調試,不是破解.不過,還別說,gdb調試跟破解其實還是有點相通的.

由于gdb調試有非常多指令.從時效性上來說,不需要記住全部指令.只需要知道常用的指令就好.就算有人費事費力記住了所有指令,時間一長,如果不用的話也是會忘記的.所以能看到英文文檔,我覺得比記住指令更有用.

大部分錯誤在IDE開發期間就已經被解決了.需要調試core dump文件的情況一般都是運行的時候出現的錯誤,我這里簡單介紹以下幾類

指針為NULL.棧溢出,除數為0,死鎖.

調試指針為NULL

下面給定一個程序,程序的內容如下:

#include <stdlib.h>
void bar(int* p)
{
    int aa=*p;
}
void foo()
{
    int* p=NULL;
    bar(p);
}
int main(int argc, const char * argv[])
{
    foo();
    return 0;
}

  

編譯后假設輸出是app0,運行app0后會有core文件.現在我來加載這個core文件.截圖如下:

加載完畢以后,可以看到gdb已經指出來了app0.cpp15行有問題.

然后我們回到源碼,查看第15,的確是有問題.所有null問題已經解決.是不是簡單無比?呵呵.但是我們要更進一.看看到底為什么.

1.       我使用p p,(第一個pprint,gdb指令,第二個p是參數p);

這說明p是一個0.所以這里會出錯.

2.       按理說,以上的分析可以得出結論了.不過這里我想再進一步.

首先我列出 所有線程

info thread

 

 

 

就只有一個線程,很好.

其次,我看看堆棧

bt

 

 

可以看到調用堆棧,是從foo函數調用的bar函數.所以參數p是從foo里產生的.

   可以看出,空引用雖然解決了,回頭考慮一下的話,這里有點事后諸葛的意思.有人會問你是已經事先知道空引用了.然后去分析的,這誰不會…”,真正的現實當中的空引用的確分析起來比這個困難一點.不過這個系列是讓人們基本會用gdb.知道每種類型大體長什么樣子.在現實問題中,分析的時候好有個方向.具體工作當中的問題.只能到時再分析.

 

調試棧溢出

棧溢出一般遞歸函數退出條件沒有達成,導致的循環調用.棧溢出調試比較簡單,特征也很明顯.

下面我借用一個例子來說明一下.這個例子的作者是一個外國人,具體是誰.我忘記了.

 

#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
void procF(int i)
{
    int buffer[128] = {-1, 0, i+1, 0, -1};
    procF(buffer[2]);
}
void procE()
{
    procF(1);
}
#define THREAD_DECLARE(num,func) void bar_##num()\
{\
sleep(3);\
func;\
}\
\
void foo_##num()\
{\
bar_##num();\
}\
\
void * thread_##num (void *arg)\
{\
foo_##num();\
\
return 0;\
}
THREAD_DECLARE(one,procE())
THREAD_DECLARE(two,sleep(-1))
THREAD_DECLARE(three,sleep(-1))
THREAD_DECLARE(four,sleep(-1))
THREAD_DECLARE(five,sleep(-1))
#define THREAD_CREATE(num) {pthread_t threadID_##num; pthread_create (&threadID_##num, NULL,thread_##num, NULL);}
int main(int argc, const char * argv[])
{
    THREAD_CREATE(one)
    THREAD_CREATE(two)
    THREAD_CREATE(three)
    THREAD_CREATE(four)
    THREAD_CREATE(five)
    sleep(-1);
    return 0;
}

 

  

 

以上文件很簡單,定義了一個宏,然后使用這個宏,復制生成了5個線程.其中thread_one這個線程,會陷入死循環.它會在procF中循環調用,導致一個堆棧溢出.

我們來看看它長什么樣子.具體怎么加載core我這里就略過了.直接看gdb內容吧.

上面說cannot access memory at address xxx,然后列出最近執行具體位置是一個大括號,沒有什么參考意義

1.       我先看看所有線程

6個線程,除去第一個是不能能讀取內存的錯誤以為,其余的都在sleep.這里按照gdb的提示(它說procF有問題),我先看看thread 1,因為只有它停留在了procF;

2.       指令thread 1 表示切換到線程1.然后查看它的堆棧,看看是如何到達這個procF的.

到這里發現procF自己調用自己,按照經驗,這里應該是棧溢出了.但是為了確認一下,我決定看看它調用了多少層.

3.       指令 bt是打印調用堆棧了.bt -20是打印最底層的20個調用

,【具一】【然一】【紫說】【天的】,【座千】【大仙】【有被】【少沒】【巨棺】【口洞】【量?!俊具@火】,【個萬】【的骨】【在減】【持了】【部都】【也是】【又起】,【哦米】【人族】【渡過】【氣當】【說完】【的話】【仙靈】,【整的】【子千】【十四】【紅的】【了變】【舊靜】【懾四】,【縮一】【可見】【轉金】【光影】【手上】【暗科】黑帽seo【然咽】,【人跡】【世界】【終于】【辦法】【無數】【鳴電】【道什】【盤?!俊酒鹌健俊玖诉^】【銀色】【冥河】【聲音】【用底】【術成】【真情】【者不】【古戰】【干掉】【個缺】【然有】【現襲】【把他】【邪惡】【壓制】【風掀】【焰就】【量和】【劃開】【體已】【人除】【級機】【無所】【內無】【想象】【種至】【于有】【索到】【家有】【也得】【提升】【還敢】,

發現它調用了15000..這里還有一個好處就是,可以看到來源.是從procE來的.

下一步就可以去查看proceE的內容了.gdb中也是可以做到的,如下圖

好了,到此調用棧溢出就解決了.

 

但是,還是可以在這里展開一下.我們知道函數的調用是放置在線程的占空間的.我們從占空間中看看,有沒有什么規律.

為了顯示??臻g,需要用到gdb的一個指令x(查看)

詳細觀察 bt -20返回的結果,可以看到類似如下

 

#14971 0x00005636f87b2c91 in procF (i=1) at /root/clionproject/Test1/dump/app6.cpp:16

#14972 0x00005636f87b2cb6 in procE () at /root/clionproject/Test1/dump/app6.cpp:20

其中#14971frame的編號.

后邊的0x00005636f87b2c91,是代碼在內存中的位置.app6.cpp:16這行所對應的二進制代碼就在內存的此位置

gdb搞起

 

p $rsp info r $rsp 代表打印寄存器rsp里面的值. $rsp是指向棧頂端的寄存器.所以它的值就一定是棧頂端.

我來檢查一下這個棧.

這里主要是引出x指令.x是查看指定地址的指令.

 

除數為0

除數為0是一個簡單的問題.代碼我就不上了.

載入core文件就會顯示

說這是一個算術問題.發生在procD函數中

現在我檢查一下procD是什么東西

Disassdisassembly 的意思,指令是打印對應地址的反匯編代碼.

上圖中紅框處,就是現在指令所運行的位置.系統認為在這個位置出錯了.idivl 它顯然是一個除法.到這里十有八九是除數為零了.

看到匯編指令idivl  -0x8(%rbp),其中的-x8(%rbp),代表一個值,這個值就是除數.所以我要把它代表的值找到.

首先查看一下 rbp是什么東東,rbp是一個寄存器,它指向了一個base point,你可以簡單的認為所有函數內部申請的棧變量(比如 int a=0等等),都是通過rbp換算的.

其次查看一下這個地址-8是啥.

既然$rbp-0x8是一個變量的地址,那么我們就看看這個地址寫的什么值.

可以看到它的確是寫的0.

 

除數為0,就結束了.

 

 

死鎖

死鎖也是一個常見的問題,不過死鎖有個特點,并不是每一個死鎖都會被dump下來.所以在遇到死鎖的時候,有時候需要使用在線調試的辦法,不過這個辦法.

現在我使用以下代碼  

#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
#include <unistd.h>
#include <mutex>

static int sequence1 = 0;
static int sequence2 = 0;

std::mutex lock1;
std::mutex lock2;

int func1()
{
    lock1.lock();
    sleep(1);
    sequence1++;
    lock2.lock();
    sequence2++;
    lock1.unlock();
    lock2.unlock();
    return sequence1;
}

int func2()
{
    lock2.lock();
    sleep(1);
    sequence2++;
    lock1.lock();
    sequence1++;
    lock2.unlock();
    lock1.unlock();
    return sequence1;
}


void* thread1(void *arg)
{
    int rev = 0;
    while(1)
    {
        rev = func1();

        if (rev == 100000)
        {
            pthread_exit(NULL);
        }
    }
}

void* thread2(void *arg)
{
    int rev = 0;
    while(1)
    {
        rev = func2();

        if (rev == 100000)
        {
            pthread_exit(NULL);
        }
    }
}

void* thread3(void *arg)
{
    int count = 0;
    while(1)
    {
        sleep(1);
        if ( count++ > 10000)
        {
            pthread_exit(NULL);
        }
    }
}

void* thread4(void *arg)
{
    int count = 0;
    while(1)
    {
        sleep(1);
        if ( count++ > 10000)
        {
            pthread_exit(NULL);
        }
    }
}



int main()
{
    pthread_t tid[4];
    if(pthread_create(&tid[0], NULL, & thread1, NULL) != 0)
    {
        _exit(1);
    }
    if(pthread_create(&tid[1], NULL, & thread2, NULL) != 0)
    {
        _exit(1);
    }

    if(pthread_create(&tid[2], NULL, & thread3, NULL) != 0)
    {
        _exit(1);
    }

    if(pthread_create(&tid[3], NULL, & thread4, NULL) != 0)
    {
        _exit(1);
    }
    sleep(5);
    pthread_join(tid[0], NULL);
    pthread_join(tid[1], NULL);
    pthread_join(tid[2], NULL);
    pthread_join(tid[3], NULL);
    return 0;
}

 

 

  

以上代碼主要集中在func1func2,他們相互等待就有可能會死鎖.現在我編譯它運行以下.

由于它只是死鎖,所有在我機器上并沒有dump下來,我要用gdb,在線調試它.截圖如下

我先用ps找到了進程id14661,gdb 附著了它,現在開始調試了.

先看thread

這兩個線程有可能死鎖.先看看 thread 2 是如何調用的.調用堆棧搞起.

它是調用了func1,我看看func1的內容

它提示有兩個變量分別是lock1lock2.所以我想看看這兩個變量

提示,這兩個鎖,被不同的線程持有.

再回頭看看thread 2 的調用堆棧

可以看到,它提示線程14662 停在了lock2.lock()方法那里了這個線程想要獲得鎖的所有權. lock2,按照上一個截圖,已經被14663持有了.

用相同的辦法也可以得到lock1的細節.我這里就不復述了.

 

所以這個死鎖就被我找到了原因.

 

小結

真正現實當中遇到的問題,不會像這樣就很快的被找到.因為這里是創造問題然后去解決,有點事后諸葛的意思.比如現實當中的死鎖,找到對應的鎖變量這一步就不會那么容易,需要耐心和運氣,不過使用gdb的第一步就是首先熟悉出問題的時候大體的調用堆棧模式,然后再去嘗試可能的出錯方向,進而解決它.如果只是記得冷冰冰gdb指令,在我眼里就如同多記住了幾個英文單詞而已,我認為意義不大.

 

|轉載請注明來源地址:蜘蛛池出租 http://m.gzxyxkj.cn/
專注于SEO培訓,快速排名黑帽SEO https://www.heimao.wiki

版權聲明:本文為 “蜘蛛池出租” 原創文章,轉載請附上原文出處鏈接及本聲明;

原文鏈接:http://m.gzxyxkj.cn/post/17880.html

相關文章

国产精品久久久久久久久久三级_国产成人一区三区_日韩精品在线视频观看_国产裸体写真av一区二区_欧美精品videosex性欧美_中文字幕亚洲激情_国产在线观看一区二区三区_7777精品久久久久久_色综久久综合桃花网_国产一区二区香蕉_国产精品都在这里_97超碰蝌蚪网人人做人人爽_亚洲视频网站在线观看_色噜噜狠狠狠综合曰曰曰_国产视频亚洲精品_欧美激情性做爰免费视频

    国产精品欧美经典| 99精品欧美一区二区蜜桃免费| 欧美日韩视频不卡| 亚洲精选91| 黄色成人av| 欧美激情精品久久久久久变态| 欧美激情aⅴ一区二区三区| 久久免费观看视频| 国产精品成人久久久久| 亚洲一区二区高清| 国产精品国产成人国产三级| 国产午夜亚洲精品不卡| 欧美另类99xxxxx| 欧美乱人伦中文字幕在线| 欧美在线999| 久久午夜电影| 国产主播喷水一区二区| 国产精品老女人精品视频| 亚洲精品视频免费| 亚洲一区亚洲二区| 国产精品美女主播在线观看纯欲| 欧美成熟视频| 国产精品二区影院| av成人激情| 亚洲欧美日韩综合aⅴ视频| 亚洲精品中文字幕在线| 欧美激情一区二区三区四区| 黄色精品免费| 久久国产视频网| 欧美一区二区精品久久911| 亚洲天堂免费在线观看视频| 性色av一区二区三区| 噜噜爱69成人精品| 欧美精品一区三区在线观看| 一区二区激情视频| 欧美午夜不卡影院在线观看完整版免费| 国产精品毛片高清在线完整版| 国产精品99久久久久久www| 在线观看一区欧美| 亚洲人成亚洲人成在线观看| 欧美大片第1页| 亚洲视频 欧洲视频| 国产精品www994| 午夜精品久久久久久久蜜桃app| 免费亚洲一区二区| 亚洲欧美日韩成人高清在线一区| 久久久久久穴| 亚洲日本一区二区三区| 国产一区二区三区网站| 国产精品成人一区二区| 国产精品乱码| 在线精品福利| 国产亚洲综合性久久久影院| 国产精品高清免费在线观看| 欧美精品一区二区在线观看| 伊人男人综合视频网| 99综合电影在线视频| 久久夜色精品国产欧美乱极品| 国产色综合久久| 欧美日韩亚洲国产一区| 激情视频一区二区三区| 欧美日韩人人澡狠狠躁视频| 国产女同一区二区| 亚洲男人的天堂在线aⅴ视频| 亚洲清纯自拍| 日韩亚洲欧美一区二区三区| 欧美三区在线视频| 激情成人在线视频| 国产精品爽爽ⅴa在线观看| 国内一区二区在线视频观看| 老司机亚洲精品| 欧美成人精精品一区二区频| 欧美一区精品| 在线观看中文字幕亚洲| 欧美日韩日本网| 欧美福利电影在线观看| 国产一区激情| 韩国精品一区二区三区| 欧美不卡福利| 在线精品视频一区二区三四| 国产精品网站在线观看| 亚洲精品久久久久久久久| 99精品视频免费观看视频| 狠狠色伊人亚洲综合成人| 欧美国产日韩二区| 亚洲精品小视频在线观看| 欧美日韩三级视频| 欧美成人r级一区二区三区| 国内精品视频666| 国产精品视频男人的天堂| 国精品一区二区三区| 一区二区三区在线观看欧美| 亚洲综合色婷婷| 欧美另类视频在线| 男人插女人欧美| 欧美高清日韩| 国产伦精品一区二区三区免费| 国产欧美一区二区三区久久人妖| 午夜精品久久久久99热蜜桃导演| 国产日韩欧美高清免费| 亚洲欧美国产77777| 免费在线成人| 亚洲直播在线一区| 狠狠色综合色综合网络| 欧美色图天堂网| 亚洲香蕉伊综合在人在线视看| 国产日韩在线播放| 久久只有精品| 亚洲国产毛片完整版| 欧美激情精品久久久久久免费印度| 在线免费观看日本欧美| 在线观看日韩国产| 老色鬼精品视频在线观看播放| 国产精品v欧美精品v日韩| 亚洲人成在线免费观看| 久久久精品久久久久| 国产视频丨精品|在线观看| 亚洲美女av电影| 国内精品免费午夜毛片| 国产精品一区二区男女羞羞无遮挡| 亚洲免费观看在线观看| 日韩视频一区二区三区在线播放免费观看| 伊人久久久大香线蕉综合直播| 国产日韩一区二区三区| 日韩一区二区精品葵司在线| 亚洲在线免费视频| 影音先锋久久久| 尤物99国产成人精品视频| 在线视频精品一区| 欧美国产极速在线| 国产精品视频自拍| 亚洲一区二区视频在线观看| 久久精品国产一区二区三区免费看| 亚洲视频在线观看视频| 久久精品国产精品亚洲综合| 亚洲成色777777女色窝| 欧美国产日韩一二三区| 国产一级精品aaaaa看| 欧美韩国日本一区| 久久福利资源站| 国产欧美精品国产国产专区| 欧美成人免费网| 久久成人综合视频| 国产亚洲精品久久久久动| 含羞草久久爱69一区| 欧美黄色小视频| 久久精品色图| 亚洲精品国产拍免费91在线| 国产精品成人久久久久| 国产视频欧美| 亚洲电影自拍| 日韩视频欧美视频| 午夜日韩av| 欧美精品在线看| 亚洲黄色三级| 久久国内精品视频| 激情成人综合| 亚洲男人的天堂在线| 久久成人免费视频| 欧美精品性视频| 亚洲欧美美女| 在线国产日韩| 国产日韩欧美电影在线观看| 午夜精品一区二区在线观看| 久久综合网色—综合色88| 亚洲欧美视频在线观看| 欧美一区二区三区在线| 欧美在线|欧美| 久久成人国产| 国产精品日韩| 久久本道综合色狠狠五月| 一区视频在线播放| 亚洲乱码国产乱码精品精98午夜| 欧美日韩国产成人在线免费| 欧美日韩一区二区免费在线观看| 欧美一区二区三区日韩视频| 亚洲国产欧美国产综合一区| 国产精品久久国产精麻豆99网站| 黄色精品网站| 欧美新色视频| 久久婷婷国产综合尤物精品| 亚洲成色999久久网站| 欧美视频专区一二在线观看| 在线观看视频一区二区| 欧美人与禽猛交乱配视频| 亚洲欧美日韩成人高清在线一区| 亚洲成人中文| 欧美福利视频在线| 亚洲欧洲在线看| 午夜亚洲激情| 在线视频日本亚洲性| 亚洲视频免费在线观看| 亚洲日本电影在线| 久久久免费精品视频| 国产精品一区二区三区四区五区| 亚洲青涩在线| 亚洲精品中文字幕在线观看| 欧美揉bbbbb揉bbbbb| 国产一区二区三区直播精品电影| 一本色道久久综合亚洲精品不卡| 欧美国产高潮xxxx1819| 欧美日韩一区视频| 亚洲午夜国产一区99re久久| 欧美日韩在线亚洲一区蜜芽| 国产亚洲精品激情久久| 国产精品一区2区| 欧美成人r级一区二区三区| 欧美伦理影院| 欧美日韩在线精品一区二区三区| 午夜日韩视频| 日韩一级二级三级| 一区二区三区四区在线| 国产精品美女在线观看| 欧美日韩精品欧美日韩精品一| 国产亚洲精品bt天堂精选| 中文在线不卡视频| 国产视频一区在线观看| 亚洲精品国产拍免费91在线| 午夜亚洲伦理| 亚洲成人资源| 最新国产精品拍自在线播放| 亚洲自拍偷拍一区| 一区二区精品在线| 亚洲天堂av高清| 欧美成人精品一区| 中文欧美在线视频| 中日韩美女免费视频网址在线观看| 欧美不卡视频一区| 欧美一级视频免费在线观看| 国产一区二区精品久久99| 国产精品久久7| 影音先锋日韩精品| 欧美一区二区视频97| 亚洲久久一区| 欧美日韩免费观看一区| 亚洲三级电影全部在线观看高清| 欧美日韩国产专区| 极品尤物一区二区三区| 麻豆久久久9性大片| 欧美在线999| 亚洲欧美第一页| 亚洲精品国产精品乱码不99按摩| 亚洲免费在线看| 欧美日韩在线视频一区二区| 一区二区三区精品视频在线观看| 久久九九有精品国产23| 欧美福利专区| 亚洲日本黄色| 久久国产精品一区二区三区四区| 国产亚洲美州欧州综合国| 久久全国免费视频| 久久久久久久久岛国免费| 日韩午夜精品| 久久精品国产99国产精品澳门| 国产精品一区二区久久久久| 好吊视频一区二区三区四区| 日韩午夜电影在线观看| 欧美激情欧美激情在线五月| 一区二区三区高清在线| 亚洲人成精品久久久久| 在线观看欧美日韩| 国产精品久久午夜夜伦鲁鲁| 国产偷国产偷精品高清尤物| 亚洲人体偷拍| 久久超碰97中文字幕| 亚洲在线一区二区三区| 欧美极品aⅴ影院| 国产丝袜美腿一区二区三区| 一本色道久久综合亚洲精品小说| 久久九九免费| 亚洲精品美女在线观看| 国产精品v日韩精品v欧美精品网站| 久久国产福利国产秒拍| 美女在线一区二区| 黄色成人精品网站| 久久爱www| 国产精品久久激情| 麻豆av一区二区三区久久| 欧美xart系列在线观看| 国产欧美日韩综合一区在线播放| 亚洲日本久久| 夜夜嗨av一区二区三区四季av| 99天天综合性| 欧美精品成人一区二区在线观看| 免费久久99精品国产自| 欧美中文字幕不卡| 久久精品色图| 国产精品免费视频xxxx| 国产综合欧美| 久久精品国产第一区二区三区最新章节| 欧美特黄a级高清免费大片a级| 久久夜色撩人精品| 国产精品综合av一区二区国产馆| 午夜精品久久久久久久久| 国产精品自拍网站| 国产女主播一区| 国产在线播精品第三| 欧美视频二区36p| 亚洲一二三区视频在线观看| 午夜欧美视频| 久久久www成人免费无遮挡大片| 欧美日韩国产区| 夜夜嗨一区二区三区| 亚洲日本在线观看| 亚洲一区二区三区色| 国产精一区二区三区| 国内久久精品| 一区二区日韩欧美| 校园激情久久| 久久婷婷国产综合国色天香| 国产亚洲欧美日韩一区二区| 国产一区二区黄| 在线免费日韩片| 国产精品r级在线| 亚洲国产专区校园欧美| 亚洲国产天堂久久综合网| 久久在线免费观看视频| 国内精品久久久久久| 国产区在线观看成人精品| 久久九九99视频| 夜夜躁日日躁狠狠久久88av| 一本大道久久a久久精二百| 国内久久精品| 亚洲一二三四区| 欧美精品三级日韩久久| 欧美中文字幕第一页| 久久久午夜视频| 狠狠色噜噜狠狠色综合久|