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

反向 Debug 了解一下?揭秘 Java DEBUG 的基本原理

開發 前端
相比之下, GDB 的 Reverse Debugging 就比較強大,真正的 “反向” DEBUG,逆向運行,實現回放。所以吧在運行過程中,已經修改的數據,比如引用傳遞的方法參數、變量,一旦修改肯定回退不了,不然真的成時光機了。

Debug 的時候,都遇到過手速太快,直接跳過了自己想調試的方法、代碼的時候吧……

一旦跳過,可能就得重新執行一遍,準備數據、重新啟動可能幾分鐘就過去了。

好在IDE 們都很強大,還給你后悔的機會,可以直接刪除某個 Stack Frame,直接返回到之前的狀態,確切的說是返回到之前的某個 Stack Frame,從而實現讓程序“逆向運行”。

這個 Reset Frame 的能力,可不只是返回上一步,上 N 步也是可以的;選中你期望的那個幀,直接Reset Frame/Drop Frame,可以直接回到調用棧上的某個棧幀,時間反轉!

可惜這玩意也不是那么萬能,畢竟是通過 stack pop 這種操作實現,實際上只是給調用棧棧頂的 N 個 frame pop 出來而已,還談不上是真正的“反向 DEBUG”。

相比之下, GDB 的 Reverse Debugging 就比較強大,真正的 “反向” DEBUG,逆向運行,實現回放。

所以吧在運行過程中,已經修改的數據,比如引用傳遞的方法參數、變量,一旦修改肯定回退不了,不然真的成時光機了。

這些亂七八糟的調試功能,都是基于 Java 內置的 Debug 體系來實現的。

JAVA DEBUG 體系

Java 提供了一個完整的 Debug 體系 JPDA (Java Platform Debugger Architecture),這個 JPDA 架構體系由 3 部分組成:

  1. JVM TI - Java VM Tool Interface
  2. JDWP - Java Debug Wire Protocol
  3. JDI - Java Debug Interface

如果結合IDE 來看,那么一個完整的 Debug 功能看起來就是這個樣子:

解釋一下這個體系:

JVM TI 是一個 JVM 提供的一個調試接口,提供了一系列控制 JVM 行為的功能,比如分析、調試、監控、線程分析等等。也就是說,這個接口定義了一系列調試分析功能,而 JVM 實現了這個接口,從而提供調試能力。

不過吧,這個接口畢竟是 C++的,調用起來確實不方便,所以Java 還提供了 JDI 這么個 Java 接口。

JDI 接口使用 JDWP 這個私有的應用層協議,通過 TCP 和目標 VM 的 JVMTI 接口進行交互。

也可以把簡單這個 JDWP 協議理解為 JSF/Dubbo 協議;相當于 IDE 里通過 JDI 這個 SDK,使用 JDWP 協議調用遠程 JVMTI 的 RPC 接口,來傳輸調試時的各種斷點、查看操作。

可能有人會問,搞什么套殼!要什么 JDWP,我直接 JVMTI 調試不是更香,鏈路越短性能越高!

當然可以,比如 Arthas 里的部分功能,就直接使用了 JVMTI 接口,要什么 JDI!直接 JVMTI 干就完了。

開個玩笑,Arthas 畢竟不是 Debug 工具,人家根本就不用 JDI 接口。而且 JVMTI 的能力也不只是斷點,它的功能非常多:

左邊的功能類,提供了各種亂七八糟的功能,比如我們常用的添加一個斷點:

jvmtiError
SetBreakpoint(jvmtiEnv* env,
            jmethodID method,
            jlocation location)

右邊的事件類,可以簡單的理解為回調;還是拿斷點舉例,如果我用上面的 SetBreakpoint 添加了一個斷點,那么當執行到該位置時,就會觸發這個事件:

void JNICALL
Breakpoint(jvmtiEnv *jvmti_env,
            JNIEnv* jni_env,
            jthread thread,
            jmethodID method,
            jlocation location)

JVMTI 的功能非常之多,而 JDI 只是實現了部分 JVMTI 的方法,所以某些專業的 Profiler 工具,可能會直接使用 JVMTI,從而實現更豐富的診斷分析功能。

遠程調試與本地調試

不知道大家有沒有留意過本地 Debug 啟動時的日志:

第一行是隱藏了后半段的啟動命令,展開后是這個樣子:

/path/to/java -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:53631,suspend=y,server=n -javaagent:/path/to/jetbrains/debugger-agent.jar ...

第二行是一個 Connected 日志,意思是使用 socket 連接到遠程 VM 的53631端口

上一段說到,IDE 通過 JDI 接口,使用 JDWP 協議和目標 VM 的 JVMTI 交互。這里的 53631 端口,就是目標 JVM 暴露出的 JVM TI 的 server 端口。

而第一行里,IDEA 自動給我們加上了 -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:53631 這么一段,這個參數的意思就是,讓 jvm 以 53631 暴露 jdwp 協議

小知識,這個 agentlib 可不只是為 jvmti 提供的。它還可以讓 JVM 加載其他的 native lib包,直接“”到你的 jvm 上,下面是參數格式:

所以吧,上面的描述其實不太嚴謹,更專業的說法是:

讓 JVM 加載 JDWP 這個 agent 庫,參數為transport=dt_socket,address=127.0.0.1:53631 ,這個 jdwp agent 庫以 53631 端口提供了 jdwp 協議的 server。只不過這個 jdwp 是jvm 內部的庫,不需要額外的 so/dylib/dll 文件。

如有需要,你完全可以弄個 “datupiao” 的 agentlib,”到這個 jvm 上,然后在這個 lib 里調用 JVMTI 接口,然后暴露個端口提供服務和遠程交互,實現自己的 jdwp!

可能某些老板們注意到了,本地調試還要127.0.0.1走tcp 交互一遍,那遠程調試呢?

基于上面的解釋,本地調試和遠程調試真的沒啥區別!或者說,在目前 IDEA/Eclipse 的實現下,不存在本地調試,都是遠程!只不過一個是 127.0.0.1,一個是遠程的 IP 而已。

在本地調試時,IDEA 會自動給我們的 JVM 增加 agent 參數,隨機指定一個端口,然后通過 JDI 接口連接,代碼大概長這樣(JDI 的 SDK 在 JDK_HOME/lib/tools.jar ):

Map<String, Connector.Argument> env = connector.defaultArguments();
env.get("hostname").setValue(hostname);
env.get("port").setValue(port);

VirtualMachine vm = connector.attach(env);

瞅瞅, VirtualMachine 里的就這點方法,能力上比 JVMTI 還是差遠了

List<ReferenceType> classesByName(String className);

List<ReferenceType> allClasses();

void redefineClasses(Map<? extends ReferenceType, byte[]> classToBytes);

List<ThreadReference> allThreads();

void suspend();

void resume();

List<ThreadGroupReference> topLevelThreadGroups();

EventQueue eventQueue();

EventRequestManager eventRequestManager();

VoidValue mirrorOfVoid();

Process process();

再回來看看 IDEA 中獨立的遠程調試,配置好之后,紅框里的信息會提示你 ,遠程的 JVM 需增加這一段啟動參數,而且支持多個版本 JDK 的格式,CV 大法就能直接用。

-agentlib 和 -javaagent

有些細心的同學可能發現了,IDEA 默認的啟動腳本里,同時配置了 -agentlib 和 -javaagent。

-javaagent:/path/to/jetbrains/debugger-agent.jar

這個 debugger-agent吧,其實也沒干啥事,只是對 JDK 內置的一些線程做了些增強,輔助 IDEA 的 debug 功能,支持一些異步的調試。

agentlib、javaagent 這倆兄弟,定位其實很像,都是加載自定義的代碼。

不過區別在于,agentlib 是加載 native lib,需要c/cpp 去寫,相當于自己的代碼在 jvm 上,可以為所欲為,比如在 agentlib 里調用上面說的 JVMTI 。

而 javaagent 是用 java 寫的,可以直接用上層的 Instrumentation API,做一些類的增強轉換之類,這也是大多數 APM Agent、Profiler Agent實現的基本原理。

Arthas 的玩法

Arthas 的核心入口,其實還是 javaagent,支持靜態加載和動態加載兩種玩法。

靜態沒啥好說的,啟動腳本里增加一個-javaagent:/tmp/test/arthas-agent.jar,然后為所欲為。

動態的叫 attach,使用 Java 提供的 VirtualMachine 就可以實現運行時添加 -javaagent,效果一樣:

VirtualMachine virtualMachine = VirtualMachine.attach(virtualMachineDescriptor);
virtualMachine.loadAgent(agentPath, agentArgs);

這個 Agent 在 JVM 里啟動了一個TCP server,用于收發 Arthas Client 的各種 trace、watch 、Dashboard 等指令,然后通過 Instrumentation 增強Class 插入代碼、或者直接調用某些 Java API,實現各種功能。

注意到了嗎?Arthas 可以直接下載一個 jar 包,java -jar 就能連上。

其實吧,它這個直接啟動的 jar 包,是一個 boot 包,啟動之后把亂七八糟的 jar 都下載下來。接著動態 attach 的方式,連接到本機指定進程號的 JVM,然后再為所欲為。

在 3.5 版本之后,Arthas 還新增了一個 vmtool 命令,這個命令可以直接獲取內存中的指定對象實例。

$ vmtool --action getInstances --className java.lang.String --limit 10
@String[][
    @String[com/taobao/arthas/core/shell/session/Session],
    @String[com.taobao.arthas.core.shell.session.Session],
    @String[com/taobao/arthas/core/shell/session/Session],
    @String[com/taobao/arthas/core/shell/session/Session],
    @String[com/taobao/arthas/core/shell/session/Session.class],
    @String[com/taobao/arthas/core/shell/session/Session.class],
    @String[com/taobao/arthas/core/shell/session/Session.class],
    @String[com/],
    @String[java/util/concurrent/ConcurrentHashMap$ValueIterator],
    @String[java/util/concurrent/locks/LockSupport],
]

直接獲取內存對象,這玩意只靠 Instrumentation API 可做不到。Arthas 搞了個騷操作,直接 JNI 調用自定義 lib,用過 cpp 直接調用了 JVMTI 的 API,融合了 Instrumentation 和 JVMTI 的能力,這下是真的為所欲為了!

#include <stdio.h>
#include <jni.h>
#include <jni_md.h>
#include <jvmti.h>
#include "arthas_VmTool.h" // under target/native/javah/

static jvmtiEnv *jvmti;

...

extern "C"
JNIEXPORT jobjectArray JNICALL
Java_arthas_VmTool_getInstances0(JNIEnv *env, jclass thisClass, jclass klass, jint limit) {
    jlong tag = getTag();
    limitCounter.init(limit);
    jvmtiError error = jvmti->IterateOverInstancesOfClass(klass, JVMTI_HEAP_OBJECT_EITHER,
                                               HeapObjectCallback, &tag);
    if (error) {
        printf("ERROR: JVMTI IterateOverInstancesOfClass failed!%u\n", error);
        return NULL;
    }

    jint count = 0;
    jobject *instances;
    error = jvmti->GetObjectsWithTags(1, &tag, &count, &instances, NULL);
    if (error) {
        printf("ERROR: JVMTI GetObjectsWithTags failed!%u\n", error);
        return NULL;
    }

    jobjectArray array = env->NewObjectArray(count, klass, NULL);
    //添加元素到數組
    for (int i = 0; i < count; i++) {
        env->SetObjectArrayElement(array, i, instances[i]);
    }
    jvmti->Deallocate(reinterpret_cast<unsigned char *>(instances));
    return array;
}

總結

  1. Debug 基于 JDPA 體系

IDE 直接接入 JDPA 體系中的 JDI 接口完成

JDI 通過 JDWP 協議,調用遠程 VM 的 JVMTI 接口

JDWP 是通過 agentlib 加載的,agentlib 算是一個 native 的靜態接口

  1. javaagent 是 JAVA 層面的接口,用過 Instrumentation API(Java)實現各種功能,主要用于APM、Profiler 工具
  2. 如果你想,在 javaagent 里調用功能更豐富的 JVMTI 也不是不行。
責任編輯:武曉燕 來源: 今日頭條
相關推薦

2020-12-29 07:32:59

Redis 列表數據

2012-01-12 14:37:34

jQuery

2016-08-17 23:53:29

網絡爬蟲抓取系統

2013-04-07 14:09:55

Android應用基本

2010-08-20 13:29:33

OFDM

2020-03-21 14:57:14

手機定位智能手機APP

2009-02-24 09:43:00

IP電話原理

2011-11-29 12:17:00

2010-03-18 20:13:03

Java socket

2021-04-27 19:21:48

HBase原理開源

2010-03-17 13:35:02

2019-11-28 10:45:28

ZooKeeper源碼分布式

2016-08-18 00:04:09

網絡爬蟲抓取系統服務器

2021-02-08 21:40:04

SockmapBPF存儲

2010-06-18 17:28:37

Linux Anacr

2020-11-26 13:54:03

容器LinuxDocker

2009-06-11 09:56:09

MySQL Repli原理

2011-07-07 14:10:21

Cocoa 內省 hash

2020-12-29 16:55:44

ZooKeeper運維數據結構

2011-07-07 14:46:10

Cocoa Xcode
點贊
收藏

51CTO技術棧公眾號

国产精品黄页免费高清在线观看| 日韩欧美一级二级| 日韩精品不卡| 国产免费黄色大片| 影音先锋久久久| 亚洲美女福利视频网站| 亚洲精品20p| 国产后进白嫩翘臀在线观看视频| 97精品久久久午夜一区二区三区 | 摸摸摸bbb毛毛毛片| 免费成人高清在线视频| 性做久久久久久免费观看| 欧美日韩综合网| 国产成人三级在线播放 | 天天干天天草天天| 91吃瓜在线观看| 国产精品私人自拍| 激情欧美一区二区三区中文字幕| 一级片免费观看视频| 亚洲午夜在线| 国产性色av一区二区| 日本黄色大片在线观看| 91精品国产经典在线观看| 亚洲一区二区不卡免费| 亚洲精品美女久久7777777| 人妻少妇精品无码专区| 精品一区二区三区的国产在线播放| 久久久久中文字幕2018| 2025国产精品自拍| 日本一区二区在线看| 日韩精品视频在线观看网址| 日本少妇xxx| 亚洲青青一区| 欧美在线一区二区| 日本一区二区黄色| av福利在线导航| 亚洲女人小视频在线观看| 日本一区视频在线| 免费在线超碰| 久久嫩草精品久久久久| 久久av二区| 亚洲精品久久久狠狠狠爱 | 一本一道久久a久久精品| 真人抽搐一进一出视频| 污视频在线免费观看网站| 亚洲欧洲一区二区在线播放| 日本一区免费观看| 青青九九免费视频在线| 99久久综合国产精品| 国产精品制服诱惑| 亚洲国产精品suv| 国产不卡高清在线观看视频| 亚洲一区二区久久久久久| 91无套直看片红桃| 久久国产日韩欧美精品| 成人激情视频在线播放| 91精品中文字幕| 精品亚洲porn| 亚洲专区国产精品| 精品人妻午夜一区二区三区四区 | 国产伦精品一区二区三区精品| 久久在线观看| 日韩欧美色综合| 久久久无码人妻精品无码| 亚洲欧美日本国产| 亚洲激情自拍图| 久久精品一区二区免费播放| 国产成人ay| 中文字幕在线国产精品| 懂色av粉嫩av蜜臀av一区二区三区| 91欧美在线| 不卡av电影院| 国产在线视频你懂的| 一本久道久久久| 日本欧美黄网站| 中文字幕第99页| 国产美女娇喘av呻吟久久| 99久久99久久| 亚洲av成人无码网天堂| 国产视频一区二区在线观看| 亚洲精品视频一二三| 黄色免费在线观看| 亚洲午夜电影网| 亚洲熟妇av一区二区三区| 日韩欧美2区| 日韩一区二区三区精品视频| 亚州av综合色区无码一区| 久久99高清| 久久久精品欧美| 国产第一页在线播放| 日韩激情视频网站| 成人写真视频福利网| 少妇精品高潮欲妇又嫩中文字幕 | 91ts人妖另类精品系列| 狠色狠色综合久久| 国产成人精品一区| 国产ts人妖调教重口男| 91久色porny| 中文字幕成人一区| 国产网站在线| 精品1区2区3区| 日本一级片在线播放| 99re6这里只有精品| 欧美激情精品久久久久久蜜臀| av大片在线免费观看| 国产一区视频在线看| 免费亚洲精品视频| 手机在线免费看av| 欧美色成人综合| 亚洲中文字幕一区| 888久久久| 国产精品白丝jk喷水视频一区| 精品乱子伦一区二区| 国产色产综合色产在线视频| 日产精品久久久久久久蜜臀| 99久久伊人| 日韩av在线免费播放| 希岛爱理中文字幕| 免费一级片91| 久久一区二区三区av| 欧美1—12sexvideos| 欧美色窝79yyyycom| 国产二级一片内射视频播放| 欧美在线1区| 国产精品自拍网| 国产私拍精品| 日韩欧美中文字幕在线观看| 久久久久中文字幕亚洲精品| 99成人超碰| 国产精品视频在线播放| 黄色视屏网站在线免费观看| 无码av免费一区二区三区试看 | 中文字幕av第一页| 91在线视频播放| 成人午夜视频免费观看| 国产电影一区| 久久久国产影院| 亚洲天堂网在线视频| 国产色婷婷亚洲99精品小说| 成人在线免费播放视频| 一区二区美女| 欧美一级片免费在线| 亚洲AV成人无码一二三区在线| 亚洲成人激情av| 稀缺呦国内精品呦| 国产精品mm| 99精品国产高清在线观看| 怡红院av在线| 日韩你懂的电影在线观看| 欧美成人免费观看视频| 国产精品996| 奇米777四色影视在线看| 97一区二区国产好的精华液| 欧美福利在线观看| 亚洲国产精品久久久久久久| 亚洲自拍偷拍图区| 毛茸茸free性熟hd| 性一交一乱一区二区洋洋av| 免费亚洲一区二区| 日韩av一级| 日韩日本欧美亚洲| 国产露脸无套对白在线播放| 亚洲欧美一区二区三区孕妇| 国产精品一级无码| 亚洲美女少妇无套啪啪呻吟| 国产欧美一区二区视频| 99爱在线观看| 精品久久久久久久久久久久久久久久久 | 97视频国产在线| 欧美性孕妇孕交| 欧美亚洲国产bt| 欧美一级片在线视频| 国产精一区二区三区| 加勒比成人在线| 亚洲日产av中文字幕| 国产精品成人aaaaa网站| 色哟哟免费在线观看| 欧美电影免费提供在线观看| 91久久国产视频| 中文字幕精品在线不卡| 波多野结衣中文字幕在线播放| 亚洲美女黄网| 亚洲va韩国va欧美va精四季| 国产精品99久久免费| 久久久视频精品| 成人在线二区| 日韩欧美区一区二| 亚洲性猛交富婆| 一区二区三区四区不卡在线 | 欧洲成人在线观看| 免费不卡视频| 日韩电影免费在线观看中文字幕| 久久久久久av无码免费看大片| 亚洲欧美激情插| free性中国hd国语露脸| 久久99蜜桃精品| 你懂的av在线| 亚洲国产精品91| 欧美精品尤物在线| 国产精品美女久久久久| 日韩av不卡在线| 久草在线视频福利| 色婷婷综合久久久久| 黄色三级网站在线观看| 欧美日韩国产成人在线91| 国产无遮挡又黄又爽又色| 欧美国产成人在线| 久久一区二区电影| 国产一区二区看久久| 日日碰狠狠丁香久燥| 亚洲欧美伊人| 亚洲不卡中文字幕| 日本成人中文| 91九色对白| 一级欧美视频| 国产精品久久久久久久电影| 草草在线视频| 欧美激情免费在线| 超碰免费在线播放| 最近2019中文字幕大全第二页| 天堂在线视频免费| 日韩视频免费观看高清完整版 | 久久亚洲精华国产精华液| 国偷自产av一区二区三区麻豆| 久久精品国产网站| 人妻丰满熟妇av无码区app| 亚洲激情成人| 国产xxxx振车| 欧美二区不卡| 亚洲欧洲精品在线观看| 国产亚洲电影| 免费成人深夜夜行视频| 老司机精品在线| 国产一区二区精品免费| 国产精品xxx在线观看| 91色p视频在线| gogo大尺度成人免费视频| 国产欧美日韩精品一区二区免费 | 亚洲综合福利| 黑人中文字幕一区二区三区| 成人线上播放| 国产一区二区三区高清| 国产精品15p| 国产亚洲情侣一区二区无| 日韩欧洲国产| 成人在线资源网址| 99亚洲乱人伦aⅴ精品| 97在线中文字幕| 99这里只有精品视频| 国产精品一区二区三区不卡| 都市激情亚洲| 黑人中文字幕一区二区三区| 日韩高清一级| 欧洲在线视频一区| 国内成人自拍| 一区二区在线不卡| 久久久久久美女精品 | 欧美hdxxx| 韩国福利视频一区| 国模私拍一区二区国模曼安| 91国内在线视频| 欧美大片免费观看网址| 国产精品美女www爽爽爽视频| 91福利精品在线观看| 91免费精品视频| 中文字幕日韩高清在线| 黑人另类av| 成人精品久久| 99热一区二区三区| 亚洲性视频h| 久久久久免费精品| 国精产品一区一区三区mba视频| 性鲍视频在线观看| av成人免费在线| jizz中文字幕| 亚洲男人的天堂网| 国产成人亚洲精品自产在线| 在线看不卡av| 国产伦精品一区二区三区四区| 日韩精品资源二区在线| 日本不卡视频一区二区| 色噜噜久久综合伊人一本| 欧美大片黄色| 国产成人精品久久亚洲高清不卡| 日本午夜免费一区二区| 国产精品区免费视频| 狠狠操综合网| 欧美性潮喷xxxxx免费视频看| 亚洲一区日韩在线| 五月天婷婷影视| 91在线观看免费视频| 波兰性xxxxx极品hd| 婷婷国产v国产偷v亚洲高清| 337p粉嫩色噜噜噜大肥臀| 欧美一区二区三区免费| 青青操视频在线| 久久久精品中文字幕| 亚洲三级欧美| 91精品国产一区二区三区动漫| 亚洲美女15p| 欧美大片免费播放| 久久精品91| 亚洲一区和二区| 中文字幕av不卡| 日本a在线观看| 在线不卡一区二区| 日韩精品系列| 欧美国产日韩一区| 人人精品久久| 欧美亚洲国产免费| 国产精品a久久久久| 国产喷水theporn| 91蝌蚪国产九色| 久热精品在线观看| 欧美精品色综合| 国产三级视频在线| 91国产视频在线| 亚洲天堂中文字幕在线观看| 在线观看欧美一区| 久久先锋影音| 欧美成人三级伦在线观看| 亚洲欧美另类在线| 一本久道久久综合无码中文| 亚洲美女av在线| yellow在线观看网址| 99精彩视频| 综合天天久久| 又色又爽又黄视频| 国产精品美女久久久久aⅴ国产馆| 国产婷婷色一区二区在线观看| 亚洲电影在线看| 毛片在线网址| 国产精品一区二区在线观看| 欧美人成在线| 亚洲丝袜在线观看| 亚洲精品日韩专区silk| 国产精品久久久久久久免费| 中文字幕无线精品亚洲乱码一区| 成人免费网站www网站高清| 欧美日韩在线观看一区| 香蕉亚洲视频| 中文字幕人妻一区二区| 欧美日韩国产一区中文午夜| 人妻无码中文字幕| 韩国三级电影久久久久久| 国产成人精品亚洲线观看| 日本久久久网站| 国产成a人亚洲精品| 久久久无码精品亚洲国产| 欧美大片免费久久精品三p| 牛牛电影国产一区二区| 国产欧美一区二区视频| 中文日韩在线| 国产美女永久免费无遮挡| 欧美中文字幕不卡| 蜜桃视频网站在线观看| 成人免费自拍视频| 欧美激情四色| 久久福利小视频| 日本精品一区二区三区高清 | 欧美日韩爱爱视频| av在线亚洲色图| 欧美日韩国产精品激情在线播放| 26uuu久久天堂性欧美| 波多野结衣视频在线观看| 永久免费看mv网站入口亚洲| 热久久久久久| 搞av.com| 国产日韩欧美麻豆| 国产精品久久综合青草亚洲AV| 九九精品在线视频| 精品亚洲自拍| 免费看污黄网站| 一区二区三区欧美激情| 亚洲av片一区二区三区| 国产91在线高潮白浆在线观看| 国产精品88久久久久久| 精品无码av一区二区三区| 日韩欧美第一页| 超碰免费在线播放| 久久精品二区| 久久精品免费观看| 国产一级久久久| 国产一区二区三区在线免费观看| 99tv成人影院| 中文字幕无码精品亚洲35| 国产精品视频在线看| 性一交一乱一伧老太| 日本韩国在线不卡| 亚洲激情中文| 日韩人妻一区二区三区| 欧美一区二区三区成人| 综合另类专区| 日韩国产精品毛片| 久久久久久免费网| 国产精品久久久久久久免费看| 91精品国产高清久久久久久久久| 极品美女一区二区三区| 91人妻一区二区| 欧美日韩一区小说|