亚洲人成网站在线播放2019 _日韩国产欧美精品_久久夜色精品国产欧美乱_在线视频福利一区

當(dāng)前位置:首頁(yè) > 網(wǎng)站舊欄目 > 學(xué)習(xí)園地 > 設(shè)計(jì)軟件教程 > Dmd編譯器學(xué)習(xí)筆記

Dmd編譯器學(xué)習(xí)筆記
2010-01-13 22:54:06  作者:  來(lái)源:
Dmd編譯器學(xué)習(xí)筆記

英文原文在這里:
http://digitalmars.com/d/dcompiler.html
在這里有一篇翻譯文章:
http://sofire.javaeye.com/blog/111667
不過(guò),主要是關(guān)于windows的;我更關(guān)心Linux下的使用。
順便看看兩者有啥區(qū)別。

相關(guān)文件
注意:

Linux的dmd配置文件是dmd.conf
Windows的配置文件是sc.ini


  • /dmd/bin/dmd     D 編譯器的可執(zhí)行文件
     
  • /dmd/bin/dumpobj     Elf file dumper
     
  • /dmd/bin/obj2asm     Elf文件反匯編器
     
  • /dmd/bin/dmd.conf     全局配置文件(復(fù)制到 /etc/dmd.conf)
     
  • /dmd/lib/libphobos.a     D運(yùn)行庫(kù)(復(fù)制到 /usr/lib/libphobos.a)
     


DMD的安裝
[list=1]
  • 下載dmd程序:http://ftp.digitalmars.com/dmd.zip,解壓到~/dmd目錄
  • 復(fù)制dmd.conf文件到/etc目錄
    Java代碼 復(fù)制代碼
    1. cp ~/dmd/bin/dmd.conf /etc  
  • 給下面的文件添加執(zhí)行權(quán)限
    Java代碼 復(fù)制代碼
    1. chmod u+x ~/dmd/bin/{dmd,dumpobj,obj2asm,rdmd}  
  • 把~/dmd/bin添加到PATH環(huán)境變量;或者把它們復(fù)制到/usr/local/bin目錄下(不要只復(fù)制可執(zhí)行程序)
  • 復(fù)制庫(kù)文件到/usr/lib目錄
    Java代碼 復(fù)制代碼
    1. cp ~/dmd/lib/libphobos.a /usr/lib  

    [/list]

    以上安裝過(guò)程比較簡(jiǎn)單,只有PATH環(huán)境變量設(shè)置正確了,就應(yīng)該沒(méi)有什么問(wèn)題

    編譯參數(shù)和開(kāi)關(guān)
    命令的格式:
    Java代碼 復(fù)制代碼
    1. dmd   files...  -switches...   

    [Windows]支持以下類(lèi)型的文件:
    Java代碼 復(fù)制代碼
    1. Extension      File Type     
    2. none           D source files     
    3. .d             D source files     
    4. .di            D interface files     
    5. .obj           Object files to link in     
    6. .lib           Object code libraries to search     
    7. .exe           Name output executable file     
    8. .def           module definition file     
    9. .res           resource file    

    [Linux]支持以下類(lèi)型的文件:
    Java代碼 復(fù)制代碼
    1. Extension      File Type   
    2. none           D source files   
    3. .d             D source files   
    4. .di            D interface files   
    5. .o             Object files to link in   
    6. .a             Library files to link in  

    好像不支持.so文件--這一點(diǎn)不肯定

    編譯開(kāi)關(guān)之一
    Java代碼 復(fù)制代碼
    1. -debug   
    2.     編譯調(diào)試代碼   
    3.   
    4. -debug=level   
    5.     編譯調(diào)試代碼:code <= level   
    6.   
    7. -debug=ident   
    8.     編譯調(diào)試代碼:標(biāo)識(shí)符為ident   
    9.   
    10. -version=level   
    11.     生成版本代碼:>=level   
    12.   
    13. -version=ident   
    14.     生成版本代碼:==ident   
    15.        
    16. -unittest   
    17.     編譯單元測(cè)試代碼(還有斷言)   
    18.   
    19. -cov   
    20.     添加覆蓋率分析指令;運(yùn)行程序后,會(huì)生成.lst文件   
    21.   
    22. -release   
    23.     生成發(fā)行版本;會(huì)去掉契約和斷言等信息  


    -debug / -version
    debug、version的使用方法很相似
    Java代碼 復(fù)制代碼
    1. //debug.d   
    2. import std.stdio;   
    3.   
    4. void main()   
    5. {   
    6.     debug    { writefln("debug"); }   
    7.     debug(1) { writefln("debug(1)"); }   
    8.     debug(2) { writefln("debug(2)"); }   
    9.   
    10.     debug(ERROR) { writefln("debug(ERROR)"); }   
    11.     debug(WARN)  { writefln("debug(WARN)"); }   
    12.   
    13.     version(HOME)      { writefln("version(HOME)"); }   
    14.     version(BUSINESS)  { writefln("version(BUSINESS)"); }   
    15.   
    16.     version(WINDOWS) {} else { writefln("version(!WINDOWS)"); }   
    17. }  

    編譯并運(yùn)行之:
    Java代碼 復(fù)制代碼
    1. # dmd -debug -run debug.d   
    2. debug   
    3. debug(1)   
    4. version(!WINDOWS)   
    5.   
    6. # dmd -debug=1 -run debug.d   
    7. debug   
    8. debug(1)   
    9. version(!WINDOWS)   
    10.   
    11. # dmd -debug=2 -run debug.d   
    12. debug   
    13. debug(1)   
    14. debug(2)   
    15. version(!WINDOWS)   
    16.   
    17. # dmd -debug=ERROR -run debug.d   
    18. debug(ERROR)   
    19. version(!WINDOWS)   
    20.   
    21. # dmd -debug=WARN -run debug.d   
    22. debug(WARN)   
    23. version(!WINDOWS)   
    24.   
    25. # dmd -version=HOME -run debug.d   
    26. version(HOME)   
    27. version(!WINDOWS)   
    28.   
    29. # dmd -version=BUSINESS -version=WINDOWS -run debug.d   
    30. version(BUSINESS)  


    -unittest
    Java代碼 復(fù)制代碼
    1. //unittest.d   
    2. import std.stdio;   
    3.   
    4. class A   
    5. {   
    6.     int i;   
    7.     this(int v) {   
    8.         i = v;   
    9.     }      
    10.   
    11.     unittest {   
    12.         A a = new A(1);   
    13.         assert(a.i == 1);    
    14.         assert(a.i != 0);    
    15.     }      
    16. }   
    17.   
    18. int add(int a, int b)   
    19. {   
    20.     return a - b;   
    21.     // 這里沒(méi)有unittest   
    22. }   
    23.   
    24. void main()   
    25. {   
    26.     // 這里沒(méi)有unittest   
    27. }   
    28.   
    29. unittest {   
    30.     assert(add(12) == 3);    
    31. }  

    先正常編譯,沒(méi)有語(yǔ)法錯(cuò)誤:
    Java代碼 復(fù)制代碼
    1. # dmd -run unittest.d  

    再編譯單元測(cè)試代碼
    Java代碼 復(fù)制代碼
    1. # dmd -unittest -run unittest.d    
    2. Error: AssertError Failure unittest(30)  

    30行有錯(cuò)誤?add函數(shù)寫(xiě)錯(cuò)了:(

    -cov
    看看覆蓋率分析選項(xiàng):
    Java代碼 復(fù)制代碼
    1. //cov.d   
    2. import std.stdio;   
    3.   
    4. void main()   
    5. {   
    6.     for (int i; i < 2; i++)   
    7.     {   
    8.         if (i < 5)   
    9.             writefln("i < 5");   
    10.         else  
    11.             writefln("i >= 5");   
    12.     }   
    13. }  

    編譯并運(yùn)行:
    Java代碼 復(fù)制代碼
    1. # dmd -cov -run cov.d   
    2. i < 5  
    3. i < 5  

    得到覆蓋率分析文件:cov.lst:(注意:編譯完并不會(huì)有這個(gè)文件;運(yùn)行程序后才會(huì)生成)
    Java代碼 復(fù)制代碼
    1.        |//cov.d   
    2.        |import std.stdio;   
    3.        |   
    4.        |void main()   
    5.        |{   
    6.       6|    for (int i; i < 2; i++)   
    7.        |    {   
    8.       2|        if (i < 5)   
    9.       2|            writefln("i < 5");   
    10.        |        else  
    11. 0000000|            writefln("i >= 5");   
    12.        |    }   
    13.        |}   
    14. cov.d is 75% covered  

    第6行運(yùn)行了6次--自己算算是不是;
    第11行運(yùn)行了0次--搜索000000字符串,就能輕松找到?jīng)]有覆蓋到地方;
    更多詳情參考:http://digitalmars.com/d/code_coverage.html

    -release
    用法很簡(jiǎn)單,不舉例了

    編譯開(kāi)關(guān)之二
    Java代碼 復(fù)制代碼
    1. -D   
    2.     生成文檔   
    3.   
    4. -Dddocdir   
    5.     把文檔生成到docdir目錄;注意是 -Dd   
    6.        
    7. -Dffilename   
    8.     指定文檔的文件名;  

    編譯命令很簡(jiǎn)單:
    Java代碼 復(fù)制代碼
    1. dmd -D debug.d  

    關(guān)于文檔的更多信息參考:http://sofire.javaeye.com/blog/111881

    編譯開(kāi)關(guān)之三
    Java代碼 復(fù)制代碼
    1. -H   
    2.     生成.di接口文件   
    3.   
    4. -Hddir   
    5.     把接口文件生成到dir目錄;注意是 -Hd   
    6.   
    7. -Hffilename   
    8.     指定接口文件名;注意是 -Hf  

    關(guān)于接口,看一段翻譯:
    當(dāng)處理源文件中的import聲明時(shí),編譯器會(huì)搜索import對(duì)應(yīng)的源文件,從中提取出需要的信息。
    編譯器同時(shí)也會(huì)搜索D接口文件,D接口文件中只包含模塊中需要導(dǎo)入的內(nèi)容,而不是整個(gè)模塊。
    使用D接口文件的好處是:

      D接口文件更小,和D源文件相比處理起來(lái)更快。
      可以隱藏源代碼。比如以接口文件和object庫(kù)的方式提供源程序,而不是提供全部源代碼。

    D接口文件可以在編譯D源文件時(shí)用-H開(kāi)關(guān)創(chuàng)建,D接口文件的后綴是.di。
    當(dāng)編譯器分解import聲明時(shí),搜索尋找.di形式的D接口文件,再尋找D源文件。
    D接口文件有點(diǎn)和C++頭文件相似,但這不是必需的,它不屬于D語(yǔ)言,只是編譯器的一個(gè)功能,只是用來(lái)優(yōu)化程序的構(gòu)建。

    dmd -H生成的接口文件包括了源代碼;只是去掉了注釋,斷言等信息;具體怎么回事,待弄明白了再來(lái)改這里(TODO)



    編譯開(kāi)關(guān)之四
    Java代碼 復(fù)制代碼
    1. -c   
    2.     只編譯,不鏈接;簡(jiǎn)單點(diǎn)說(shuō)就是只生成.o文件,不生成可執(zhí)行文件   
    3.   
    4. -Ipath   
    5.     指定import路徑;多個(gè)路徑之間用分號(hào)(;)分割;允許有多個(gè)-I,并按照-I指定的路徑順序進(jìn)行搜索   
    6.   
    7. -Jpath   
    8.     指定D源程序中import表達(dá)式的搜索路徑;多個(gè)路徑之間用分號(hào)(;)分割;   
    9.     允許有多個(gè)-J,并按照-J指定的路徑順序進(jìn)行搜索   
    10.   
    11. -Llinkerflag   
    12.      把linkerflag傳遞給連接程序(linker),比如: -L-L/usr/lib   
    13.   
    14. -o-   
    15.     不生成.o文件,一般和-H、-D一起使用   
    16.   
    17. -offilename   
    18.     指定輸出文件名;可以是可執(zhí)行程序,也可以是其他文件;注意是:-of   
    19.   
    20. -odobjdir   
    21.     把.o文件生成到objdir目錄;默認(rèn)是生成到當(dāng)前目錄;注意是:-od   
    22.   
    23. -op   
    24.     默認(rèn)生成的object文件(.o)會(huì)在當(dāng)前目錄;添加-op參數(shù)則會(huì)生成到源文件所在目錄  


    -c
    Java代碼 復(fù)制代碼
    1. dmd debug.d     # 生成debug可執(zhí)行文件   
    2. dmd -c debug.d  # 生成debug.o文件  

    dmd編譯器默認(rèn)是編譯成.o文件后,再和其他庫(kù)連接成可執(zhí)行文件;
    某些情況下不需要編譯成可執(zhí)行文件,比如沒(méi)有main函數(shù)--也編譯不成
    這時(shí)就可以只編譯成.o文件

    bud等程序build工具,可以自動(dòng)判斷文件是否有main函數(shù),并生成相應(yīng)的文件;
    但dmd編譯器不是這樣的;所以,熟悉了dmd編譯器后,可以只使用bud等工具來(lái)編譯程序

    -I / -J
    Java代碼 復(fù)制代碼
    1. import std.stdio;               // -I   
    2. void main()   
    3. {   
    4.     auto b = import("x.d");     // -J   
    5. }  


    自己體會(huì)它們的用途吧:)
    注意:如果在搜索路徑下有同名文件的話,可能出現(xiàn)奇怪的問(wèn)題;避免出現(xiàn)這種情況,或者改變參數(shù)的順序

    -Llinkerflag
    一般是-L-L 和 -L-l參數(shù),指定lib路徑和庫(kù)文件
    比如:-L-L/usr/local/lib  -L-lsqlite3
    對(duì)linker不熟悉,回頭在詳細(xì)寫(xiě)這塊

    -o-
    如果只想生成文檔,連.o文件都不想要;則-o- 就是你想要的了

    -offilename
    默認(rèn)情況下,是根據(jù)源文件名來(lái)確定后續(xù)文件的文件名;
    比如foo.d 會(huì)生成 foo.ofoo 文件;
    通過(guò)-of參數(shù)可以改變輸出文件的名字:
    dmd -ofbar.exe foo.d

    它不會(huì)自動(dòng)添加后綴:
    dmd -c -ofbar foo.d
    生成文件是 bar,而不是bar.o,這可能不是你想要的

    -odobjdir -op
    .o文件默認(rèn)生成在當(dāng)前目錄下;
    -od 是指定生成目錄,-od.和默認(rèn)相同
    -op 是把.o生成到源文件所在目錄
    具體生成到什么目錄下,就看自己的愛(ài)好了;
    喜歡干凈,就用-od吧;對(duì)了,-run參數(shù)能生成更干凈的代碼;)

    編譯開(kāi)關(guān)之五
    Java代碼 復(fù)制代碼
    1. -O   
    2.     優(yōu)化生成的代碼,使程序運(yùn)行得更快   
    3.   
    4. -g   
    5.     添加調(diào)試信息   
    6.   
    7. -gc   
    8.     添加C風(fēng)格的調(diào)試信息(為舊的gdb)   
    9.   
    10. -inline   
    11.     用內(nèi)聯(lián)函數(shù)的方式進(jìn)行優(yōu)化;相當(dāng)于C的inline   
    12.   
    13. -fPIC   
    14.     生成位置無(wú)關(guān)代碼   
    15.   
    16. -d   
    17.     允許廢棄的特征   
    18.   
    19. -profile   
    20.     profile the runtime performance of the generated code    
    21.     參見(jiàn):http://www.digitalmars.com/ctg/trace.html  


    這幾個(gè)參數(shù),要么很簡(jiǎn)單,要么不懂含義;也懶得去研究具體的意思了。
    其中的-g參數(shù)涉及到使用調(diào)試器;我喜歡用writefln調(diào)試;唉,回頭再研究吧。


    編譯開(kāi)關(guān)之六
    Java代碼 復(fù)制代碼
    1. --help   
    2.     打印幫助   
    3.   
    4. -quiet   
    5.     安靜模式,不輸出無(wú)關(guān)緊要的信息   
    6.   
    7. -v   
    8.     顯示編譯細(xì)節(jié)   
    9.   
    10. -w   
    11.     顯示編譯警告  


    編譯開(kāi)關(guān)之七
    Java代碼 復(fù)制代碼
    1. -run srcfile args...   
    2.     編譯,鏈接,然后運(yùn)行程序srcfile;args...(到命令行結(jié)束)都是程序的參數(shù);   
    3.     它不會(huì)保留.o和可執(zhí)行程序(No .o or executable file is left behind)  


    文章開(kāi)始就有怎么使用的例子
    需要注意的是參數(shù)的順序,因?yàn)楹芏鄬?xiě)法都是錯(cuò)誤的,正確的是:
    Java代碼 復(fù)制代碼
    1. dmd 相關(guān)文件 編譯開(kāi)關(guān) -run 含main的源文件 程序參數(shù)1 程序參數(shù)2  

    各種參數(shù)放在-run前面,然后是含有main的源程序,再后面的內(nèi)容會(huì)全部傳遞給運(yùn)行程序,作為參數(shù)

    鏈接Linking
    在dmd編譯成功后,它會(huì)再調(diào)用連接程序;用-c參數(shù)可以不進(jìn)行連接
    連接的實(shí)際處理程序其實(shí)是gcc;這樣能保證和gcc編譯的模塊兼容


    環(huán)境變量
    CC
    默認(rèn)是用gcc進(jìn)行連接,可以通過(guò)設(shè)置CC環(huán)境變量,使用其他連接器

    DFLAGS
    The value of DFLAGS is treated as if it were appended to the command line to dmd.
    沒(méi)有弄明白它是怎么回事;(

    dmd.conf初始化文件
    dmd會(huì)按照下面的目錄順序查找
    1. 當(dāng)前工作目錄
    2. 環(huán)境變量HOME指定的目錄
    3. dmd命令所在目錄,即bin目錄
    4. /etc目錄


    dmd.conf的內(nèi)容看起來(lái)像這樣:
    Java代碼 復(fù)制代碼
    1. ; dmd.conf 是dmd的配置文件   
    2. ; 分號(hào)是注釋符號(hào)   
    3. ; %%包含的名字會(huì)用相應(yīng)的環(huán)境變量替換   
    4. ; %@P%會(huì)被本文件的路徑替換,即dmd.conf文件所在路徑   
    5. [Environment]   
    6. DFLAGS="-I%@P%/../src/phobos"  
    7. DDOCFILE=candydoc/proj.ddoc  


    格式是 NAME=value;NAME即使是小寫(xiě),也會(huì)被處理成大寫(xiě);
    里面的DFLAGS的值會(huì)覆蓋環(huán)境變量指定的值

    和Windows版本的區(qū)別
    • 字符串文章量是只讀的;對(duì)它寫(xiě)會(huì)導(dǎo)致段錯(cuò)誤
    • 配置文件是dmd.conf,而不是sc.ini
    • Windows有一個(gè)@cmdfile開(kāi)關(guān)
    • Windows有一個(gè)-nofloat開(kāi)關(guān)
    • 環(huán)境變量上有些不一樣


    總結(jié):
    和gcc比起來(lái),參數(shù)少多了 ;)
    雖然可以用bud進(jìn)行編譯,但理解dmd還是必要的。
    反正也不復(fù)雜,花點(diǎn)時(shí)間學(xué)習(xí)一下還算值得。
     

安徽新華電腦學(xué)校專業(yè)職業(yè)規(guī)劃師為你提供更多幫助【在線咨詢
亚洲人成网站在线播放2019 _日韩国产欧美精品_久久夜色精品国产欧美乱_在线视频福利一区
日本一区二区高清视频| 日日夜夜精品网站| 岛国一区二区三区高清视频| 中文字幕不卡每日更新1区2区| 久久成人精品视频| 欧美一区二区三区四区夜夜大片 | 日韩人妻无码精品久久久不卡| 日本欧美视频在线观看| 精品一区二区国产| 久久精品中文字幕一区二区三区| 久久久久网址| 国产成人精品优优av| 亚洲熟妇无码一区二区三区| 欧美日韩亚洲在线| 国产成人精品视| 亚洲欧美日韩精品在线 | 亚洲欧洲精品在线| 国产欧美精品久久久| www国产亚洲精品久久网站| 亚洲图片欧洲图片日韩av| 日韩女优人人人人射在线视频| av在线亚洲男人的天堂| 日韩最新免费不卡| 国产精品老牛影院在线观看| 少妇久久久久久被弄到高潮| 9a蜜桃久久久久久免费| 一区二区三区的久久的视频| 国产视频不卡| 中文一区一区三区免费| 国产在线观看欧美| 国产精品乱码视频| 精品人妻人人做人人爽| 国产精品丝袜久久久久久不卡| 日本欧美精品久久久| 久久国产色av免费观看| 欧美一级片免费观看| 欧美 日韩 国产在线| 国产成人生活片| 欧美成人一区二区在线观看| 国产精品青青草| 国产免费观看高清视频| 亚洲一区三区电影在线观看| 91久久国产婷婷一区二区| 视频一区二区三区在线观看| 久久久噜噜噜久久| 国产欧美日韩一区| 日韩美女av在线免费观看| 国产精品美女www| 97国产在线播放| 日韩中文字幕免费在线| 久久久综合香蕉尹人综合网| 日韩国产精品一区二区三区| 国产精品丝袜久久久久久消防器材| 国产亚洲精品网站| 日本中文字幕不卡免费| 精品国产一区二区三区日日嗨| 91精品国产高清久久久久久91| 日韩精品久久一区| 欧美大片欧美激情性色a∨久久| 2019日本中文字幕| 国产肉体ⅹxxx137大胆| 日本欧美一二三区| 一区二区不卡在线观看| 日韩一级黄色av| 美女日批免费视频| 日韩少妇内射免费播放| 精品国产电影| 久久亚洲影音av资源网| 久久久久久久久久久综合| www污在线观看| 国产亚洲精品网站| 国产在线精品一区二区中文 | 日本精品一区二区三区在线| 国产成人精品久久亚洲高清不卡 | 波多野结衣精品久久| 免费国产a级片| 日本午夜在线亚洲.国产| 午夜精品三级视频福利| 大波视频国产精品久久| 中文字幕日本最新乱码视频| 免费91麻豆精品国产自产在线观看| 久久久精品视频成人| 久久久久久久久久久免费精品| 97国产一区二区精品久久呦| 97国产suv精品一区二区62| 成人精品久久av网站| 91国自产精品中文字幕亚洲| 麻豆中文字幕在线观看| 国产区一区二区| 国产美女主播在线播放| 国产精品自拍小视频| 成人精品视频久久久久| 国产成人综合精品| 久久久国产精品免费| 精品国产一区二区三区四区vr | 国产欧美一区二区在线播放| 国产精品专区第二| 成人精品视频久久久久| 国产成人拍精品视频午夜网站| www.久久撸.com| 欧美精品久久久久久久久| 日本一区免费看| 国产欧美日韩高清| 久久资源av| 一区二区精品在线观看| 激情五月六月婷婷| 久久精品欧美| 无码人妻精品一区二区三区66| 国产一区二区三区av在线| 久久99精品久久久久久久久久| 亚洲91精品在线亚洲91精品在线| 国产欧美精品xxxx另类| 国产精品国内视频| 日韩欧美一区二区三区久久婷婷| 日韩视频在线免费播放| 国产欧美在线观看| 欧美成人在线影院| 精品一区二区三区免费毛片| 国产成人精品视频在线| 日韩美女中文字幕| 日韩在线视频观看| 亚洲综合国产精品| 亚洲91精品在线观看| 免费在线观看的毛片| 久久免费视频观看| 在线亚洲美日韩| av资源一区二区| 久久av中文字幕| 欧美一级片免费在线| 91成人免费观看| 国产精品日韩电影| 日本精品久久久久影院| 久久久水蜜桃| 欧美人成在线观看| 日韩有码片在线观看| 日本一区二区三区视频在线观看| 91精品视频网站| 国产在线一区二区三区欧美| 久久久精品免费视频| 欧美做受777cos| 青青成人在线| 国产精品高清一区二区三区| 麻豆中文字幕在线观看| 国产精品美女xx| 亚洲一区二区三区香蕉| 久久国产精品一区二区三区四区| 国产精品久久久久久av下载红粉| 欧美一级片在线播放| 日韩视频免费观看| 国产精品自产拍在线观| 久久99热精品| 777国产偷窥盗摄精品视频| 秋霞午夜一区二区| 亚洲午夜高清视频| 国产suv精品一区二区| 男人亚洲天堂网| 日韩激情视频一区二区| 欧美成人精品在线观看| 国产精品一区二| 日本欧美一二三区| 久久综合网hezyo| 91福利视频导航| 日本a级片电影一区二区| 99伊人久久| 欧美成人精品免费| 亚洲一区二区三区在线视频| 国产不卡视频在线| 国产日韩精品电影| 欧美精品成人网| 日本在线高清视频一区| 欧美精品aaa| 日韩视频在线观看免费| 91精品久久久久久久久久久| 精品不卡一区二区三区| 深夜成人在线观看| 久久人人爽国产| 阿v天堂2017| 高清视频一区二区三区| 蜜桃传媒视频麻豆第一区免费观看| 日本不卡一区二区三区视频 | xvideos亚洲| 99精品国产高清在线观看| 国产一区免费视频| av一区二区三区在线观看| 国产午夜福利视频在线观看| 欧美日韩一区二区视频在线观看| 日本精品一区二区三区不卡无字幕| 久久资源免费视频| 欧美精品久久久久久久免费观看| 精品成在人线av无码免费看| 国产精品视频一二三四区| 日韩在线视频导航| 一区二区三区欧美在线| 在线观看福利一区| 无码人妻精品一区二区三区99v| 日韩av高清在线播放| 亚洲人精品午夜射精日韩| 亚洲精品一区二区三区蜜桃久| 亚洲国产精品久久久久爰色欲| 欧美在线视频网站|