在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

甲骨文嵌入式軟件開發測試的十條秘訣

5RJg_mcuworld ? 來源:YXQ ? 2019-08-06 14:11 ? 次閱讀

嵌入式軟件開發過程中,一般來說,花在測試和花在編碼的時間比為3:1(實際上可能更多)。這個比例隨著你的編程和測試水平的提高而不斷下降,但不論怎樣,軟件測試對一般人來講很重要。很多年前,一位開發人員為了對嵌入式有更深層次的理解,向Oracle詢問了這樣的一個問題:我怎么才能知道并懂得我的系統到底在干些什么呢?Oracle面對這個問題有些吃驚,因為在當時沒有人這么問過,而同時代的嵌入式開發人員問的最多的大都圍繞“我怎么才能使程序跑的更快”、“什么編譯器最好”等膚淺的問題。所以,面對這個不同尋常卻異乎成熟的問題,Oracle感到欣喜并認真回復了他:你的問題很有深度很成熟,因為只有不斷地去深入理解才有可能不斷地提高水平,并且Oracle為了鼓勵這位執著的程序員,把10條關于嵌入式軟件開發測試的秘訣告訴了他:

1.懂得使用工具

2.盡早發現內存問題

3.深入理解代碼優化

4.不要讓自己大海撈針

5.重現并隔離問題

6.以退為進

7.確定測試的完整性

8.提高代碼質量意味著節省時間

9.發現它,分析它,解決它

10.利用初學者的思維

這十條秘訣在業界廣為流傳,使很多人受益。本文圍繞這十條秘訣展開論述。

1.懂得使用工具

通常嵌入式系統對可靠性的要求比較高。嵌入式系統安全性的失效可能會導致災難性的后果,即使是非安全性系統,由于大批量生產也會導致嚴重的經濟損失。這就要求對嵌入式系統,包括嵌入式軟件進行嚴格的測試、確認和驗證。隨著越來越多的領域使用軟件和微處理器控制各種嵌入式設備,對門益復雜的嵌入式軟件進行快速有效的測試愈加顯得重要。

就象修車需要工具一樣,好的程序員應該能夠熟練運用各種軟件工具。不同的工具,有不同的使用范圍,有不同的功能。使用這些工具,你可以看到你的系統在干些什么,它又占用什么資源,它到底和哪些外界的東西打交道。讓你郁悶好幾天的問題可能通過某個工具就能輕松搞定,可惜你就是不知道。那么為什么那么多的人總是在折騰個半死之后才想到要用測試工具呢?原因很多,主要有兩個。一個是害怕,另一個是惰性。害怕是因為加入測試用具或測試模塊到代碼需要技巧同時有可能引入新的錯誤,所以他們總喜歡寄希望于通過不斷地修改重編譯代碼來消除bug,結果卻無濟于事。懶惰是因為他們習慣了使用printf之類的簡單測試手段。下面來介紹一些嵌入式常用的測試工具。

.源碼級調試器[Source-level Debugger]

這種調試器一般提供單步或多步調試、斷點設置、內存檢測、變量查看等功能,是嵌入式調試最根本有效的調試方法。比如VxWorks TornadoII提供的gdb就屬于這一種。

.簡單實用的打印顯示工具[printf]

printf或其它類似的打印顯示工具估計是最靈活最簡單的調試工具。打印代碼執行過程中的各種變量可以讓你知道代碼執行的情況。但是,printf對正常的代碼執行干擾比較大(一般printf占用CPU比較長的時間),需要慎重使用,最好設置打印開關來控制打印。

.ICE或JTAG調試器[In-circuit Emulator]

ICE是用來仿真CPU核心的設備,它可以在不干擾運算器的正常運行情況下,實時的檢測CPU的內部工作情況。像桌面調試軟件所提供的:復雜的條件斷點、先進的實時跟蹤、性能分析和端口分析這些功能,它也都能提供。ICE一般都有一個比較特殊的CPU,稱為外合(bond-out)CPU。這是一種被打開了封裝的CPU,并且通過特殊的連接,可以訪問到CPU的內部信號,而這些信號,在CPU被封裝時,是沒法“看到”的。當和工作站上強大的調試軟件聯合使用時,ICE就能提供你所能找到的最全面的調試功能。但ICE同樣有一些缺點:昂貴;不能全速工作;同樣,并不是所有的CPU都可以作為外合CPU的,從另一個角度說,這些外合CPU也不大可能及時的被新出的CPU所更換。JTAG(Joint Test Action Group)雖然它最初開發出來是為了監測IC和電路連接,但是這種串行接口擴展了用途,包括對調試的支持。AD公司為Blackfin設計的Visual Dsp++就支持高速的JTAG調試。

.ROM監視器[ROM Monitor]

ROM監控器是一小程序,駐留在嵌入系統ROM中,通過串行的或網絡的連接和運行在工作站上的調試軟件通信。這是一種便宜的方式,當然也是最低端的技術。它除了要求一個通信端口和少量的內存空間外,不需要其它任何專門的硬件。并提供了如下功能:下載代碼、運行控制、斷點、單步步進、以及觀察、修改寄存器和內存。因為ROM監控器是操作軟件的一部分,只有當你的應用程序運行時,它才會工作。如果你想檢查CPU和應用程序的狀態,你就必須停下應用程序,再次進入ROM監控器。

.Data監視器[Data Monitor]

這種監視器在不停止CPU運行的情況下不僅可以顯示指定變量內容,還可以收集并以圖形形式顯示各個變量的變化過程。

.OS監視器[Operating System Monitor]

操作系統監視器可以顯示諸如任務切換、信號量收發、中斷等事件。一方面,這些監視器能夠為你呈現事件之間的關系和時間聯系;另一方面,還可以提供對信號量優先級反轉、死鎖和中斷延時等問題的診斷。

.性能分析工具[Profiler]

可以用來測試CPU到底耗在那里。profiler工具可以讓你知道系統的瓶頸在那里、CPU的使用率以及需要優化的地方。

.內存測試工具[Memory Teseter]

可以找到內存使用的問題所在,比如內存泄露、內存碎片、內存崩潰等問題。如果發現系統出現一些不可預知的或間歇性的問題,就應該使用內存測試工具測測看。

.運行跟蹤器[Execution Tracer]

可以顯示CPU執行了哪些函數、誰在調用、參數是什么、何時調用等情況。這種工具主要用于測試代碼邏輯,可以在大量的事件中發現異常的那些。

.覆蓋工具[Coverage Tester]

主要顯示CPU具體執行了那些代碼,并讓你知道那些代碼分支沒有被執行到。這樣有助于提高代碼質量并消除無用代碼。

.GUI測試工具[GUI Tester]

很多嵌入式應用帶有某種形式的圖形用戶界面進行交互,有些系統性能測試足根掘用戶輸入響應時間進行的。GUI測試工具可以作為腳本工具有開發環境中運行測試用例,其功能包括對操作的記錄和回放、抓取屏幕顯示供以后分析和比較、設置和管理測試過程(Rational公司的robot和Mercury的Loadrunner工具是杰出的代表)。很多嵌入式設備沒有GUI,但常常可以對嵌入式設備進行插裝來運行GUI測試腳本,雖然這種方式可能要求對被測代碼進行更改,但是節省了功能測試和回歸測試的時間。

.自制工具[Home-made tester]

在嵌入式應用中,有時候為了特定的目的,需要自行編寫一些工具來達到某種測試目的。本人曾經編寫的視頻流錄顯工具在測試視頻會議數據流向和變化上幫了大忙,幫公司找到了幾個隱藏很深的bug。

2.盡早發現內存問題

內存問題危害很大,不容易排查,主要有三種類型:內存泄露、內存碎片和內存崩潰。對于內存問題態度必須要明確,那就是早發現早“治療”。在軟件設計中,內存泄露的“名氣”最大,主要由于不斷分配的內存無法及時地被釋放,久而久之,系統的內存耗盡。即使細心的編程老手有時后也會遭遇內存泄露問題。有測試過內存泄露的朋友估計都有深刻地體驗,那就是內存泄露問題一般隱藏很深,很難通過代碼閱讀來發現。有些內存泄露甚至可能出現在庫當中。有可能這本身是庫中的bug,也有可能是因為程序員沒有正確理解它們的接口說明文檔造成錯用。

在很多時候,大多數的內存泄露問題無法探測,但可能表現為隨機的故障。程序員們往往會把這種現象怪罪于硬件問題。如果用戶對系統穩定性不是很高,那么重啟系統問題也不大;但,如果用戶對系統穩定很高,那么這種故障就有可能使用戶對產品失去信心,同時也意味著你的項目是個失敗的項目。由于內存泄露危害巨大,現在已經有許多工具來解決這個問題。這些工具通過查找沒有引用或重復使用的代碼塊、垃圾內存收集、庫跟蹤等技術來發現內存泄露的問題。每個工具都有利有弊,不過總的來說,用要比不用好。總之,負責的開發人員應該去測試內存泄露的問題,做到防患于未然。

內存碎片比內存泄露隱藏還要深。隨著內存的不斷分配并釋放,大塊內存不斷分解為小塊內存,從而形成碎片,久而久之,當需要申請大塊內存是,有可能就會失敗。如果系統內存夠大,那么堅持的時間會長一些,但最終還是逃不出分配失敗的厄運。在使用動態分配的系統中,內存碎片經常發生。目前,解決這個問題最效的方法就是使用工具通過顯示系統中內存的使用情況來發現誰是導致內存碎片的罪魁禍首,然后改進相應的部分。

由于動態內存管理的種種問題,在嵌入式應用中,很多公司干脆就禁用malloc/free的以絕后患。

內存崩潰是內存使用最嚴重的結果,主要原因有數組訪問越界、寫已經釋放的內存、指針計算錯誤、訪問堆棧地址越界等等。這種內存崩潰造成系統故障是隨機的,而且很難查找,目前提供用于排查的工具也很少。

總之,如果要使用內存管理單元的話,必須要小心,并嚴格遵守它們的使用規則,比如誰分配誰釋放。

3.深入理解代碼優化

講到系統穩定性,人們更多地會想到實時性和速度,因為代碼效率對嵌入式系統來說太重要了。知道怎么優化代碼是每個嵌入式軟件開發人員必須具備的技能。就象女孩子減肥一樣,起碼知道她哪個地方最需要減,才能去購買減肥藥或器材來減掉它。可見,代碼優化的前提是找到真正需要優化的地方,然后對癥下藥,優化相應部分的代碼。前面提到的profile(性能分析工具,一些功能齊全IDE都提供這種內置的工具)能夠記錄各種情況比如各個任務的CPU占用率、各個任務的優先級是否分配妥當、某個數據被拷貝了多少次、訪問磁盤多少次、是否調用了網絡收發的程序、測試代碼是否已經關閉等等。

但是,profile工具在分析實時系統性能方面還是有不夠的地方。一方面,人們使用profile工具往往是在系統出現問題即CPU耗盡之后,而profile工具本身對CPU占用較大,所以profile對這種情況很可能不起作用。根據Heisenberg效應,任何測試手段或多或少都會改變系統運行,這個對profiler同樣適用!

總之,提高運行效率的前提是你必須要知道CPU到底干了些什么干的怎么樣。

4.不要讓自己大海撈針

大海撈針只是對調試的一種生動比喻。

經常聽到組里有人對自己正在調試的代碼說shit!可以理解,因為代碼不是他寫的,他有足夠的理由去shit bug百出的代碼,只要他自己不要寫出這種代碼,否則有一天同組的其它人可能同樣會shit他寫的代碼。為何會有大海撈針呢?肯定是有人把針掉到海里咯;那針為何會掉在海里呢?肯定是有人不小心或草率唄。所以當你在抱怨針那么難找的時候,你是否想過是你自己草率地丟掉的。同樣,當你調試個半死的時候,你是否想過你要好好反省一下當初為了尋求捷徑可能沒有嚴格地遵守好的編碼設計規范、沒有檢測一些假設條件或算法的正確性、沒有將一些可能存在問題的代碼打上記號呢?關于如何寫高質量請參考林銳的《高質量c++/c編程指南》或《關于C的0x8本“經書”》。

如果你確實已經把針掉在海里是,為了防止在找到之前刺到自己,你必須要做一些防范工作,比如戴上安全手套。同樣,為了盡能地暴露和捕捉問題根源,我們可以設計比較全面的錯誤跟蹤代碼。怎么來做呢?盡可能對每個函數調用失敗作出處理,盡可能檢測每個參數輸入輸出的有效性包括指針以及檢測是否過多或過少地調用某個過程。錯誤跟蹤能夠讓你知道你大概把針掉在哪個位置。

5.重現并隔離問題

如果你不是把針掉在大海了,而是掉在草堆里,那要好辦寫。因為至少我們可以把草堆分成很多塊,一塊一塊的找。對于模塊獨立的大型項目,使用隔離方法往往是對付那些隱藏極深bug的最后方法。如果問題的出現是間歇性的,我們有必要設法去重現它并記錄使其重現的整個過程以備在下一次可以利用這些條件去重現問題。如果你確信可以使用記錄的那些條件去重現問題,那么我們就可以著手去隔離問題。怎么隔離呢?我們可以用#ifdef把一些可能和問題無關的代碼關閉,把系統最小化到仍能夠重現問題的地步。如果還是無法定位問題所在,那么有必要打開“工具箱”了。可以試著用ICE或數據監視器去查看某個可疑變量的變化;可以使用跟蹤工具獲得函數調用的情況包括參數的傳遞;檢查內存是否崩潰以及堆棧溢出的問題。

6.以退為進

獵人為了不使自己在森林里迷路,他常常會在樹木上流下一些標記,以備自己將來有一天迷路時可以根據這些標記找到出路。對過去代碼的修改進行跟蹤記錄對將來出現問題之后的調試很有幫助。假如有一天,你最近一次修改的程序跑了很久之后忽然死掉了,那么你這時的第一反映就是我到底改動了些什么呢,因為上次修改之前是好的。那么如何檢測這次相對于上次的修改呢?沒錯,代碼控制系統SCS或稱版本控制系統VCS(Concurrent Version Control,CVS是VCS的演化版本)。將上個版本check in下來后和當前測試版本比較。比較的工具可以是SCS/VCS/CVS自帶的diff工具或其它功能更強的比較工具,比如BeyondCompare和ExamDiff。通過比較,記錄所有改動的代碼,分析所有可能導致問題的可疑代碼。

7.確定測試的完整性

你怎么知道你的測試有多全面呢?覆蓋測試(coverage testing)可以回答這個問題。覆蓋測試工具可以告訴你CPU到底執行了那些代碼。好的覆蓋工具通常可以告訴你大概20%到40%代碼沒有問題,而其余的可能存在bug。覆蓋工具有不同的測試級別,用戶可以根據自己的需要選擇某個級別。即使你很確信你的單元測試已經很全面并且沒有dead code,覆蓋工具還是可以為你指出一些潛在的問題,看下面的代碼:

if (i >= 0 && (almostAlwaysZero == 0 || (last = i)))

如果almostAlwaysZero為非0,那么last="i"賦值語句就被跳過,這可能不是你所期望的。這種問題通過覆蓋工具的條件測試功能可以輕松的被發現。

總之,覆蓋測試對于提高代碼質量很有幫助。

8.提高代碼質量意味著節省時間

有研究表明軟件開發的時間超過80%被用在下面幾個方面:

.調試自己的代碼(單元測試)

.調試自己和其他相關的代碼(模塊間測試)

.調試整個系統(系統測試)

更糟糕的是你可能需要花費10-200倍的時間來找一個bug,而這個bug在開始的時候可能很容易就能找到。一個小bug可能讓你付出巨大的代價,即使這個bug對整個系統的性能沒有太大的影響,但很可能會影響讓那些你可以看得到的部分。所以我們必須要養成良好的編碼和測試手段以求更高的代碼質量,以便縮短調試的代碼。

9.發現它,分析它,解決它

這世界沒有萬能的膏藥。profile再強大也有力不從心的時候;內存監視器再好,也有無法發現的時候;覆蓋工具再好用,也有不能覆蓋的地方。一些隱藏很深的問題即使用盡所有工具也有可能無法查到其根源,這時我們能做的就是通過這些問題所表現出來的外在現象或一些數據輸出來發現其中的規律或異常。一旦發現任何異常,一定要深入地理解并回溯其根源,直到解決為止。

10.利用初學者的思維

有人這樣說過:“有些事情在初學者的腦子里可能有各種各樣的情況,可在專家的頭腦里可能就很單一”。有時候,有些簡單的問題會被想的很復雜,有些簡單的系統別設計的很復雜,就是由于你的“專家思維”。當你被問題難住時,關掉電腦,出去走走,把你的問題和你的朋友甚至你的小狗說說,或許他們可以給你意想不到的啟發。

總結:嵌入式調試也是一門藝術。就想其它的藝術一樣,如果你想取得成功,你必須具備智慧、經驗并懂得使用工具。只要我們能夠很好地領悟Oracle這十條秘訣,我相信我們在嵌入式測試方面就能夠取得成功。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 嵌入式
    +關注

    關注

    5085

    文章

    19138

    瀏覽量

    305778
  • 甲骨文
    +關注

    關注

    0

    文章

    114

    瀏覽量

    16149

原文標題:Oracle的嵌入式軟件測試的十大秘籍!

文章出處:【微信號:mcuworld,微信公眾號:嵌入式資訊精選】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    了解嵌入式軟件開發的對象

    以前應用場景很單一,嵌入式開發可能談不上面向對象開發。但現在,做嵌入式開發,沒有面向對象開發,你就有點落伍了。 本文結合個人經驗和周立功《抽象接口技術和組件
    的頭像 發表于 11-15 10:31 ?363次閱讀
    一<b class='flag-5'>文</b>了解<b class='flag-5'>嵌入式</b><b class='flag-5'>軟件開發</b>的對象

    甲骨文:以AI為中心的基礎架構賦能企業級生成應用開發

    在今年的甲骨文全球云大會上,甲骨文公司推出了一款面向企業的創新開發基礎設施——GenDev(Generative Development for Enterprise)。這款基礎設施旨在通過前沿
    的頭像 發表于 10-23 15:17 ?365次閱讀

    甲骨文發布Java 23

    全球領先的軟件開發企業甲骨文(Oracle)近日隆重宣布推出Java 23(Oracle JDK 23),這一里程碑的更新標志著全球排名第一的編程語言和開發平臺再次邁出堅實步伐。Ja
    的頭像 發表于 09-19 16:36 ?379次閱讀

    你認為嵌入式軟件開發的盡頭是什么?

    嵌入式軟件開發的“盡頭”是一個富有哲理且多維度的概念,因為它不僅關乎技術發展的極限,還涉及到行業應用、市場需求、技術融合與創新等多個方面。從幾個不同的視角來看
    的頭像 發表于 09-18 09:42 ?475次閱讀
    你認為<b class='flag-5'>嵌入式</b><b class='flag-5'>軟件開發</b>的盡頭是什么?

    嵌入式軟件開發與AI整合

    嵌入式軟件開發與AI整合是當前技術發展的重要趨勢之一。隨著人工智能技術的快速發展,嵌入式系統越來越多地集成了AI算法,以實現更復雜的智能功能。以下是關于嵌入式
    的頭像 發表于 07-31 09:25 ?729次閱讀
    <b class='flag-5'>嵌入式</b><b class='flag-5'>軟件開發</b>與AI整合

    甲骨文攜手Rai Way,強化AI應用與數據安全

    近日,全球領先的軟件巨頭甲骨文與意大利基礎設施服務提供商Rai Way宣布達成重要合作。雙方將攜手在Rai Way分布廣泛的數據中心部署甲骨文的人工智能應用系統,為企業客戶帶來前所未有的服務體驗與安全保障。
    的頭像 發表于 07-27 17:19 ?2190次閱讀

    甲骨文、微軟和OpenAl達成合作

    近日,科技巨頭甲骨文(Oracle)、微軟(Microsoft)和人工智能領域的佼佼者OpenAI宣布了一項令人矚目的合作。根據合作協議,微軟將把其領先的Azure人工智能平臺擴展到甲骨文的云基礎設施(OCI)上,為OpenAI提供前所未有的計算容量,共同推動人工智能技術
    的頭像 發表于 06-13 16:52 ?812次閱讀

    甲骨文與谷歌云建立合作伙伴

    近日,全球領先的數據庫和云技術提供商甲骨文(Oracle)與谷歌云(Google Cloud)共同宣布建立了一項意義深遠的合作伙伴關系。這一戰略聯盟旨在為客戶提供結合了甲骨文云基礎設施(OCI)與谷歌云技術的獨特解決方案,以支持企業加速應用程序的遷移和現代化進程。
    的頭像 發表于 06-12 17:22 ?929次閱讀

    甲骨文、微軟與OpenAI攜手,共創AI新紀元

    在數字化浪潮洶涌澎湃的當下,人工智能(AI)已成為推動科技進步和社會發展的重要力量。近日,甲骨文(Oracle)、微軟(Microsoft)與OpenAI宣布了一項引人注目的合作,旨在將微軟
    的頭像 發表于 06-12 15:08 ?527次閱讀

    馬斯克旗下xAI與甲骨文達成100億美元服務器租用協議

    據消息透露,馬斯克的人工智能初創公司xAI正與甲骨文進行深度談判。據悉,xAI計劃在未來幾年內斥資100億美元從甲骨文租用云服務器,此舉將使xAI成為甲骨文的重要客戶之一。
    的頭像 發表于 05-16 10:06 ?379次閱讀

    甲骨文發布AI編程助手,助用戶編寫Java、SQL程序

    據悉,Oracle Code Assist基于甲骨文先進的云計算平臺——Oracle Cloud Infrastructure (OCI)構建,重點優化各項Java、SQL程序以及OCI應用開發環節。
    的頭像 發表于 05-13 10:19 ?566次閱讀

    AMD Vitis? Embedded嵌入式軟件開發套件的功能和特性概述

    Vitis Embedded 是一款獨立的嵌入式軟件開發套件,主要用于為 AMD 自適應 SoC 和 FPGA 中的 AMD 嵌入式處理子系統(基于 ARM 的子系統和 AMD MicroBlaze)
    的頭像 發表于 04-08 10:50 ?938次閱讀
    AMD Vitis? Embedded<b class='flag-5'>嵌入式</b><b class='flag-5'>軟件開發</b>套件的功能和特性概述

    嵌入式軟件設計的原則分享

    嵌入式軟件開發如果具有更好的閱讀性、擴展性以及維護性,就需要考慮很多因素。今天給大家分享幾個嵌入式軟件設計的原則。
    發表于 02-25 10:54 ?697次閱讀
    <b class='flag-5'>嵌入式</b><b class='flag-5'>軟件</b>設計的原則分享

    嵌入式軟件開發應該掌握哪些知識?

    嵌入式軟件開發應該掌握哪些知識? 一、 什么是嵌入式軟件嵌入式軟件通常是指
    發表于 02-19 11:23

    嵌入式軟件開發軟件開發的區別

    嵌入式軟件開發軟件開發是兩個不同的概念,它們在一些關鍵方面有著明顯的區別。嵌入式軟件開發是指開發
    的頭像 發表于 01-22 15:27 ?2329次閱讀
    主站蜘蛛池模板: 久久综合色视频| 午夜精品久久久久久91| 欧美午夜小视频| 欧美人与动性xxxxbbbb| 侵犯希崎中文字幕在线| 欧美精品videosex极品| 久久夜色精品国产尤物| 国内自拍 亚洲系列 欧美系列| 国产综合图片| 1024视频色版在线网站| 午夜影院免费观看视频| 人人艹人人射| 影院在线观看免费| 亚洲男人的性天堂| 最近新韩国hd视频| 亚洲 欧美 日韩 综合| 色视频在线观看在线播放| 欧美人成在线观看| 韩国十八禁毛片无遮挡| japan高清视频乱xxxxx| 天天爽夜夜爽精品免费| 黄色免费看网站| 57pao强力打造免费高清高速| 欧美a网站| 婷婷99精品国产97久久综合| 欧美一级三级在线观看| 国产一级特黄| 五月欧美激激激综合网色播| 黄色网网址| 亚洲精品成人网| 性无码专区无码| 欧美日韩一区二区三区视视频| 狠狠色丁香婷婷综合最新地址| 亚洲vv| jlzz日本| 国产亚洲欧美一区二区| 色多多视频官网| 国产精品高清一区二区三区| 天天拍天天干| 黑人xxxx精品| 香蕉爱爱视频|