亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Visual Basic的程序錯(cuò)誤及調(diào)試技術(shù)

        2018-02-24 13:55:24劉模群
        電腦知識(shí)與技術(shù) 2018年34期
        關(guān)鍵詞:斷點(diǎn)

        摘要:分析了Visual Basic程序中出現(xiàn)的各類(lèi)錯(cuò)誤,闡述了程序調(diào)試的方法和技術(shù)。使用這些方法,可以查找出程序中隱藏的錯(cuò)誤并加以修正,對(duì)開(kāi)發(fā)高質(zhì)量的應(yīng)用程序是有效的。

        關(guān)鍵詞:程序錯(cuò)誤;程序調(diào)試;斷點(diǎn)

        中圖分類(lèi)號(hào):TP312? ?文獻(xiàn)標(biāo)識(shí)碼:A? ? 文章編號(hào):1009-3044(2018)34-0062-02

        1 問(wèn)題的提出

        程序設(shè)計(jì)語(yǔ)言是目前高校理工類(lèi)學(xué)生的一門(mén)必修的公共計(jì)算機(jī)課程,由于Visual Basic易學(xué)易用功能強(qiáng)大、界面可視化,受到很多高校的青睞。在Visual Basic軟件的學(xué)習(xí)及其應(yīng)用軟件的開(kāi)發(fā)過(guò)程中,程序調(diào)試的方法是很重要的,因?yàn)樵诰帉?xiě)程序的過(guò)程中,不可避免會(huì)發(fā)生一些錯(cuò)誤。無(wú)論怎樣精心地設(shè)計(jì)和編寫(xiě)代碼,但實(shí)際上不能一次就使程序完全正確。特別是程序代碼越復(fù)雜,出錯(cuò)的概率也就越大。如何找出這些隱藏在程序中的錯(cuò)誤?只有掌握一定的程序調(diào)試技術(shù),才能有效地將錯(cuò)誤進(jìn)行修正和排除。學(xué)生在學(xué)習(xí)Visual Basic的過(guò)程中,大多不太重視程序調(diào)試技術(shù)的掌握。有的同學(xué)在上機(jī)過(guò)程中,若程序出現(xiàn)錯(cuò)誤,基本上是束手無(wú)策,導(dǎo)致對(duì)該門(mén)課程的學(xué)習(xí)失去興趣?;诂F(xiàn)實(shí)中的這一狀況,為了解決這個(gè)問(wèn)題,教師在教學(xué)的過(guò)程中,要注重培養(yǎng)學(xué)生調(diào)試程序的能力,使其掌握調(diào)試的方法,通過(guò)調(diào)試技術(shù)快速地找出程序中的錯(cuò)誤所在。這樣能提高學(xué)生上機(jī)編程時(shí),實(shí)際動(dòng)手解決問(wèn)題的能力,通過(guò)理論和上機(jī)實(shí)踐的相互結(jié)合,更好地促進(jìn)課程的學(xué)習(xí)。

        2 程序中的錯(cuò)誤

        2.1 語(yǔ)法錯(cuò)誤

        程序設(shè)計(jì)語(yǔ)言都有嚴(yán)格的語(yǔ)法規(guī)范,如果程序中的語(yǔ)句違反了有關(guān)的語(yǔ)言格式或使用規(guī)則,就會(huì)產(chǎn)生編譯錯(cuò)誤也稱(chēng)語(yǔ)法錯(cuò)誤。例如,在輸入Visual Basic代碼時(shí),關(guān)鍵字拼寫(xiě)不正確;沒(méi)有正確地使用規(guī)定的標(biāo)點(diǎn)符號(hào);函數(shù)的使用不符合規(guī)定;調(diào)用了某個(gè)不存在的函數(shù)或過(guò)程;分支語(yǔ)句或循環(huán)語(yǔ)句的結(jié)構(gòu)不完整或不匹配,如有If沒(méi)有End If、有For沒(méi)有Next;程序中用到了數(shù)組元素,而相應(yīng)的數(shù)組變量并沒(méi)有定義;使用了錯(cuò)誤的屬性或方法等。一般在程序輸入過(guò)程中,如果違反了Visual Basic的語(yǔ)法規(guī)則,系統(tǒng)會(huì)立即給予警告。輸完一行代碼回車(chē)后,出錯(cuò)行會(huì)變成紅色字體(已設(shè)置了自動(dòng)語(yǔ)法檢查功能),并將錯(cuò)誤加亮顯示,同時(shí)顯示一個(gè)消息框,指出錯(cuò)誤所在以幫助修正。有些語(yǔ)法錯(cuò)誤,只有在程序進(jìn)行編譯時(shí)才能檢測(cè)到,語(yǔ)法錯(cuò)誤一般比較容易發(fā)現(xiàn)和排除。實(shí)踐中我們得出經(jīng)驗(yàn),輸入完一行語(yǔ)句準(zhǔn)備輸入下一行時(shí),如果關(guān)鍵字開(kāi)頭字母沒(méi)有自動(dòng)變成大寫(xiě),那么這一行語(yǔ)句就很可能存在錯(cuò)誤。如果設(shè)計(jì)窗體時(shí)已經(jīng)有了某個(gè)控件對(duì)象,在代碼窗口中要設(shè)置該對(duì)象的屬性或方法時(shí),如果輸入了對(duì)象名并鍵入了點(diǎn)后(如Command1.),此時(shí)若沒(méi)有立即彈出屬性方法下拉列表框,那么也許對(duì)象名拼寫(xiě)就有錯(cuò)誤。

        2.2 運(yùn)行錯(cuò)誤

        運(yùn)行錯(cuò)誤是指在程序運(yùn)行過(guò)程中,由于試圖執(zhí)行不能執(zhí)行的操作而引發(fā)的錯(cuò)誤,也稱(chēng)為實(shí)時(shí)錯(cuò)誤。對(duì)于這類(lèi)錯(cuò)誤來(lái)說(shuō),語(yǔ)句本身是符合語(yǔ)法規(guī)則的,程序的邏輯也沒(méi)有問(wèn)題,所以在編譯階段是不會(huì)檢測(cè)出錯(cuò)誤的。但這些語(yǔ)句無(wú)法正確地運(yùn)行,在運(yùn)行階段會(huì)給出相應(yīng)的出錯(cuò)提示,并中止程序的運(yùn)行。這類(lèi)錯(cuò)誤情況比較復(fù)雜,能引起運(yùn)行錯(cuò)誤的原因是各種各樣的。例如變量的類(lèi)型不匹配,引用了不存在的控件對(duì)象,浮點(diǎn)數(shù)運(yùn)算產(chǎn)生溢出,過(guò)程定義調(diào)用不當(dāng)(如形參、實(shí)參設(shè)置不一致),打開(kāi)一個(gè)不存在的文件用以讀取數(shù)據(jù),試圖對(duì)某些控件的只讀屬性進(jìn)行賦值或修改操作等,這些都會(huì)造成程序運(yùn)行中斷。假設(shè)有x、y、z三個(gè)單精度型變量,且x和y的值通過(guò)鍵盤(pán)輸入:如果有Text1.Text=x/y語(yǔ)句,若此時(shí)輸入的y值為0,則會(huì)產(chǎn)生“除數(shù)為0”的運(yùn)行錯(cuò)誤;若y的值不為0,但此時(shí)窗體中并不存在Text1這個(gè)對(duì)象,則會(huì)產(chǎn)生“要求對(duì)象”的運(yùn)行錯(cuò)誤。如果有z=Sqr(x)語(yǔ)句,但輸入的x值為負(fù)數(shù),則會(huì)產(chǎn)生“無(wú)效的過(guò)程調(diào)用或參數(shù)”的運(yùn)行錯(cuò)誤。

        2.3 邏輯錯(cuò)誤

        編寫(xiě)的程序沒(méi)有語(yǔ)法錯(cuò)誤(即編譯時(shí)沒(méi)有出錯(cuò)),程序也能正常運(yùn)行,但運(yùn)行結(jié)果不對(duì),不能實(shí)現(xiàn)預(yù)定的處理功能要求而產(chǎn)生的錯(cuò)誤,這就是邏輯錯(cuò)誤。邏輯錯(cuò)誤多是由于算法錯(cuò)誤引起的,即程序設(shè)計(jì)的總體邏輯思路和算法方面存在問(wèn)題。算法是錯(cuò)誤的,計(jì)算機(jī)執(zhí)行后當(dāng)然得不到正確的結(jié)果。但有時(shí)算法是正確的,但由于編寫(xiě)代碼時(shí)不小心寫(xiě)錯(cuò)了,如條件表達(dá)式不正確造成程序流程錯(cuò)誤,從而引發(fā)邏輯錯(cuò)誤,程序錯(cuò)了結(jié)果當(dāng)然不正確。邏輯錯(cuò)誤不會(huì)使程序中斷,但不會(huì)得到預(yù)期的結(jié)果。由于系統(tǒng)無(wú)法自動(dòng)檢測(cè)邏輯錯(cuò)誤,也沒(méi)有錯(cuò)誤提示信息,所以這類(lèi)錯(cuò)誤一般很難查找,需要對(duì)程序仔細(xì)檢查,通過(guò)測(cè)試和細(xì)致分析程序的執(zhí)行流程,才能定位錯(cuò)誤所在。例如,常見(jiàn)的“死循環(huán)”就屬于這類(lèi)錯(cuò)誤,程序始終無(wú)法跳出循環(huán)體,從而造成了“死循環(huán)”,可以通過(guò)按Ctrl+Break組合鍵來(lái)強(qiáng)行終止程序的執(zhí)行。再如,找出變量x和y兩個(gè)數(shù)中的最大數(shù),若錯(cuò)誤地寫(xiě)成“If x > y Then Print y”,顯然也不可能得到正確的結(jié)果。

        2.4 減少錯(cuò)誤的有效方法

        只要程序能夠執(zhí)行下去,計(jì)算機(jī)就會(huì)按照流程一條條地執(zhí)行語(yǔ)句,計(jì)算機(jī)本身并不能理解設(shè)計(jì)者的本意。為了有效防范程序錯(cuò)誤的產(chǎn)生,程序設(shè)計(jì)時(shí)要養(yǎng)成良好的編程習(xí)慣。例如:書(shū)寫(xiě)程序時(shí),采用逐層縮進(jìn)的規(guī)范化的語(yǔ)句格式;多加注釋?zhuān)阌诰幊探Y(jié)束后分析代碼時(shí),能更容易地理解這些代碼,降低錯(cuò)誤查找的難度;使用模塊化結(jié)構(gòu)設(shè)計(jì)代碼,為每個(gè)過(guò)程指定一個(gè)明確的功能目標(biāo),便于較容易地判斷出錯(cuò)誤所在的區(qū)域;聲明對(duì)象時(shí),盡可能不用Variant或籠統(tǒng)的Object數(shù)據(jù)類(lèi)型;設(shè)置Option Explicit強(qiáng)制變量說(shuō)明語(yǔ)句,以避免變量名的拼寫(xiě)錯(cuò)誤;在應(yīng)用程序中,對(duì)變量和對(duì)象使用前后一致的命名方法。這樣,可以盡可能地減少程序錯(cuò)誤發(fā)生的概率。

        3 程序的調(diào)試

        3.1 調(diào)試工具與中斷狀態(tài)

        設(shè)置自動(dòng)語(yǔ)法檢查:此項(xiàng)設(shè)置是Visual Basic的默認(rèn)設(shè)置,它能自動(dòng)檢查語(yǔ)法及編譯錯(cuò)誤。如果沒(méi)有設(shè)置,可以通過(guò)“工具”菜單中的“選項(xiàng)”,對(duì)話框中選擇“編輯器”選項(xiàng)卡,勾選“自動(dòng)語(yǔ)法檢測(cè)”即可。設(shè)置好后,一旦輸入的代碼有語(yǔ)法錯(cuò)誤,系統(tǒng)將自動(dòng)檢測(cè)到,彈出有關(guān)錯(cuò)誤的提示信息,這可以大大幫助編程者修正錯(cuò)誤。

        Visual Basic調(diào)試工具:使用調(diào)試工具,可便捷有效地檢查邏輯錯(cuò)誤產(chǎn)生的位置和原因,幫助編程者分析程序的運(yùn)行是如何進(jìn)行的。這些調(diào)試工具可以從“調(diào)試”菜單上選擇調(diào)用,Visual Basic還專(zhuān)門(mén)提供了一個(gè)用于程序調(diào)試的工具欄。如果該工具欄不可見(jiàn),可以選擇“視圖”菜單中的“工具”,然后單擊“調(diào)試”命令即可。調(diào)試工具欄中各按鈕與“調(diào)試”菜單中對(duì)應(yīng)的菜單命令功能一樣,用戶可利用該工具欄提供的便捷按鈕運(yùn)行要測(cè)試的程序、監(jiān)視變量和表達(dá)式的值、中斷程序的運(yùn)行、設(shè)置斷點(diǎn)、逐語(yǔ)句逐過(guò)程調(diào)試,這些調(diào)試功能可以幫助用戶處理程序中的邏輯錯(cuò)誤。

        中斷狀態(tài):中斷是指程序運(yùn)行時(shí)中途被停止,有的調(diào)試工具只能在中斷模式下才能使用。中斷狀態(tài)下,用戶可以查看各個(gè)變量及屬性的當(dāng)前值,還可以修改發(fā)生錯(cuò)誤的程序代碼,從而方便用戶對(duì)程序的調(diào)試。程序進(jìn)入中斷狀態(tài)一般有四種方式:程序在運(yùn)行過(guò)程中,由于發(fā)生錯(cuò)誤而進(jìn)入中斷狀態(tài);運(yùn)行狀態(tài)下,按下Ctrl+Break組合鍵或執(zhí)行“運(yùn)行”菜單中的“中斷”命令而進(jìn)入中斷狀態(tài);程序執(zhí)行到用戶在語(yǔ)句中創(chuàng)建的斷點(diǎn)處時(shí),進(jìn)入中斷狀態(tài);在使用單步(單語(yǔ)句單過(guò)程)執(zhí)行方式時(shí),每運(yùn)行一步可執(zhí)行代碼行后,即進(jìn)入中斷狀態(tài)。在糾正了程序的錯(cuò)誤之后,只要執(zhí)行“運(yùn)行”菜單中的“繼續(xù)”或“重新啟動(dòng)”等命令,可退出中斷狀態(tài)。

        3.2 斷點(diǎn)設(shè)置與單步調(diào)試

        斷點(diǎn)設(shè)置:為了調(diào)試程序,在程序中人為地添加一些暫停運(yùn)行的“斷點(diǎn)”,以便檢查程序的執(zhí)行情況。斷點(diǎn)通常安排在程序代碼中能反映程序執(zhí)行狀況的部位,比如循環(huán)等結(jié)構(gòu)語(yǔ)句的內(nèi)部。如果出現(xiàn)死循環(huán),為了確定出錯(cuò)原因,可以在循環(huán)體內(nèi)設(shè)置一個(gè)斷點(diǎn),每次執(zhí)行循環(huán)體時(shí)都會(huì)在斷點(diǎn)處引起中斷,這時(shí)就可以查看分析其中的變量變化情況,從而找出循環(huán)不能超越邊界值的原因。為了保證程序每個(gè)組成部分的正確性,可以在過(guò)程中設(shè)置斷點(diǎn),對(duì)某些過(guò)程進(jìn)行跟蹤檢查,設(shè)置斷點(diǎn)是檢查并排除邏輯錯(cuò)誤和比較復(fù)雜的運(yùn)行錯(cuò)誤的行之有效的手段。設(shè)置斷點(diǎn)的方法是,在代碼編輯窗口中,將光標(biāo)定位到打算作為斷點(diǎn)的語(yǔ)句上,單擊該行語(yǔ)句左側(cè)的灰色區(qū)域,出現(xiàn)一個(gè)暗紅色的圓點(diǎn),這就是斷點(diǎn),并且該行紅底反白顯示。若要清除已經(jīng)設(shè)置的斷點(diǎn),只需再次單擊該“圓點(diǎn)”,就可將該斷點(diǎn)取消。

        單步語(yǔ)句調(diào)試:即逐語(yǔ)句執(zhí)行程序,每次執(zhí)行一條語(yǔ)句,然后就發(fā)生中斷,因此可以逐個(gè)語(yǔ)句地檢查每條語(yǔ)句的執(zhí)行狀況。當(dāng)遇到過(guò)程調(diào)用時(shí),就進(jìn)入此過(guò)程繼續(xù)單步語(yǔ)句執(zhí)行。單步執(zhí)行程序時(shí),可以檢查程序中各變量的當(dāng)前實(shí)際值。要單步語(yǔ)句執(zhí)行程序,只要單擊調(diào)試工具欄中的“逐語(yǔ)句”按鈕,或者選擇“調(diào)試”菜單中的“逐語(yǔ)句”命令,或者按F8快捷鍵來(lái)實(shí)現(xiàn)。每單步執(zhí)行一條語(yǔ)句,在“代碼編輯器”窗口中,標(biāo)志下一個(gè)要執(zhí)行的語(yǔ)句的箭頭和彩色框也隨之向下移動(dòng)一條語(yǔ)句。由于逐語(yǔ)句執(zhí)行跟蹤了程序的控制流程,所以便于觀察條件語(yǔ)句的判斷結(jié)果和循環(huán)語(yǔ)句的邊界狀態(tài),以及程序能否正常終止等。

        單步過(guò)程調(diào)試:即逐過(guò)程執(zhí)行程序。當(dāng)單個(gè)過(guò)程可以確認(rèn)不存在錯(cuò)誤時(shí),則不必對(duì)該過(guò)程再進(jìn)行單步語(yǔ)句調(diào)試,而是直接執(zhí)行整個(gè)過(guò)程,這就是單步過(guò)程調(diào)試。逐過(guò)程執(zhí)行時(shí),逐條執(zhí)行每條語(yǔ)句,遇到過(guò)程調(diào)用時(shí),把被調(diào)用的過(guò)程當(dāng)作一個(gè)語(yǔ)句(即一個(gè)整體)來(lái)執(zhí)行,并不跟蹤到過(guò)程的內(nèi)部。要單步過(guò)程執(zhí)行程序,可以用單擊調(diào)試工具欄上的“逐過(guò)程”按鈕,或者執(zhí)行“調(diào)試”菜單中的“逐過(guò)程”命令,或者按Shift+F8快捷鍵來(lái)實(shí)現(xiàn)。

        3.3 使用調(diào)試窗口

        進(jìn)入中斷模式后,可打開(kāi)相關(guān)調(diào)試窗口,對(duì)變量、表達(dá)式以及對(duì)象的屬性進(jìn)行跟蹤觀察。

        “本地”窗口:本地窗口可以自動(dòng)顯示當(dāng)前過(guò)程中所有過(guò)程級(jí)變量的當(dāng)前值,若從一個(gè)過(guò)程進(jìn)入另一個(gè)過(guò)程,那么本地窗口的內(nèi)容會(huì)相應(yīng)更改為另一個(gè)過(guò)程中的過(guò)程級(jí)變量的取值情況?!氨镜亍贝翱谥械牡谝恍蠱e表示當(dāng)前窗體,用鼠標(biāo)單擊Me前面的“+”號(hào),可以將窗體及窗體中各控件對(duì)象的屬性“樹(shù)”展開(kāi),即可查看各個(gè)屬性的當(dāng)前值。此時(shí),常常用單步語(yǔ)句執(zhí)行的方式,隨時(shí)監(jiān)視過(guò)程中過(guò)程級(jí)變量的值和對(duì)象的屬性值的變化情況。單擊“視圖”菜單中的“本地窗口”,或單擊調(diào)試工具欄上的“本地窗口”按鈕,即可打開(kāi)“本地”窗口。

        “監(jiān)視”窗口:監(jiān)視窗口用于查看指定表達(dá)式的值,在監(jiān)視前先要添加被監(jiān)視的表達(dá)式。可以使用“調(diào)試”菜單中的“添加監(jiān)視”命令來(lái)指定“監(jiān)視表達(dá)式”,彈出的對(duì)話框中還可以指定監(jiān)視表達(dá)式所在的“過(guò)程”和“模塊”位置,以及監(jiān)視的類(lèi)型。選擇“調(diào)試”菜單中的“編輯監(jiān)視”命令,可以對(duì)監(jiān)視項(xiàng)進(jìn)行修改或刪除。當(dāng)應(yīng)用程序進(jìn)入中斷模式后,這些監(jiān)視表達(dá)式和它們的值就會(huì)出現(xiàn)在“監(jiān)視”窗口中。單擊“視圖”菜單中的“監(jiān)視窗口”,或單擊調(diào)試工具欄上的“監(jiān)視窗口”按鈕,都可以打開(kāi)“監(jiān)視”窗口。

        監(jiān)視窗口與本地窗口相比較優(yōu)點(diǎn)在于,監(jiān)視窗口可以在一個(gè)界面中查看所有過(guò)程中需監(jiān)測(cè)的表達(dá)式的值,而本地窗口主要查看當(dāng)前過(guò)程中的變量值。

        “立即”窗口:立即窗口可以顯示任何變量或表達(dá)式的值??梢栽诹⒓创翱谳斎氪a并立即執(zhí)行來(lái)獲取有關(guān)信息,如使用Print方法來(lái)顯示變量或?qū)傩曰虮磉_(dá)式的值,Print也可以用?代替。還可以在程序代碼中用Debug.Print語(yǔ)句,把輸出結(jié)果送到“立即”窗口中顯示。立即窗口是功能較為全面的查看變量或表達(dá)式的調(diào)試窗口,但每次查看時(shí)都需要手動(dòng)輸入,與其他兩種調(diào)試窗口相比略顯不便。

        4 結(jié)束語(yǔ)

        程序調(diào)試不能僅僅停留在理論層面上,一定要在具體的上機(jī)實(shí)踐中去摸索,不斷積累經(jīng)驗(yàn)。例如,理論上通常是設(shè)置斷點(diǎn),通過(guò)調(diào)試窗口跟蹤變量或表達(dá)式的變化情況;但在具體的程序設(shè)計(jì)中,還往往在代碼的適當(dāng)位置加一些臨時(shí)的輸出語(yǔ)句來(lái)觀察變量或表達(dá)式的值。再如,中斷模式下查看程序中變量、屬性或函數(shù)的值,我們最直接的方法是將鼠標(biāo)移到其上面放置不動(dòng),過(guò)一會(huì)屏幕便會(huì)自動(dòng)顯現(xiàn)出所指項(xiàng)目的數(shù)據(jù)提示。當(dāng)程序出錯(cuò)時(shí),我們還會(huì)增加相應(yīng)的出錯(cuò)處理程序來(lái)進(jìn)行處理。程序調(diào)試是一項(xiàng)細(xì)致而復(fù)雜的工作,掌握調(diào)試的技術(shù)并在實(shí)際中多應(yīng)用多探究,對(duì)快速發(fā)現(xiàn)并排除程序中的錯(cuò)誤,編寫(xiě)出高質(zhì)量的程序代碼會(huì)有很大的幫助。

        參考文獻(xiàn):

        [1] 劉模群. Visual Basic程序設(shè)計(jì)[M]. 杭州: 浙江大學(xué)出版社, 2013.

        [2] 宋翔. VB程序的調(diào)試和常見(jiàn)錯(cuò)誤的捕獲及錯(cuò)誤處理方法[J]. 陜西教育: 高教版, 2011(7-8): 208, 214.

        [3] 譚浩強(qiáng). Visual Basic程序設(shè)計(jì)[M]. 3版. 北京: 清華大學(xué)出版社, 2017.

        【通聯(lián)編輯:謝媛媛】

        猜你喜歡
        斷點(diǎn)
        一種適用于繼電保護(hù)在線整定的極小斷點(diǎn)集求取算法
        新能車(chē)屬性離散化的分辨矩陣和信息增益算法
        砂泥互層斷點(diǎn)組合類(lèi)型及其合理性分析
        ——以大慶長(zhǎng)垣薩爾圖油田為例
        用Eclipse調(diào)試Python
        一類(lèi)無(wú)限可能問(wèn)題的解法
        三維地震在新疆伊寧礦區(qū)北區(qū)七號(hào)礦井勘探的應(yīng)用
        主導(dǎo)電回路發(fā)生斷點(diǎn)故障判斷方法探討
        基于保護(hù)協(xié)調(diào)配合的最小斷點(diǎn)集選取方法
        TKScope仿真調(diào)試Cortex-M3內(nèi)核的高級(jí)手段
        基于Rough集的集成離散化算法
        亚洲精品午睡沙发系列| 欧美日韩一区二区三区在线观看视频| 日本边添边摸边做边爱| а√天堂8资源中文在线| 国产免费爽爽视频在线观看 | 一区二区三区极品少妇| 青青草视频原手机在线观看| 偷拍与自偷拍亚洲精品| 国产亚洲一区二区精品| 国内自拍速发福利免费在线观看| 亚洲av天堂免费在线观看| 亚洲午夜成人精品无码色欲| 国精产品推荐视频| 伦人伦xxxx国语对白| 热99精品| 久久精品国产屋| 偷柏自拍亚洲综合在线| 一区二区高清视频免费在线观看 | 六月婷婷久香在线视频| 精品国产精品久久一区免费式| 成人爽a毛片一区二区免费| 欧美zozo另类人禽交| 亚洲一区二区三区一站| 成人激情视频在线手机观看| 人妻少妇偷人精品免费看| 国产乱人激情h在线观看| 国产亚洲情侣一区二区无 | 国产精品狼人久久久久影院| 亚洲国产精品久久久久秋霞1| 爆乳午夜福利视频精品| 精品国产一区二区av麻豆不卡| 人妻久久一区二区三区| 小说区激情另类春色| 亚洲色无码国产精品网站可下载 | 中文字幕亚洲乱码熟女一区二区| 国产女高清在线看免费观看| 日韩精品人妻中文字幕有码| av免费在线播放观看| 国产七十六+老熟妇| 久久久精品久久波多野结衣av| 在线a人片免费观看国产|