精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

C++程序崩潰現(xiàn)場(chǎng)破案指南:讓 core dump 乖乖交代真相!

開發(fā)
當(dāng)下次你的程序崩潰時(shí),不要驚慌,拿出你的"偵探工具箱",沉著冷靜地說:"給我一個(gè)core dump,我能告訴你哪里出了問題!"

大家好,我是小康。今天我們來聊一聊程序員噩夢(mèng)中的常客——程序崩潰問題。作為一名C++開發(fā)者,我敢打賭你一定經(jīng)歷過這樣的場(chǎng)景:

  • 你是否曾在深夜里,對(duì)著終端屏幕上的"Segmentation fault (core dumped)"發(fā)呆?
  • 你是否曾經(jīng)為了一個(gè)神秘的崩潰問題,徹夜難眠,卻無從下手?
  • 你是否曾經(jīng)羨慕那些能迅速定位崩潰問題的大佬,覺得那是一種"神秘技能"?

如果你點(diǎn)頭了,那么恭喜你,今天這篇文章就是為你量身定做的!

一、什么是core dump?別被這個(gè)名字嚇到

先別被"core dump"這個(gè)聽起來很高大上的名字嚇到。簡(jiǎn)單來說,core dump就是程序崩潰時(shí)的"現(xiàn)場(chǎng)照片"。

想象一下,你的程序就像一個(gè)在高速公路上奔馳的賽車。突然,"砰"的一聲,它撞墻了(崩潰了)。此時(shí)操作系統(tǒng)會(huì)立即拍下事故現(xiàn)場(chǎng)的全景照片,把車子的狀態(tài)、路況、方向盤位置等信息都記錄下來 - 這就是core dump文件。

它包含了程序崩潰那一刻的所有內(nèi)存信息、寄存器狀態(tài)、調(diào)用棧等關(guān)鍵數(shù)據(jù),是我們破案的重要線索!

二、讓core dump現(xiàn)身:設(shè)置環(huán)境才能留下"罪證"

在很多Linux系統(tǒng)中,core dump功能默認(rèn)是關(guān)閉的。所以我們首先要讓系統(tǒng)在程序崩潰時(shí)乖乖交出"現(xiàn)場(chǎng)照片"。

# 查看當(dāng)前core dump設(shè)置
ulimit -c

# 如果顯示0,說明core dump功能被禁用了
# 開啟core dump功能(不限制大小)
ulimit -c unlimited

# 設(shè)置core文件的存放位置和命名方式(以Ubuntu為例)
sudo sh -c 'echo "kernel.core_pattern=/tmp/core-%e-%p-%t" > /etc/sysctl.d/50-coredump.conf'
sudo sysctl -p /etc/sysctl.d/50-coredump.conf

這樣設(shè)置后,當(dāng)程序崩潰時(shí),系統(tǒng)會(huì)在 /tmp 目錄下生成一個(gè) core 文件,文件名包含程序名(-e)、進(jìn)程ID(-p)和時(shí)間戳(-t)。

三、制造一個(gè)崩潰現(xiàn)場(chǎng):來個(gè)"真實(shí)案例"

為了讓大家有直觀感受,我們先制造一個(gè)典型的C++程序崩潰:

// crash.cpp - 一個(gè)會(huì)崩潰的小程序
#include <iostream>

void dangerous_function() {
    int* ptr = nullptr;  // 空指針
    *ptr = 42;           // 災(zāi)難即將發(fā)生!
}

void another_function() {
    dangerous_function();
}

int main() {
    std::cout << "準(zhǔn)備崩潰,請(qǐng)系好安全帶..." << std::endl;
    another_function();
    std::cout << "這行永遠(yuǎn)不會(huì)執(zhí)行到..." << std::endl;
    return0;
}

編譯并運(yùn)行它:

g++ -g crash.cpp -o crash  # -g選項(xiàng)很重要!它會(huì)加入調(diào)試信息
./crash

"砰!"程序崩潰了,終端顯示:

準(zhǔn)備崩潰,請(qǐng)系好安全帶...
Segmentation fault (core dumped)

現(xiàn)在去/tmp目錄看看,應(yīng)該能找到一個(gè)名為core-crash-進(jìn)程ID-時(shí)間戳的文件。這就是我們的"現(xiàn)場(chǎng)照片"!

四、偵探工作開始:解讀core dump文件

有了core dump文件,我們就可以開始破案了。我們需要一個(gè)強(qiáng)大的工具——GDB(GNU調(diào)試器)。

gdb ./crash /tmp/core-crash-xxxx-xxxx

一進(jìn)入GDB,它就會(huì)告訴你程序是在哪里崩潰的:

Core was generated by `./crash'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x0000555555555175 in dangerous_function() at crash.cpp:5
5       *ptr = 42;  // 災(zāi)難即將發(fā)生!

看!它直接指出了問題所在:crash.cpp文件的第 5 行,我們?cè)噲D往空指針寫入數(shù)據(jù)。

五、深入調(diào)查:查看完整調(diào)用棧

但這只是冰山一角。在實(shí)際項(xiàng)目中,我們需要了解更多信息,比如程序是從哪里調(diào)用到崩潰點(diǎn)的。使用bt命令可以查看完整調(diào)用棧:

(gdb) bt
#0  0x0000555555555175 in dangerous_function() at crash.cpp:5
#1  0x00005555555551a3 in another_function() at crash.cpp:9
#2  0x00005555555551bf in main() at crash.cpp:14

這個(gè)調(diào)用棧清楚地展示了程序的執(zhí)行路徑:main函數(shù)調(diào)用了another_function,而another_function 又調(diào)用了 dangerous_function,最終在 dangerous_function 中崩潰。

六、收集更多證據(jù):查看變量值

我們可以進(jìn)一步檢查崩潰時(shí)各個(gè)變量的值:

(gdb) frame 0
#0  0x0000555555555175 in dangerous_function() at crash.cpp:5
5       *ptr = 42;  // 災(zāi)難即將發(fā)生!

(gdb) print ptr
$1 = (int *) 0x0

這證實(shí)了 ptr 確實(shí)是一個(gè)空指針(0x0)。

我們還可以檢查其他棧幀中的變量:

(gdb) frame 2
#2  0x00005555555551bf in main() at crash.cpp:14
14        another_function();

(gdb) list
9       void another_function() {
10          dangerous_function();
11      }
12      
13      int main() {
14          std::cout << "準(zhǔn)備崩潰,請(qǐng)系好安全帶..." << std::endl;
15          another_function();
16          std::cout << "這行永遠(yuǎn)不會(huì)執(zhí)行到..." << std::endl;
17          return 0;
18      }

這樣我們就獲得了更多代碼上下文信息。

七、實(shí)戰(zhàn):更復(fù)雜的案例分析

讓我們看一個(gè)在實(shí)際開發(fā)中非常典型且常見的案例:釋放后使用(Use After Free) 錯(cuò)誤。這類問題特別容易產(chǎn)生core dump,且常常讓開發(fā)者頭疼不已。

// uaf_crash.cpp
#include <iostream>
#include <string>
#include <vector>

class User {
private:
std::string name;
int* score;  // 動(dòng)態(tài)分配的積分

public:
User(conststd::string& username, int initial_score) : name(username) {
    score = newint(initial_score);
    std::cout << "創(chuàng)建用戶: " << name << ", 初始積分: " << *score << std::endl;
}

~User() {
    std::cout << "銷毀用戶: " << name << std::endl;
    delete score;  // 釋放內(nèi)存
    score = nullptr;  // 這是個(gè)好習(xí)慣,但在析構(gòu)函數(shù)中其實(shí)沒有實(shí)際作用
}

void add_points(int points) {
    *score += points;
    std::cout << name << " 獲得 " << points << " 積分,當(dāng)前總分: " << *score << std::endl;
}

std::string get_name() const {
    return name;
}

int get_score() const {
    return *score;  // 直接解引用,但如果score已經(jīng)被釋放,這里會(huì)崩潰
}
};

// 這個(gè)函數(shù)保存了對(duì)已刪除對(duì)象的引用!
void process_later(const std::vector<User*>& users) {
    // 假設(shè)這是一個(gè)延遲處理函數(shù),在主程序的其他部分執(zhí)行后才會(huì)運(yùn)行
    std::cout << "\n進(jìn)行延遲處理..." << std::endl;

    for (constauto& user : users) {
        std::cout << "處理用戶: " << user->get_name();
        std::cout << ", 積分: " << user->get_score() << std::endl;
    }
}

int main() {
    std::vector<User*> active_users;
    std::vector<User*> users_for_processing;

    // 創(chuàng)建一些用戶
    User* alice = new User("Alice", 100);
    User* bob = new User("Bob", 150);
    User* charlie = new User("Charlie", 200);

    active_users.push_back(alice);
    active_users.push_back(bob);
    active_users.push_back(charlie);

    // 為一些用戶增加積分
    alice->add_points(50);
    charlie->add_points(25);

    // 將用戶加入到待處理隊(duì)列
    users_for_processing.push_back(alice);
    users_for_processing.push_back(bob);

    std::cout << "\n刪除一些用戶..." << std::endl;
    // 模擬用戶注銷,刪除Bob
    for (auto it = active_users.begin(); it != active_users.end(); ) {
        if ((*it)->get_name() == "Bob") {
            delete *it;  // 釋放Bob的內(nèi)存
            it = active_users.erase(it);  // 從活躍用戶列表移除
        } else {
            ++it;
        }
    }

    // 這里的問題是:Bob已經(jīng)被刪除,但users_for_processing中仍然保留了指向Bob的指針
    // 當(dāng)調(diào)用process_later時(shí),嘗試訪問Bob的成員將導(dǎo)致崩潰
    process_later(users_for_processing);  // 這里會(huì)崩潰!

    // 清理剩余用戶
    for (auto user : active_users) {
        delete user;
    }

    return0;
}

編譯并運(yùn)行這個(gè)程序:

g++ -g uaf_crash.cpp -o uaf_crash
./uaf_crash

程序會(huì)輸出:

創(chuàng)建用戶: Alice, 初始積分: 100
創(chuàng)建用戶: Bob, 初始積分: 150
創(chuàng)建用戶: Charlie, 初始積分: 200
Alice 獲得 50 積分,當(dāng)前總分: 150
Charlie 獲得 25 積分,當(dāng)前總分: 225

刪除一些用戶...
銷毀用戶: Bob

進(jìn)行延遲處理...
處理用戶: Alice, 積分: 150
Segmentation fault (core dumped)

完美!我們得到了一個(gè)core dump。現(xiàn)在用 GDB 分析:

gdb ./uaf_crash /tmp/core-uaf_crash-xxxx-xxxx

GDB會(huì)告訴我們崩潰的位置:

warning: Section `.reg-xstate/3522' in core file too small.
#0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
50	../sysdeps/unix/sysv/linux/raise.c: No such file or directory.

查看更多信息:

(gdb) bt
#0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
#1  0x00007fdc31ebb859 in __GI_abort () at abort.c:79
#2  0x00007fdc32154ee6 in ?? () from /lib/x86_64-linux-gnu/libstdc++.so.6
#3  0x00007fdc32166f8c in ?? () from /lib/x86_64-linux-gnu/libstdc++.so.6
#4  0x00007fdc32166ff7 in std::terminate() () from /lib/x86_64-linux-gnu/libstdc++.so.6
#5  0x00007fdc32167258 in __cxa_throw () from /lib/x86_64-linux-gnu/libstdc++.so.6
#6  0x00007fdc321549ba in ?? () from /lib/x86_64-linux-gnu/libstdc++.so.6
#7  0x00007fdc3220c73a in void std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_construct<char*>(char*, char*, std::forward_iterator_tag) () from /lib/x86_64-linux-gnu/libstdc++.so.6
#8  0x0000562f0f6f6d39 in User::get_name[abi:cxx11]() const (this=0x562f3f227710) at test2.cpp:29
#9  0x0000562f0f6f64d0 in process_later (users=std::vector of length 2, capacity 2 = {...}) at test2.cpp:43
#10 0x0000562f0f6f68c9 in main () at test2.cpp:83

(gdb) frame 8
#8  0x0000562f0f6f6d39 in User::get_name[abi:cxx11]() const (this=0x562f3f227710) at test2.cpp:29
29         return name;

(gdb) p *this
$1 = {name = <error reading variable: Cannot create a lazy string with address 0x0, and a non-zero length.>, score = 0x0}

看到問題了嗎?我們發(fā)現(xiàn):程序在User::get_name()方法中崩潰,嘗試訪問空指針。

通過調(diào)用棧,我們可以看到崩潰發(fā)生在process_later函數(shù)中,最終追溯到process_later 函數(shù)的第43行。

這是一個(gè)典型的Use After Free(釋放后使用)錯(cuò)誤:我們?cè)诘?74 行刪除了 Bob 對(duì)象,但在第43行的process_later函數(shù)中仍然嘗試使用指向已刪除對(duì)象的指針。

如何修復(fù)這類問題?

使用智能指針:使用std::shared_ptr可以避免這類問題。

這個(gè)例子展示了C++中最常見且最難調(diào)試的問題之一:懸空指針(dangling pointers)。在復(fù)雜系統(tǒng)中,對(duì)象的生命周期管理不當(dāng)經(jīng)常導(dǎo)致這類問題,而 core dump 分析是發(fā)現(xiàn)它們的有力工具。

八、常見崩潰類型及解決方法

通過core dump文件,我們可以診斷出很多常見的崩潰類型:

(1) 空指針解引用(剛才第一個(gè)例子)

  • 癥狀:訪問地址0x0附近的內(nèi)存
  • 解決:使用前檢查指針是否為nullptr

(2) 數(shù)組越界

  • 癥狀:訪問數(shù)組邊界之外的內(nèi)存
  • 解決:確保索引在有效范圍內(nèi),使用at()等帶邊界檢查的方法

(3) 使用已釋放的內(nèi)存(懸空指針)

  • 癥狀:訪問已經(jīng)被free或delete的內(nèi)存
  • 解決:釋放后將指針置空,使用智能指針

(4) 棧溢出

  • 癥狀:遞歸太深或局部變量太大
  • 解決:控制遞歸深度,大數(shù)組使用堆內(nèi)存

(5) 多線程數(shù)據(jù)競(jìng)爭(zhēng)

  • 癥狀:不確定位置崩潰,與時(shí)序有關(guān)
  • 解決:正確使用鎖或其他同步機(jī)制

九、預(yù)防勝于治療:避免崩潰的最佳實(shí)踐

  • 使用智能指針:std::unique_ptr和std::shared_ptr可以自動(dòng)管理內(nèi)存
std::unique_ptr<int[]> data = std::make_unique<int[]>(10);
  • 使用邊界檢查:優(yōu)先使用STL容器,使用at()而非[]
std::vector<int> vec = {1, 2, 3};
try {
    vec.at(5) = 10;  // 會(huì)拋出異常而非崩潰
} catch (const std::out_of_range& e) {
    std::cerr << "捕獲到異常: " << e.what() << std::endl;
}
  • 啟用編譯器警告:
g++ -Wall -Wextra -Werror -g program.cpp -o program
  • 使用靜態(tài)分析工具:如cppcheck、Clang Static Analyzer
  • 內(nèi)存檢查工具:如Valgrind、AddressSanitizer
g++ -g -fsanitize=address program.cpp -o program

十、總結(jié):成為C++崩潰現(xiàn)場(chǎng)的"神探"

通過本文的學(xué)習(xí),你現(xiàn)在應(yīng)該掌握了:

  • 如何設(shè)置系統(tǒng)生成 core dump 文件
  • 如何使用 GDB 分析 core dump 找出崩潰原因
  • 如何識(shí)別并解決常見的崩潰問題
  • 如何預(yù)防程序崩潰

記住,調(diào)試程序崩潰就像偵探破案 - 需要仔細(xì)收集證據(jù)(core dump),分析線索(調(diào)用棧、變量值),最終找出"兇手"(bug)。

當(dāng)下次你的程序崩潰時(shí),不要驚慌,拿出你的"偵探工具箱",沉著冷靜地說:"給我一個(gè)core dump,我能告訴你哪里出了問題!"

彩蛋

如果你想測(cè)試自己是否真的掌握了這些知識(shí),可以嘗試分析以下崩潰代碼并找出問題所在:

#include <iostream>
#include <string>

class Person {
private:
char* name;
int age;

public:
Person(conststd::string& n, int a) : age(a) {
    name = newchar[n.length() + 1];
    strcpy(name, n.c_str());
    std::cout << "Person created: " << name << std::endl;
}

// 析構(gòu)函數(shù)
~Person() {
    std::cout << "Person destroyed: " << name << std::endl;
    delete[] name;
}

// 拷貝構(gòu)造函數(shù) - 有重大缺陷!
Person(const Person& other) : age(other.age) {
    // 淺拷貝!只復(fù)制了指針,沒有復(fù)制內(nèi)容
    name = other.name;  // 危險(xiǎn)!兩個(gè)對(duì)象指向同一塊內(nèi)存
}

void introduce() {
    std::cout << "Hi, I'm " << name << ", " << age << " years old." << std::endl;
}
};

int main() {
    {
        Person original("Alice", 30);
        original.introduce();

        // 創(chuàng)建一個(gè)副本
        Person copy = original;  // 使用有缺陷的拷貝構(gòu)造函數(shù)
        copy.introduce();

        // 這里會(huì)發(fā)生什么?當(dāng)original和copy都被銷毀時(shí)...
    }  // 作用域結(jié)束,兩個(gè)對(duì)象都會(huì)被銷毀

    std::cout << "Program finished." << std::endl;  // 這行會(huì)執(zhí)行嗎?

    return0;
}

提示:這個(gè)程序會(huì)在哪里崩潰?為什么?如何修復(fù)它?

責(zé)任編輯:趙寧寧 來源: 跟著小康學(xué)編程
相關(guān)推薦

2025-10-14 02:00:00

2021-11-01 12:31:25

Go程序日志

2024-06-12 12:28:23

2023-04-26 12:48:58

.NET程序類型

2016-11-07 20:43:37

C程序員Protocol Bu

2019-09-03 15:59:14

電腦開機(jī)配置

2010-06-02 10:42:39

Linux mysql

2025-06-11 01:00:00

2024-04-03 12:30:00

C++開發(fā)

2010-02-02 10:07:59

C++全局函數(shù)

2025-03-25 09:00:00

2010-01-28 10:33:10

C++開發(fā)程序

2010-06-02 09:31:43

Linux core

2025-03-19 00:21:54

高并發(fā)系統(tǒng)性能

2020-09-09 09:48:28

C++語言Rust

2025-07-30 08:26:48

2011-07-20 09:11:58

C++

2021-02-26 10:41:59

C++程序員代碼

2013-06-03 09:34:14

崩潰程序程序算法

2025-06-26 04:10:00

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

欧美在线影院在线视频| 亚洲国产日韩欧美综合久久| 亚洲最大色综合成人av| 一级片视频免费| 欧美日韩亚洲一区在线观看| 亚洲国产精品久久久久秋霞蜜臀 | av中文字幕网址| av免费网站在线观看| 波多野洁衣一区| 国产97在线播放| wwwav国产| 色天天色综合| 欧美精品1区2区| 国产一区二区四区| 国产69精品久久app免费版| 极品少妇一区二区| 78色国产精品| 青青青手机在线视频| 超碰在线亚洲| 精品视频一区三区九区| 国产在线xxxx| 1区2区3区在线观看| 成人精品小蝌蚪| 国产精品一区二区三区成人| 日本少妇在线观看| 9999国产精品| 亚洲欧美激情视频| 久久久久亚洲av无码专区首jn| 台湾佬中文娱乐久久久| 亚洲综合色区另类av| 色阁综合av| 五月天婷婷激情网| 国产精品一区二区x88av| 国产精品极品尤物在线观看| 日本系列第一页| 天天av综合| 亚洲人成网站色ww在线| 亚洲自拍偷拍精品| 国产精品一区二区三区四区在线观看 | 亚洲午夜影视影院在线观看| 视频一区三区| 青青九九免费视频在线| 成人免费毛片a| 91精品视频免费观看| av首页在线观看| 中文精品在线| 欧美激情按摩在线| 亚洲国产成人精品综合99| 欧美呦呦网站| 亚洲一级一级97网| 91视频免费观看网站| 欧美爱爱网站| 亚洲国产欧美久久| 国产 xxxx| 给我免费播放日韩视频| 精品美女一区二区| 特黄特色免费视频| 99久久免费精品国产72精品九九| 56国语精品自产拍在线观看| 国产原创精品在线| 99精品视频在线免费播放| 欧美日韩一本到| 污网站免费在线| 国产精品成人国产| 午夜免费播放观看在线视频| 精品伦理一区二区三区| 欧美色图亚洲视频| 天堂网在线观看国产精品| 日韩在线免费av| 91香蕉国产视频| 色综合色综合| 色婷婷综合久久久久| 色www亚洲国产阿娇yao| 国产精品成人av| www.日韩免费| 国产一区二区视频在线观看免费| 亚洲网色网站| 欧美极品美女电影一区| 四虎永久在线精品| 嫩草成人www欧美| 国产成人a亚洲精品| 欧美日韩 一区二区三区| 免费高清在线视频一区·| 国产日产欧美a一级在线| 国产亲伦免费视频播放| 丁香啪啪综合成人亚洲小说| 久久天天狠狠| av小片在线| 亚洲欧美日韩国产综合| 成人免费网站入口| 亚洲欧洲高清| 欧美日产在线观看| 午夜性福利视频| 亚洲精品一级二级三级| 少妇精69xxtheporn| 欧美成人精品欧美一| 亚洲精品极品| 国产精品爽爽爽爽爽爽在线观看| 国产乱叫456在线| caoporn国产精品| 视频一区二区在线观看| 午夜激情在线| 日本道精品一区二区三区| 97超碰人人爽| 你懂的在线观看一区二区| 永久免费精品影视网站| 中文字幕av久久爽av| 肉肉av福利一精品导航| 亚洲一区二区三区sesese| 天堂v视频永久在线播放| 日本一区二区久久| 日韩av新片网| 日本欧美在线| 日韩大片在线观看视频| 永久免费未视频| 性娇小13――14欧美| 91久久国产精品91久久性色| 欧美少妇另类| 亚洲宅男天堂在线观看无病毒 | 日韩视频二区| 国产日韩在线一区| 天堂中文字幕在线| 亚洲天堂av老司机| 91在线视频观看免费| av综合网址| 久久精品影视伊人网| 秋霞精品一区二区三区| 国产aⅴ综合色| 亚洲欧洲国产日韩精品| 在线播放高清视频www| 欧美一区二区三区在线| 色欲AV无码精品一区二区久久| 亚洲视频一区| 亚洲已满18点击进入在线看片 | 六月婷婷激情网| 精品欧美一区二区三区在线观看 | 蜜桃视频久久一区免费观看入口| 中文字幕乱码一区二区免费| 自慰无码一区二区三区| 91精品短视频| 欧美成人午夜激情| 国产又粗又黄又爽视频| 国产三级一区二区三区| 九色在线视频观看| 琪琪久久久久日韩精品| 欧美激情va永久在线播放| 国产日本精品视频| 亚洲欧美欧美一区二区三区| 自拍偷拍一区二区三区四区| 欧美日韩黑人| 国产精品mp4| 欧美女子与性| 色综合久久综合| 中文字幕5566| 香蕉av777xxx色综合一区| 精品国产_亚洲人成在线| 国产盗摄一区二区| 精品99久久久久久| 日本污视频在线观看| 成人av免费在线观看| 久久国产精品网| 久久精品66| 91黑丝高跟在线| 人成网站在线观看| 精品福利在线视频| 不卡一区二区在线观看| 免费日韩精品中文字幕视频在线| 久久精品国产精品国产精品污| 欧美xxxhd| 亚洲欧美在线一区| 在线观看国产区| 国产精品色噜噜| 欧美特黄aaa| 女人天堂亚洲aⅴ在线观看| 亚洲专区在线视频| 久久福利免费视频| 99se视频在线观看| 欧美日韩精品欧美日韩精品| 黄大色黄女片18免费| 精品一区二区免费视频| 97在线免费视频观看| 国产一区二区三区亚洲| 欧美性在线观看| 成全电影播放在线观看国语| 91精品综合久久久久久| 久久精品99国产精| 久久婷婷色综合| 成人性生生活性生交12| 888久久久| 国产传媒一区二区三区| 欧美成人精品一区二区男人小说| 在线视频欧美日韩| 成人黄色免费视频| 欧美性猛交xxxxx水多| 农村老熟妇乱子伦视频| 成人一区二区三区视频| 92看片淫黄大片一级| 999视频精品| 国产欧美一区二区三区不卡高清| 日韩大尺度黄色| 久久综合电影一区| 日韩av地址| 91精品国产一区二区三区香蕉| 国产一级在线观看视频| 久久精品在线免费观看| 日本中文字幕在线不卡| 欧美专区一区二区三区| wwwjizzjizzcom| 久久av影视| 99在线视频免费观看| 日本精品另类| 午夜精品久久久久久久99热浪潮| av在线免费播放网站| 精品国产一区二区三区久久久蜜月| 99re国产在线| 亚洲综合另类小说| 超碰人人人人人人人| 99久久er热在这里只有精品15| www.色欧美| 乱码第一页成人| 丰满少妇大力进入| 天天揉久久久久亚洲精品| 欧美日韩系列| 哺乳挤奶一区二区三区免费看| 国产精品欧美日韩| ****av在线网毛片| 久久精品国产99国产精品澳门| 黄色av网站在线| 亚洲国产精品va在线| 国产欧美日韩成人| 欧美日韩1234| 中文字幕一区二区人妻视频| 精品日本美女福利在线观看| 特一级黄色录像| 国产精品盗摄一区二区三区| 免费看黄色的视频| 91色综合久久久久婷婷| 日本一级大毛片a一| 韩国精品免费视频| 亚洲精品手机在线观看| 日韩国产精品91| 热久久精品国产| 在线精品在线| 久青草视频在线播放| 欧美不卡高清| 中文字幕一区二区三区在线乱码| 精品成人影院| 欧美日韩在线一二三| 日韩欧美天堂| 久久久久久久久四区三区| 激情小说一区| 精品国产第一页| 蜜桃一区av| 国产综合第一页| 林ゆな中文字幕一区二区| 国产九色精品| 成人春色在线观看免费网站| 国产精品裸体一区二区三区| 亚洲一区二区免费在线观看| 成人免费91在线看| 91午夜精品| 国产区一区二区| 欧美午夜18电影| 日本成人三级| 欧美亚洲国产精品久久| 亚洲欧洲久久| 天天射综合网视频| 91精品一区二区三区四区| 韩国精品一区二区三区| 国产午夜福利100集发布| 在线综合欧美| 日韩中文字幕免费在线 | 日本999视频| 蜜桃免费网站一区二区三区| av免费一区二区| 国产精品小仙女| 国产国语老龄妇女a片| www.成人网.com| 最近中文字幕在线mv视频在线| 中文字幕欧美激情一区| 国产女人18水真多毛片18精品| 亚洲免费资源在线播放| 日本少妇bbwbbw精品| 日韩欧美精品网站| 亚洲天堂avav| 精品国产伦一区二区三区观看体验 | 欧美亚洲免费在线一区| 国产一区二区波多野结衣| 日韩三级高清在线| 你懂的在线看| 精品国模在线视频| 1区2区3区在线| 国产精品久久久久久久电影| 国产一区二区在线观| 国产伦精品一区二区三区视频黑人| 妖精视频一区二区三区| 椎名由奈jux491在线播放| 影院欧美亚洲| 亚洲免费看av| 成人三级在线视频| 欧美福利第一页| 亚洲一区二区三区四区五区中文 | 成人女保姆的销魂服务| 久久影院资源站| 亚洲福利av| 日韩视频一区二区三区在线播放免费观看| 无遮挡又爽又刺激的视频| 国产电影一区二区三区| 婷婷色一区二区三区| 亚洲一区二区免费视频| 中文字幕在线观看免费| 亚洲精品福利在线| h片在线观看网站| 国产精品白丝jk喷水视频一区| 中文字幕日韩高清在线| 亚洲精品美女久久7777777| 激情91久久| 男女视频在线观看网站| 国产亚洲欧美中文| 国产乱码久久久久久| 欧美一区二区三区免费视频| 国产在线观看高清视频| 午夜欧美大片免费观看| 免费欧美网站| 亚洲日本理论电影| 久久高清免费观看| 韩国av中国字幕| 亚洲欧洲性图库| 中文字幕 视频一区| 日韩禁在线播放| 69av成人| 俄罗斯精品一区二区| 亚洲二区三区不卡| 国产成人美女视频| 亚洲国产精华液网站w| 国产中文字幕视频| 日韩av在线网站| av人人综合网| 国产精品日韩一区二区| 午夜久久影院| 国产性生活一级片| 中文字幕av一区二区三区高 | 精品人妻一区二区三区日产| 亚洲免费观看在线视频| 国产又粗又黄又爽的视频| 综合国产在线观看| 欧美日韩尤物久久| 色播亚洲婷婷| 免费欧美在线视频| 国产欧美小视频| 欧美日韩在线电影| 77777影视视频在线观看| 国产精品旅馆在线| 日韩精品免费一区二区三区| 成年网站在线播放| 国产精品欧美综合在线| 中文在线观看av| 日韩视频免费观看| 日本高清精品| 黄色三级中文字幕| 成人av在线资源网站| 日本少妇吞精囗交| 日韩精品在线免费播放| 另类激情视频| 婷婷五月色综合| 美女看a上一区| 日韩av手机在线免费观看| 在线不卡的av| 久色国产在线| 久久九九视频| 日韩电影免费在线观看网站| 狂野欧美性猛交| 欧美电影精品一区二区| а√天堂资源官网在线资源| 蜜桃视频在线观看91| 石原莉奈一区二区三区在线观看| 极品人妻videosss人妻| 欧美乱熟臀69xxxxxx| xxxx成人| 欧美污视频久久久| 精品一二三四区| 精品少妇一二三区| 亚洲欧美日韩一区二区在线 | 五月激情六月综合| 国产一级网站视频在线| 国产又爽又黄的激情精品视频 | 无码中文字幕色专区| 91麻豆国产精品久久| 91久久精品国产91性色69| 欧美疯狂性受xxxxx另类| 亚洲人成网亚洲欧洲无码| 亚洲欧美日韩精品一区| 亚洲va国产天堂va久久en| 国产在线观看免费| a级国产乱理论片在线观看99| 99精品国产在热久久| 美国黄色片视频| 亚洲精品成人网| 四虎国产精品免费久久| 一二三四视频社区在线|