精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

手机在线观看日韩av| 亚洲综合五月天| 欧美在线观看不卡| 日韩精品免费一区二区三区| 日韩视频免费直播| 东京热加勒比无码少妇| 黄色免费在线观看| 99精品视频在线播放观看| 国产精品日韩在线播放| 国产无遮挡裸体免费视频| 欧美一区电影| 精品91自产拍在线观看一区| 久热精品在线观看视频| 日本乱码一区二区三区不卡| 亚洲欧洲精品一区二区精品久久久| 九九九九精品九九九九| 亚洲熟女乱色一区二区三区久久久| 亚洲激情偷拍| 操日韩av在线电影| 黄色av免费播放| 精品日产乱码久久久久久仙踪林| 欧美精品三级日韩久久| 妞干网在线免费视频| 国产极品人妖在线观看| 亚洲欧美偷拍三级| 色噜噜一区二区| 日本1级在线| 成人国产精品免费网站| 91久久久在线| 伊人网视频在线| 久久精品人人做人人爽电影蜜月| 久久久久久有精品国产| 麻豆亚洲av成人无码久久精品| 精品久久不卡| 亚洲性无码av在线| 日本激情小视频| 久久丝袜视频| 亚洲黄页视频免费观看| 亚洲av无码成人精品区| 精品久久亚洲| 欧美一区二区三区在线观看视频| 黄色在线视频网| 三级成人在线| 91福利国产成人精品照片| 99视频在线免费播放| 成年人视频免费在线播放| 亚洲激情校园春色| 久久免费一级片| av香蕉成人| 亚洲蜜臀av乱码久久精品| 黄色高清视频网站| 黄视频在线观看网站| 国产精品美女www爽爽爽| 视频一区视频二区视频| 二人午夜免费观看在线视频| 久久精品视频免费| 日韩欧美第二区在线观看| 成年人在线免费观看| 中文字幕欧美激情一区| 亚洲永久激情精品| 国产传媒在线播放| 亚洲乱码国产乱码精品精98午夜 | 国产日韩在线一区| 136福利视频导航| 国内成人精品2018免费看| 91欧美激情另类亚洲| www.爱爱.com| www.欧美日韩| 欧美日韩综合网| 成人精品福利| 国产精品夫妻自拍| 日韩中文字幕在线不卡| 黄色激情在线播放| 色综合一区二区| 亚洲国产精品三区| 久久久久久亚洲精品美女 | 日本啊v在线| 国产精品你懂的在线欣赏| 综合操久久久| 俺来俺也去www色在线观看| 狠狠爱在线视频一区| 性欧美极品xxxx欧美一区二区| 免费视频观看成人| 日韩免费成人网| 免费成人深夜夜行p站| 欧美肉体xxxx裸体137大胆| www日韩欧美| 日本一本草久p| 97超碰在线公开在线看免费| 午夜精品爽啪视频| 欧美婷婷精品激情| 国产精品三p一区二区| 一个色综合导航| 欧美精品一区二区成人| 国产精品亚洲综合色区韩国| 国产精品igao视频| 精品国自产在线观看| 91丝袜美腿高跟国产极品老师 | 激情小视频在线| 亚洲人吸女人奶水| av天堂永久资源网| 亚洲网址在线观看| 亚洲欧美另类国产| 欧美精品入口蜜桃| 免费av网站大全久久| 国产亚洲精品美女久久久m| 91高清在线| 午夜av一区二区三区| 91av视频免费观看| 久久99久久人婷婷精品综合 | 中文字幕第四页| 国产最新精品精品你懂的| 久久99精品久久久久久三级| 老司机在线看片网av| 色综合久久中文字幕综合网| 欧美日韩久久婷婷| 精品久久中文| 91精品国产高清| 国产黄色片免费| 中文字幕欧美三区| 日本熟妇人妻xxxxx| 国产在线播放精品| 久久不射热爱视频精品| 自拍偷拍福利视频| 久久久久久久一区| 精品视频在线观看一区| 国色天香久久精品国产一区| 在线精品高清中文字幕| 久久国产视频精品| 丁香桃色午夜亚洲一区二区三区| 在线码字幕一区| 成人黄页网站视频| 亚洲欧美一区二区精品久久久| 日本三级理论片| 国产69精品一区二区亚洲孕妇 | 男人的天堂亚洲| 国产精品对白刺激久久久| 国产日产一区二区三区| 欧美日韩综合在线免费观看| 微拍福利一区二区| 久久精品国语| 青青草原成人| 欧美一级大片| 亚洲人成网站在线播| av大全在线观看| 99re成人在线| 国内外成人激情视频| 日韩在线黄色| 欧美一级视频一区二区| 深夜福利在线视频| 欧美性xxxxxxxxx| 亚洲熟女乱综合一区二区三区 | 日本激情视频在线播放| 精品日韩毛片| 国产精品香蕉在线观看| 欧美黑人激情| 日韩一级片网站| 国产一级做a爱免费视频| www.66久久| 久久无码高潮喷水| 久久av综合| 国产精品羞羞答答| bestiality新另类大全| 亚洲成年人影院在线| 国产女同在线观看| 国产免费成人在线视频| 8x8x成人免费视频| 欧美女人交a| 国产尤物99| 深夜成人影院| 精品久久久999| 国产成人久久精品77777综合| 亚洲成a天堂v人片| 扒开jk护士狂揉免费| 免播放器亚洲一区| www.欧美黄色| 精品在线播放| 成人激情电影一区二区| 牛牛精品在线视频| 亚洲男人天堂久| 中文字幕在线播放不卡| 亚洲精品久久久蜜桃| 性欧美丰满熟妇xxxx性久久久| 日本视频一区二区三区| 久久综合亚洲精品| 九九亚洲视频| 91久色国产| 日本高清不卡一区二区三区视频 | 一区二区三区欧美在线| 66精品视频在线观看| 国产不卡精品视男人的天堂| 国产网站在线免费观看| 亚洲欧美成人网| 国产av无码专区亚洲a∨毛片| 狠狠躁夜夜躁久久躁别揉| 国产aaaaaaaaa| 岛国一区二区在线观看| 超碰av在线免费观看| 欧美性色综合| 亚洲日本欧美在线| 久久视频在线观看| 91欧美激情另类亚洲| 91av亚洲| 久久久久亚洲精品成人网小说| 69xxxx欧美| 亚洲欧美国产高清va在线播| 国产熟女一区二区三区五月婷| 色综合久久中文字幕| 欧美日韩一级在线观看| 国产精品乱子久久久久| 亚洲の无码国产の无码步美| 国内精品伊人久久久久av影院| 欧美日韩在线中文| 亚洲大胆视频| 国产激情片在线观看| 日韩免费视频| 欧美亚洲爱爱另类综合| 国产精品网在线观看| 91亚洲一区精品| 精品亚洲a∨| 国产成人高潮免费观看精品| 日韩脚交footjobhd| 久久久久久久一区二区| 成人高清免费在线| 久久精品视频导航| www.91在线| 亚洲老板91色精品久久| 无码精品黑人一区二区三区| 日韩欧美三级在线| 亚洲AV无码成人片在线观看| 在线综合视频播放| 国产一区二区女内射| 欧美主播一区二区三区美女| 91久久国产综合久久91| 欧美视频在线视频| 国产精品自拍99| 午夜国产不卡在线观看视频| 日韩xxx高潮hd| 天天综合色天天| 日韩黄色在线视频| 精品国产乱码久久久久久虫虫漫画| 激情五月少妇a| 一区二区三区日韩| 久久久久亚洲av片无码下载蜜桃| 亚洲黄色av一区| 青草草在线视频| 亚洲综合色区另类av| 国内偷拍精品视频| 亚洲一区二区三区四区在线免费观看| 国产探花在线免费观看| 一区二区三区四区亚洲| 精品视频在线观看免费| 精品无码人妻一区二区三区品| 久久精品亚洲麻豆av一区二区 | 亚洲美女高潮久久久| 成人一区二区在线观看| 男人网站在线观看| 91在线观看免费视频| 亚洲熟妇无码av| 国产欧美日韩久久| 久久av红桃一区二区禁漫| 日韩毛片在线免费观看| 真实国产乱子伦对白在线| 亚洲国产一区二区三区| 九九热在线视频播放| 色综合久久久久网| 一二三区中文字幕| 日韩一区二区精品葵司在线| 亚洲国产精品成人久久蜜臀| 日韩大陆毛片av| av网站大全在线观看| 久久伊人色综合| 黄污视频在线观看| 青青久久av北条麻妃黑人| 成人免费毛片嘿嘿连载视频…| 91精品久久久久久久久久| silk一区二区三区精品视频| 欧美精品亚洲精品| 97精品视频在线看| 福利视频一二区| 秋霞影院一区二区| 色悠悠在线视频| 久久久99精品免费观看| 国产大片免费看| 色综合久久久久综合体桃花网| 97在线视频人妻无码| 亚洲第一偷拍网| 免费成人黄色| 欧美专区国产专区| 福利一区三区| 欧美三级电影在线播放| 小说区亚洲自拍另类图片专区| 男人添女人下面高潮视频| 蜜臀av性久久久久蜜臀aⅴ四虎| 免费黄色a级片| 国产精品久久久久久久久快鸭 | 日韩午夜激情免费电影| 深夜福利免费在线观看| 久久综合伊人77777蜜臀| 国模套图日韩精品一区二区| 亚洲专区国产精品| 国产永久精品大片wwwapp| 成人免费a级片| 久久国产精品区| av黄色在线免费观看| 亚洲国产精品久久一线不卡| 91禁在线观看| 一区二区欧美亚洲| 精精国产xxxx视频在线野外| 亚洲a级在线观看| 久久理论电影| 国产黄色特级片| 91网站最新网址| 91精品国产高潮对白| 日韩天堂在线观看| 在线观看麻豆蜜桃| 国产精品扒开腿做| 巨人精品**| 国产精品无码电影在线观看| 极品少妇一区二区三区精品视频 | 欧美亚洲激情| 69堂免费视频| 99久久国产综合精品女不卡| 免费在线视频观看| 91精品国产乱| 欧洲日本在线| 国产狼人综合免费视频| 精品久久网站| 亚洲黄色a v| 久久精品无码一区二区三区| 欧美精品韩国精品| 亚洲精品天天看| 狠狠操一区二区三区| 国产三级精品在线不卡| 亚洲大片av| av天堂一区二区| 亚洲综合免费观看高清完整版在线| 国产精品自偷自拍| 日韩中文字幕亚洲| 少妇精品视频在线观看| 国产精品亚洲天堂| 精品系列免费在线观看| 艳妇荡乳欲伦69影片| 欧美一级爆毛片| av色综合久久天堂av色综合在| 亚洲aⅴ日韩av电影在线观看 | 成人爽a毛片一区二区| 久久成人亚洲精品| 中文无码日韩欧| 成人免费性视频| 99国产精品久| www.久久精品视频| 中文字幕免费精品一区| 成人在线观看免费播放| 在线观看亚洲视频啊啊啊啊| 国产乱子轮精品视频| 国产一级av毛片| 亚洲精品久久久久久下一站| 丝袜美腿诱惑一区二区三区| 视频一区二区精品| 国内精品不卡在线| 国产亚洲精品久久777777| 亚洲精品91美女久久久久久久| 大胆人体一区二区| 亚洲图片在线观看| 国产91精品露脸国语对白| 69视频免费在线观看| 永久免费精品影视网站| 国产一区二区三区免费在线| 国产精彩视频一区二区| 久久精品亚洲精品国产欧美kt∨| 一级黄色片视频| 欧美激情18p| 国产一区不卡| 操人视频免费看| 午夜电影网一区| 日韩在线观看www| 国产精品制服诱惑| 日本不卡的三区四区五区| 亚洲欧美小视频| 亚洲精品国产品国语在线| 激情欧美一区二区三区黑长吊| 久久久久久久久久久综合| 久久视频一区二区| aaaa一级片| 国产精品2018| 欧美成人久久| 国产真人做爰视频免费| 日韩视频123| 欧美日韩亚洲国产| 国产在线视频综合| 国产精品美女久久久久aⅴ| 人人妻人人澡人人爽精品日本| 国产精品青草久久久久福利99| 国模一区二区三区| 日本女人性生活视频| 日韩大片在线观看视频| 日韩视频在线直播| 91精品无人成人www| 福利视频第一区|