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

如何使用Backtrace定位Linux程序的崩潰位置

系統 Linux
本篇介紹了如何使用backtrace工具來定位Linux應用程序崩潰的位置信息,首先通過signal捕獲崩潰信息,然后通過backtrace記錄崩潰時的堆棧調用信息,最后使用addr2line來顯示對應的崩潰時的代碼行號。?

在嵌入式Linux開發中,特別是復雜軟件,多人協作開發時,當某人無意間寫了一個代碼bug導致程序崩潰,但又不知道崩潰的具體位置時,單純靠走讀代碼,很難快速的定位問題。

本篇就來介紹一種方法,使用backtrace工具,來輔助定位程序崩潰的位置信息。

backtrace是 C/C++ 中用于獲取程序調用棧信息的函數,借助backtrace可以排查崩潰并定位代碼行號。

1.backtrace分析程序崩潰的原理

在linux系統中,運行程序若發生崩潰,會產生相應的信號,例如訪問空指針會觸發SIGSEGV(signum:11)。

這時可以使用signal函數來捕獲這個信息,捕獲信號后,支持自定義的handler函數進行一些處理。

在自定義的handler函數中,可以使用backtrace函數,來打印程序調用棧信息。

最后使用addr2line函數,將地址轉換為可讀的函數名和行號。

使用backtrace分析程序崩潰,需要在編譯時使用 -g 選項生成的調試信息。

使用addr2line工具,將地址轉換為可讀的函數名和行號,實例如下:

addr2line -e 程序名 -f -C 0x400526
# 輸出:
main
/path/to/main.c:42

2.一些要用到的函數

2.1 signal

2.1.1 函數原型

在 C 和 C++ 中,signal 函數用于設置信號處理方式。

其原型定義在 <signal.h> 頭文件中:

typedef void (*sighandler_t)(int);

sighandler_t signal(int signum, sighandler_t handler);

參數說明:

  • int signum:信號編號(整數),如:

SIGINT(2):中斷信號(Ctrl+C)

SIGSEGV(11):段錯誤

SIGILL(4):非法指令

SIGTERM(15):終止信號

SIGFPE(8):浮點異常

  • sighandler_t handler:信號處理函數指針,有三種取值:
  • 用戶定義函數:void handler(int signum) 類型的函數
  • SIG_DFL:默認處理(如終止程序)
  • SIG_IGN:忽略該信號

返回值:

  • 成功:返回之前的信號處理函數指針
  • 失敗:返回 SIG_ERR,并設置 errno(如 EINVAL 表示無效信號)

2.1.2 常見信號列表

signum

信號名稱

默認行為

觸發場景

1

SIGHUP

終止程序

終端連接斷開(如 SSH 會話結束),或用戶登出時通知進程重新加載配置

2

SIGINT

終止程序(Ctrl+C)

用戶在終端按下 Ctrl+C,請求中斷當前進程

3

SIGQUIT

終止程序并生成 Core 文件

用戶按下 Ctrl+\,通常用于強制退出并生成調試用的 Core 文件

4

SIGILL

終止程序并生成 Core 文件

進程執行非法指令(如無效的機器碼),通常由程序編譯錯誤或硬件異常導致

5

SIGTRAP

終止程序并生成 Core 文件

觸發斷點陷阱(如調試器設置的斷點),用于程序調試時的中斷

6

SIGABRT

終止程序并生成 Core 文件

通常是由進程自身調用 C標準函數庫 的 abort() 函數來觸發

7

SIGBUS

終止程序并生成 Core 文件

硬件總線錯誤(如訪問未對齊的內存地址,或內存映射文件錯誤)

8

SIGFPE

終止程序并生成 Core 文件

發生算術錯誤(如除零、溢出、精度錯誤),例如1/0運算

9

SIGKILL

強制終止程序(不可捕獲)

系統或用戶發送kill -9命令

,用于強制終止無響應的進程,無法被忽略或處理

10

SIGUSR1

終止程序

用戶自定義信號 1,可由程序自定義處理邏輯(如日志刷新、狀態通知)

11

SIGSEGV

終止程序并生成 Core 文件

訪問無效內存地址(如空指針解引用、越界訪問),是最常見的程序崩潰原因之一

12

SIGUSR2

終止程序

用戶自定義信號 2,用途與SIGUSR1類似,供程序開發者自由定義功能

13

SIGPIPE

終止程序

向已關閉的管道或套接字寫入數據(如 TCP 連接斷開后繼續發送數據)

14

SIGALRM

終止程序

定時器超時(由alarm()setitimer()函數觸發),用于超時控制

15

SIGTERM

終止程序(可捕獲)

系統或用戶發送kill命令(默認),請求進程正常退出,程序可自定義處理邏輯

16

SIGSTKFLT

終止程序

棧溢出錯誤(僅在某些架構上存在,如 x86),通常與硬件相關的棧異常有關

17

SIGCHLD

忽略信號

子進程狀態改變(如終止或暫停),父進程可通過wait()系列函數獲取子進程信息

18

SIGCONT

繼續運行暫停的進程

當進程被暫停(如SIGSTOP)后,用于恢復其執行,默認行為為繼續運行

19

SIGSTOP

暫停進程(不可捕獲)

系統或用戶發送kill -STOP命令,用于暫停進程執行,無法被忽略或處理

信號分類:

  • 不可捕獲信號:無法通過signalsigaction修改處理方式,只能由系統強制控制。

SIGKILL(9)

SIGSTOP(19)

  • 用戶自定義信號:可由程序自由定義處理邏輯,常用于進程間通信或調試。

SIGUSR1(10)

SIGUSR2(12)

  • 異常信號:通常由程序錯誤(如內存操作異常)觸發,默認會生成 Core 文件用于調試。

SIGBUS(7)

SIGSEGV(11)

  • ...

默認行為的差異:

  • 多數信號的默認行為是終止程序,但部分信號(如SIGCHLD)默認會被忽略,而SIGCONT則用于恢復進程運行。

2.2 backtrace

在 C 和 C++ 中,backtrace 函數用于獲取當前程序的調用堆棧信息,常用于調試和錯誤處理。

其原型定義在 <execinfo.h> 頭文件中:

/* 獲取當前調用堆棧中的函數地址 */
int backtrace(void **buffer, int size);
  • 參數

void **buffer:指向存儲函數地址的數組的指針。

int size:數組的最大元素數(即最多獲取的堆棧幀數)。

  • 返回值

成功:返回實際獲取的堆棧幀數(不超過 size)。

失?。悍祷?0(極罕見,通常僅在內存不足時發生)。

2.3 backtrace_symbols

/* 將函數地址轉換為可讀的字符串(如函數名、偏移量) */
char **backtrace_symbols(void *const *buffer, int size);
  • 參數

void *const *buffer:backtrace返回的函數地址數組

int size:backtrace返回的實際幀數

  • 返回值

成功:返回指向字符串數組的指針,每個元素對應一個堆棧幀(需用 free() 釋放)

失?。悍祷?nbsp;NULL,并設置 errno

2.4 backtrace_symbols_fd

/* 將函數地址直接輸出到文件 */
void backtrace_symbols_fd(void *const *buffer, int size, int fd);
  • 參數

void *const *buffer:同 backtrace_symbols

int size:同 backtrace_symbols

int fd:文件描述符(如 STDERR_FILENO),用于輸出結果

  • 返回值:無(直接輸出到文件)

3.實例代碼

3.1 主函數

//g++ -g test.cpp -o test
#include <execinfo.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <csignal>
#include <string.h>
#include <fcntl.h>
#include <vector>

//<---信號處理函數添加到這里

void TestFun()
{
    printf("[%s] in\n", __func__);
std::vector<int> a;
printf("[%s] a[1]=%d\n", __func__, a[1]);
}

int main()
{
    std::vector<int> vSignalType = {SIGILL, SIGSEGV, SIGABRT};                             
    for (int &signalType : vSignalType)
    {
        if (SIG_ERR == signal(signalType, SignalHandler))
        {
            printf("[%s] signal for signalType:%d err\n", __func__, signalType);
        }
    }

 TestFun();
return0;
}

3.2 信號處理函數

#define MAX_STACK_FRAMES 100

void SignalHandler(int signum)
{
    printf("[%s] signum:%d(%s)\n", __func__, signum, strsignal(signum));
    signal(signum, SIG_DFL); //恢復默認行為

    // [backtrace] 獲取當前調用堆棧中的函數地址
    void *buffer[MAX_STACK_FRAMES];
    size_t size = backtrace(buffer, MAX_STACK_FRAMES);
    printf("[%s] backtrace() return %zu address. Stack trace:\n", __func__, size);
    
    // [backtrace_symbols] 將函數地址轉換為可讀的字符串
    char **symbols = (char **) backtrace_symbols(buffer, size);
    if (symbols == NULL) 
    {
        printf("[%s] backtrace_symbols() null\n", __func__);
        return;
    }

    for (size_t i = 0; i < size; ++i)
    {
        printf("#%d %s\n", (int)i, symbols[i]); //打印每一個函數地址
    }
    free(symbols);
    
    // [backtrace_symbols_fd] 將函數地址直接輸出到文件
    int fd = open("backtrace.txt", O_CREAT | O_WRONLY, S_IRWXU | S_IRWXG | S_IRWXO);
    if (fd >= 0)
    {
        backtrace_symbols_fd(buffer, size, fd);
        close(fd);
    }
}

3.3 addr2line解析backtrace信息

#!/bin/sh

if [ $# -lt 2 ]; then
echo"example: myaddr2line.sh test backtrace.log"
exit 1
fi

BIN_FILE=$1
BACK_TRACE_FILE=$2

lines=$(cat $BACK_TRACE_FILE | grep ${BIN_FILE})
for line in${lines}; do
 addr=$(echo$line | awk -F '(''{print $2}' | awk -F ')''{print $1}')
 addr2line -e ${BIN_FILE} -C -f $addr
done

addr2line 是一個用于將程序地址(如內存地址)轉換為源代碼位置(文件名和行號)的工具。以下是其常用參數的詳細含義:

參數

含義

說明

-e

--exe=FILE

指定要分析的可執行文件或共享庫(必選參數)。

-p

--pretty-print

以更易讀的格式輸出信息(如添加換行和縮進)。

-C

--demangle[=style]

還原 C++ 符號名

(如將 _Z3foov 轉換為 foo())。

-i

--inlines

顯示內聯函數的調用信息(包括原始函數和內聯位置)。

-f

--functions

顯示函數名

(默認僅顯示地址對應的行號)。

3.4 測試結果

圖片圖片

可以看到,定位到了test.cpp的50行為崩潰的位置,代碼中的vector a沒有賦值,直接訪問vector[1]將會崩潰。

具體的調用棧關系為:

  • main函數,test.cpp的65行:調用的TestFun函數
  • TestFun函數,test.cpp的50行:執行的printf("[%s] a[1]=%d\n", __func__, a[1]);
  • SignalHandler函數,test.cpp的20行:崩潰觸發的SIGSEGV信號被捕獲后,在SignalHandler函數中的backtrace被處理

SignalHandler函數中,通過backtrace_symbols打印的信息,與通過backtrace_symbols_fd保存在backtrace.txt文件中的信息,其實是一樣的:

圖片圖片

使用myaddr2line.sh腳本,可以方便打印所有的行號信息。

當然也可以手動使用addr2line來打印行號信息,只是效率較低。

另外,注意backtrace的地址,圓括號 () 和 方括號 [] 中的地址具有不同含義,分別對應 符號表中的函數地址 和 實際執行地址。

  • 圓括號 (...) 中的地址

含義:函數內部的 相對偏移量(相對于函數起始地址)

格式:函數名+0x偏移量

作用:指示崩潰發生在該函數的具體位置。

  • 方括號 [...] 中的地址

含義:指令在 內存中的實際地址(絕對地址)

格式:0xXXXXXXXX

作用:可直接用于 addr2line 等工具定位源代碼

但在本示例程序測試中,卻要使用圓括號中的地址,addr2line才能顯示行號,這里有待再研究。

圖片圖片

4.總結

本篇介紹了如何使用backtrace工具來定位Linux應用程序崩潰的位置信息,首先通過signal捕獲崩潰信息,然后通過backtrace記錄崩潰時的堆棧調用信息,最后使用addr2line來顯示對應的崩潰時的代碼行號。

責任編輯:武曉燕 來源: 碼農愛學習
相關推薦

2021-11-01 12:31:25

Go程序日志

2017-08-02 14:37:31

LinuxKdump內核崩潰

2023-12-26 15:06:00

Linux內核轉儲

2010-03-02 13:28:58

Linux setit

2011-07-06 13:33:41

iPhone 模擬器 XCode

2014-07-25 11:45:29

Linuxlocate命令

2021-09-06 09:10:31

Linuxncurses定位文本

2011-04-22 17:29:37

Linux網卡

2021-03-06 21:21:11

STM32單片機追蹤庫

2017-02-06 18:42:37

Linuxgdb程序

2010-06-02 10:42:39

Linux mysql

2024-10-10 09:55:51

JavaScript參數瀏覽器

2015-11-26 10:53:45

LinuxWindowsMac OS

2025-02-27 09:17:41

DeepSeekPythonAI

2013-06-03 09:34:14

崩潰程序程序算法

2021-04-01 11:28:44

C++ LinuxWindows

2018-11-13 12:52:50

Linux內核?;厮?/a>

2023-03-19 17:29:01

2025-07-09 02:00:00

2019-09-29 00:25:11

CC++內存泄漏
點贊
收藏

51CTO技術棧公眾號

97久久久精品综合88久久| 日本高清免费电影一区| 精品国产91久久久久久| 久久国产精品精品国产色婷婷| 色一情一乱一伦| 99久久久久久中文字幕一区| 日韩精品在线看片z| 天堂…中文在线最新版在线| 午夜在线视频播放| 粉嫩高潮美女一区二区三区| 青草热久免费精品视频| 免费黄色国产视频| 精品国产午夜肉伦伦影院| 色噜噜夜夜夜综合网| 做爰高潮hd色即是空| 日本精品一二区| 奇米精品一区二区三区四区| 欧美国产第一页| av网站免费在线看| 中文字幕一区二区三区四区久久| 色综合久久综合网欧美综合网| 尤物国产精品| 九九在线视频| 国产成人精品在线看| 国产成人精品免费视频| 国产亚洲欧美精品久久久www| 精品欧美久久| 亚洲精品久久久久久久久久久久久 | 国产精品国模大尺度视频| 国产精品久久久久久久久久直播| 中文字幕久久久久| 国产精品一级| 性色av香蕉一区二区| 老熟妻内射精品一区| 欧美色婷婷久久99精品红桃| 亚洲国产日韩欧美综合久久| 丰满少妇中文字幕| 91成人在线| 一本色道久久综合狠狠躁的推荐| 久久这里只有精品18| 免费a级人成a大片在线观看| 久久久久久日产精品| 成人免费看片网址| av中文字幕观看| 蜜桃视频第一区免费观看| 欧美中文字幕第一页| 国产第一页第二页| 欧美日韩专区| 欧美精品在线免费| 东方av正在进入| 天天天综合网| 日日噜噜噜夜夜爽亚洲精品| 日本黄色激情视频| 日韩理论电影院| 一区二区在线视频播放| 蜜桃精品一区二区| 亚洲bt欧美bt精品777| 亚洲精品国产综合久久| 国产一线在线观看| 大桥未久女教师av一区二区| 精品精品国产高清a毛片牛牛| 免费看的av网站| 秋霞午夜一区二区三区视频| 日韩欧美国产一区二区在线播放| 欧美一级免费在线| 精品视频在线一区| 精品久久免费看| 亚洲av人人澡人人爽人人夜夜| 97se亚洲| 日韩av网址在线| 国产视频精品视频| 开心激情综合| 亚洲欧美日韩成人| 大胸美女被爆操| 国产精品久久占久久| 久热精品视频在线观看| 久久伊人成人网| 亚洲国产精品第一区二区| 97精品一区二区三区| 天堂а√在线中文在线新版| 日韩激情在线观看| 成人av.网址在线网站| 国产农村妇女毛片精品久久| 国产91富婆露脸刺激对白| 国产伦精品一区二区三区视频黑人 | 网爆门在线观看| 在线免费观看日本欧美爱情大片| 久久久久久久久久久免费 | 在线亚洲观看| 国产精品久久久久久久久免费看 | 欧美magnet| 欧美日产在线观看| 青青草精品在线| 日韩电影在线观看完整免费观看| 亚洲图片在区色| 老妇女50岁三级| 一区二区日韩免费看| 国产mv久久久| jlzzjlzzjlzz亚洲人| 成人av免费在线观看| 婷婷久久伊人| 欧美草逼视频| 在线观看国产91| 日本成人在线免费| 国产伦精品一区二区三区千人斩| 大胆人体色综合| 中文字幕精品无| 国产成人免费视| 亚洲精品欧洲精品| tube8在线hd| 欧美日韩国产片| 99久久久久久久久久| 欧美黄色一级视频| 国产精品一区二区三区免费视频 | 久操成人在线视频| 久久精品无码av| 国产成人av电影在线观看| 小说区图片区图片区另类灬| 国产直播在线| 欧美一区二区视频在线观看2020| 91视频免费观看网站| 欧美午夜电影在线观看| 国产精品综合网站| 黄色在线网站| 欧美日韩久久久久| 北京富婆泄欲对白| 欧美日韩成人| 亚洲一区二区免费| www亚洲人| 色哟哟欧美精品| 亚洲自拍偷拍精品| 一区二区三区在线电影| 国产精品久久久久久久久久久新郎 | 国产精品高潮呻吟久久久久| 久久伊人精品天天| 亚洲 欧美 成人| 国产精品99久久久久久似苏梦涵 | 99久久精品一区| 樱花www成人免费视频| free欧美| 亚洲国产99精品国自产| 成人免费黄色小视频| 久久久久久久欧美精品| 成人18视频| 麻豆视频在线免费观看| 91福利视频久久久久| 无码人妻精品一区二区三区99不卡| 亚洲裸色大胆大尺寸艺术写真 | aa视频在线观看| 69av一区二区三区| 91av手机在线| 久久久国产精品一区二区中文| 国产一区在线观| 三级资源在线| 日韩午夜电影在线观看| 中国1级黄色片| 青青草视频一区| 日本三级中国三级99人妇网站| 国产va在线视频| 欧美成人乱码一区二区三区| 免费成人深夜夜行网站| 九色综合狠狠综合久久| 一区精品视频| 欧美成人毛片| 深夜福利国产精品| 伊人网中文字幕| 欧美高清在线一区二区| 国产视频在线视频| 国产成人ay| 国产成人午夜视频网址| 免费福利在线视频| 在线观看亚洲精品| 免费在线观看黄色小视频| 老司机一区二区| 一本久道久久综合| 国产aa精品| 免费不卡在线观看av| 国产特级黄色片| 亚洲福利视频一区二区| 色婷婷精品久久二区二区密| 亚洲看片一区| 鲁片一区二区三区| 欧洲精品一区二区三区| 久久久99久久精品女同性| 国产露脸91国语对白| 亚洲欧美一区二区久久| 古装做爰无遮挡三级聊斋艳谭| 好吊一区二区三区| 99精品国产一区二区| 色吧亚洲日本| 国产一区二区三区在线观看视频| 中文字幕第2页| 亚洲欧洲成人自拍| 国产午夜在线一区二区三区| 日韩精品国产精品| 性欧美18一19内谢| 亚洲高清999| 91精品国产91久久久久久| 你懂的免费在线观看| 欧美午夜片在线免费观看| 日本精品在线免费观看| 懂色av一区二区三区免费看| 成人午夜视频在线观看免费| 亚洲免费毛片| 91在线观看免费高清| 激情影院在线| 亚洲欧美中文日韩在线v日本| 最近中文字幕av| 怡红院av一区二区三区| 国产伦精品一区二区免费| 亚洲激情成人| 一区二区三区四区欧美日韩| 视频一区日韩| 日本久久亚洲电影| 国产传媒在线播放| 亚洲欧美中文日韩在线| 手机看片福利永久| 欧美日韩一区二区在线观看| 精品少妇爆乳无码av无码专区| 国产午夜精品久久久久久免费视| 中文字幕亚洲影院| 青青草97国产精品免费观看 | 日韩电影免费网站| 国产精品对白一区二区三区| 女生影院久久| 9.1国产丝袜在线观看| 欧美激情午夜| 亚洲乱码国产乱码精品精天堂| 99久久一区二区| 91高清在线观看| 伊人久久久久久久久久久久| 亚洲伊人色欲综合网| 欧美性生交大片| 久久一区二区三区四区| 成人亚洲免费视频| 看片的网站亚洲| 激情综合网俺也去| 一本一本久久| 丰满少妇久久久| 女生裸体视频一区二区三区| 日韩一区二区三区高清| 日韩超碰人人爽人人做人人添| 91黄色国产视频| 国产精品日韩精品在线播放| 成人激情视频在线观看| 主播大秀视频在线观看一区二区| 韩国v欧美v日本v亚洲| 精品视频在线一区二区| 中文字幕在线观看亚洲| 在线观看国产原创自拍视频| 亚洲欧美变态国产另类| 人妻妺妺窝人体色www聚色窝| 在线播放91灌醉迷j高跟美女 | 在线欧美小视频| 91玉足脚交嫩脚丫在线播放| 亚洲午夜激情av| 国产福利拍拍拍| 香蕉加勒比综合久久| 免费人成在线观看| 一区二区三区四区在线免费观看| 精品无码m3u8在线观看| 夜夜嗨av一区二区三区四季av| 少妇被躁爽到高潮无码文| 日韩理论在线观看| 男人晚上看的视频| 一区二区三区丝袜| 久久黄色小视频| 亚洲午夜免费视频| 九九热只有精品| 午夜精品爽啪视频| 51国产偷自视频区视频| 日韩欧美精品在线观看| 成年免费在线观看| 欧美亚洲综合一区| 中文字幕免费高清在线观看| 欧美性欧美巨大黑白大战| 中文字幕理论片| 欧美成人精品二区三区99精品| 亚洲美女福利视频| 亚洲激情视频在线| 日本福利片在线| 日韩亚洲欧美中文在线| 九色porny在线| 欧美激情在线狂野欧美精品| rebdb初裸写真在线观看| 97免费中文视频在线观看| 不卡亚洲精品| 91精品国产高清久久久久久91裸体| 中文无码日韩欧| 久久精品二区| 国产精品久久久久久| 欧美图片激情小说| 亚洲综合欧美| 色啦啦av综合| 国产主播一区二区| 国产全是老熟女太爽了| 国产精品青草久久| 国产在线视频卡一卡二| 色综合天天综合在线视频| 国产精品无码在线播放| 亚洲第一视频在线观看| 国产高清在线观看| 美女av一区二区三区 | 欧美特级特黄aaaaaa在线看| 国产视频精品在线| 麻豆视频网站在线观看| 韩国美女主播一区| 精品国模一区二区三区欧美| 国模一区二区三区私拍视频| 精品国产乱码久久久久久果冻传媒| 一本久久a久久精品vr综合| 亚洲女人av| 日本精品一区在线| 26uuu亚洲| 黄色一级大片在线免费观看| 在线一区二区三区做爰视频网站| 一级黄色片在线播放| 日韩av影片在线观看| 免费黄色在线网站| 久久人91精品久久久久久不卡| 国产精品久久乐| 国产精品久久久久久久久久久久午夜片| 国产91一区| bt天堂新版中文在线地址| 麻豆精品视频在线观看视频| 水蜜桃av无码| 综合激情成人伊人| 黄色污污网站在线观看| 日韩精品久久久久久久玫瑰园| 久久99精品久久久久久野外| 日本成人在线视频网址| 成人台湾亚洲精品一区二区 | 国产97色在线 | 日韩| 97精品久久久久中文字幕| 伊人久久久久久久久久久久久久| 欧美色videos| 囯产精品一品二区三区| 亚洲欧洲国产伦综合| 午夜影院在线播放| 国产精品日韩一区二区三区| 久久精品久久久| 99999精品视频| 26uuu另类欧美亚洲曰本| 欧美日韩免费一区二区| 欧美日韩精品二区第二页| 视频三区在线观看| 欧美专区中文字幕| 国产 日韩 欧美 综合 一区| 男人的天堂视频在线| 男人操女人的视频在线观看欧美| 男人舔女人下部高潮全视频 | 国产freexxxx性播放麻豆| 国产在线观看一区二区| 成人午夜免费影院| 欧洲av在线精品| 黄色在线播放| 国产成人短视频| 伊人成综合网yiren22| 久久精品午夜福利| 久久久蜜臀国产一区二区| 久久免费激情视频| 亚洲跨种族黑人xxx| 日韩精品专区| 欧美日韩喷水| 免费看黄裸体一级大秀欧美| 久久久久久国产精品日本| 亚洲一区国产视频| 蜜桃91麻豆精品一二三区 | 午夜激情在线观看| 91夜夜揉人人捏人人添红杏| 这里只有精品在线| 国产又粗又猛又爽又黄| 中文字幕色av一区二区三区| 亚洲第一大网站| 国语自产偷拍精品视频偷| 另类图片第一页| 红桃av在线播放| 国产亚洲污的网站| 中文字幕码精品视频网站| 伊人久久大香线蕉av一区二区| 日本亚洲欧洲无免费码在线| 国产又大又长又粗又黄| 国产一区91精品张津瑜| 欧美色图一区二区| 亚洲成人免费网站| 不卡一二三区| 亚洲视频在线二区| 99久久亚洲一区二区三区青草| 韩国av中文字幕| 国产亚洲欧洲在线| 999久久久久久久久6666| 欧美a v在线播放| 中文av字幕一区| 在线黄色av网站| 亚州成人av在线| 国产日韩视频在线| 午夜一区二区视频| 日韩欧美国产激情| а√天堂8资源在线官网| 国内不卡一区二区三区|