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

分析程序員在代碼編程中的“末行效應(yīng)”

開發(fā) 后端 前端
我研究過數(shù)百個因“拷貝-粘貼”導(dǎo)致的錯誤。可以肯定的是,程序員常常會在一大段代碼的最后一段里犯錯。好像還沒有任何編程書討論過這種現(xiàn)象,因此我決定自己寫點什么。我稱之為“末行效應(yīng)”。

我研究過數(shù)百個因“拷貝-粘貼”導(dǎo)致的錯誤。可以肯定的是,程序員常常會在一大段代碼的***一段里犯錯。好像還沒有任何編程書討論過這種現(xiàn)象,因此我決定自己寫點什么。我稱之為“末行效應(yīng)”。

[[122874]]

我叫Andrey Karpov,我的工作有點不尋常:我借助靜態(tài)分析工具研究各種應(yīng)用程序代碼,并描述從中找到的錯誤或者缺陷。我這么做既有實際效益也因為工作需要。使用的方法正是基于我們公司所推廣的PVS-Studio和CppCat工具的原理。套路很簡單:找bug,然后寫文章分析bug,文章吸引到潛在用戶的注意,接著就是收益。但今天這篇文章不是介紹這些工具的。

在分析各種軟件項目的過程中,我把找到的bug以及相關(guān)代碼存入一個特殊的數(shù)據(jù)庫。順便說一下,有興趣的話各位可以看一看這個數(shù)據(jù)庫。我們把它轉(zhuǎn)換成網(wǎng)頁格式并上傳到了公司網(wǎng)站的“Detected errors”欄下。

這個數(shù)據(jù)庫***!目前它收錄了1500塊問題代碼片,正等著程序員們?nèi)パ芯浚瑥闹锌偨Y(jié)出特定規(guī)律。為將來的研究,手冊和文章奠定一個基礎(chǔ)。

我還沒認真地分析過目前搜集到的材料。但是過程中我發(fā)現(xiàn)有一個明顯的模式反復(fù)出現(xiàn),決定深入研究一下。你大概看到了,文中我反復(fù)使用短語“注意***一行”。在我看來,這一定有某種規(guī)律。

末行效應(yīng)

編程的時候,程序員常常需要寫一系列相似的結(jié)構(gòu)。逐行敲鍵盤輸入無聊且低效。這就是為什么他們會使用奧義-“拷貝-粘貼”大法:一段代碼被拷貝粘貼幾次,然后修改。誰都知道這樣做的壞處:你很容易在粘貼后忘記修改某些內(nèi)容***滋生出問題。不幸的是,常常找不到比這更好的方法。

那么我發(fā)現(xiàn)了什么規(guī)律呢?我發(fā)現(xiàn)錯誤常常發(fā)生在***的一塊粘貼代碼里。

下面是一個簡短的例子:

  1. inline Vector3int32& operator+=(const Vector3int32& other) { 
  2.   x += other.x; 
  3.   y += other.y; 
  4.   z += other.y; 
  5.   return *this

注意這一行:”z += other.y;”。程序員忘記把‘y’替換成‘z’了。

也許你以為這是個假設(shè)的例子,然后它其實來自一個真實的應(yīng)用程序。接下來,我會讓你相信這是高頻常見的一種錯誤。程序員們經(jīng)常在一連串相似操作的結(jié)尾犯這種錯誤。

我聽說攀巖者常常在***的幾十米中滑落下來。并不是因為他們累了,而正是由于他們對即將到達的終點過于興奮,他們想象著成功后的喜悅,變得疏忽大意,***失足。我猜想程序員們也是這樣的。

接下來看一組數(shù)據(jù)。

研究了數(shù)據(jù)庫后,我分離出了84個代碼段由“拷貝-粘貼”大法生成。其中41段中錯誤發(fā)生在中間的某些粘貼塊。比如:

  1. strncmp(argv[argidx], "CAT="4) && 
  2. strncmp(argv[argidx], "DECOY="6) && 
  3. strncmp(argv[argidx], "THREADS="6) && 
  4. strncmp(argv[argidx], "MINPROB="8)) { 

“THREADS=”字符串的長度是8個字符,而非6。

另外的43段代碼中,錯誤發(fā)生在***的粘貼塊。

當然,43比41大不了多少。但是請注意,一段程序中,可能有很多類似的代碼塊,因此錯誤可能發(fā)生在***,第二,第五甚至第十塊中。因此在其他代碼塊中我們有一個相對均勻的分布,而***一塊卻存在一個峰值。

平均而言,相似代碼塊總數(shù)為5。

于是前面4個代碼塊中均勻分布了41處錯誤,平均每塊代碼有10個錯誤。

然而***一塊代碼中有43個錯誤!

下面的分布概圖凸顯出這個現(xiàn)象:

[[122875]]

圖1. 五塊類似代碼段中的錯誤分布概圖

因此我們可以總結(jié)出一個規(guī)律:

在最末的粘貼代碼塊中出錯的概率是其他代碼塊的4倍。

這個規(guī)律可能并沒有普適性。它只是個有趣的發(fā)現(xiàn),其實際效用在于:提醒在你寫***一塊的時候保持警覺。

實例:

下面我要證明這并不是我的胡思亂想而是有真實的趨勢的。請看下面的實例。

當然,我不會列出所有例子,僅列舉簡單而有代表性的。

Source Engine SDK

  1. inline void Init( float ix=0float iy=0
  2.                   float iz=0float iw = 0 )  
  3.   SetX( ix ); 
  4.   SetY( iy ); 
  5.   SetZ( iz ); 
  6.   SetZ( iw ); 

***一行應(yīng)該是SetW()。

Chromium

  1. if (access & FILE_WRITE_ATTRIBUTES) 
  2.   output.append(ASCIIToUTF16("\tFILE_WRITE_ATTRIBUTES\n")); 
  3. if (access & FILE_WRITE_DATA) 
  4.   output.append(ASCIIToUTF16("\tFILE_WRITE_DATA\n")); 
  5. if (access & FILE_WRITE_EA) 
  6.   output.append(ASCIIToUTF16("\tFILE_WRITE_EA\n")); 
  7. if (access & FILE_WRITE_EA) 
  8.   output.append(ASCIIToUTF16("\tFILE_WRITE_EA\n")); 
  9. break

***兩行相同。

ReactOS

  1. if (*ScanString == L'\"' || 
  2.     *ScanString == L'^' || 
  3.     *ScanString == L'\"'

Multi Theft Auto

  1. class CWaterPolySAInterface 
  2. public
  3.     WORD m_wVertexIDs[3]; 
  4. }; 
  5. CWaterPoly* CWaterManagerSA::CreateQuad (....) 
  6.   .... 
  7.   pInterface->m_wVertexIDs [ 0 ] = pV1->GetID (); 
  8.   pInterface->m_wVertexIDs [ 1 ] = pV2->GetID (); 
  9.   pInterface->m_wVertexIDs [ 2 ] = pV3->GetID (); 
  10.   pInterface->m_wVertexIDs [ 3 ] = pV4->GetID (); 
  11.   .... 

***一行冗余代碼來自于慣性粘貼。數(shù)組的大小是3。

Source Engine SDK

  1. intens.x=OrSIMD(AndSIMD(BackgroundColor.x,no_hit_mask), 
  2.                 AndNotSIMD(no_hit_mask,intens.x)); 
  3. intens.y=OrSIMD(AndSIMD(BackgroundColor.y,no_hit_mask), 
  4.                 AndNotSIMD(no_hit_mask,intens.y)); 
  5. intens.z=OrSIMD(AndSIMD(BackgroundColor.y,no_hit_mask), 
  6.                 AndNotSIMD(no_hit_mask,intens.z)); 

程序員忘記把***一行的中的“BackgroundColor.y”改成“BackgroundColor.z”。

#p#

Trans-Proteomic Pipeline

  1. void setPepMaxProb(....) 
  2. {   
  3.   .... 
  4.   double max4 = 0.0
  5.   double max5 = 0.0
  6.   double max6 = 0.0
  7.   double max7 = 0.0
  8.   .... 
  9.   if ( pep3 ) { ... if ( use_joint_probs && prob > max3 ) ... } 
  10.   .... 
  11.   if ( pep4 ) { ... if ( use_joint_probs && prob > max4 ) ... } 
  12.   .... 
  13.   if ( pep5 ) { ... if ( use_joint_probs && prob > max5 ) ... } 
  14.   .... 
  15.   if ( pep6 ) { ... if ( use_joint_probs && prob > max6 ) ... } 
  16.   .... 
  17.   if ( pep7 ) { ... if ( use_joint_probs && prob > max6 ) ... } 
  18.   .... 

程序員忘記把***一個判斷中的“prob > max6”改為“prob > max7”。

SeqAn

  1. inline typename Value<Pipe>::Type const & operator*() { 
  2.   tmp.i1 = *in.in1; 
  3.   tmp.i2 = *in.in2; 
  4.   tmp.i3 = *in.in2; 
  5.   return tmp; 

SlimDX

  1. forint i = 0; i < 2; i++ ) 
  2.   sliders[i] = joystate.rglSlider[i]; 
  3.   asliders[i] = joystate.rglASlider[i]; 
  4.   vsliders[i] = joystate.rglVSlider[i]; 
  5.   fsliders[i] = joystate.rglVSlider[i]; 

***一行應(yīng)該用rglFSlider。

Qt

  1. if (repetition == QStringLiteral("repeat") || 
  2.     repetition.isEmpty()) { 
  3.   pattern->patternRepeatX = true
  4.   pattern->patternRepeatY = true
  5. else if (repetition == QStringLiteral("repeat-x")) { 
  6.   pattern->patternRepeatX = true
  7. else if (repetition == QStringLiteral("repeat-y")) { 
  8.   pattern->patternRepeatY = true
  9. else if (repetition == QStringLiteral("no-repeat")) { 
  10.   pattern->patternRepeatY = false
  11.   pattern->patternRepeatY = false
  12. else { 
  13.   //TODO: exception: SYNTAX_ERR 

***一塊少了‘patternRepeatX’。正確的代碼應(yīng)該是:

  1. pattern->patternRepeatX = false
  2. pattern->patternRepeatY = false

ReactOS

  1. const int istride = sizeof(tmp[0]) / sizeof(tmp[0][0][0]); 
  2. const int jstride = sizeof(tmp[0][0]) / sizeof(tmp[0][0][0]); 
  3. const int mistride = sizeof(mag[0]) / sizeof(mag[0][0]); 
  4. const int mjstride = sizeof(mag[0][0]) / sizeof(mag[0][0]); 

‘mjstride’永遠等于1。***一行應(yīng)該是:

  1. const int mjstride = sizeof(mag[0][0]) / sizeof(mag[0][0][0]); 

Mozilla Firefox

  1. if (protocol.EqualsIgnoreCase("http") || 
  2.     protocol.EqualsIgnoreCase("https") || 
  3.     protocol.EqualsIgnoreCase("news") || 
  4.     protocol.EqualsIgnoreCase("ftp") ||          <<<--- 
  5.     protocol.EqualsIgnoreCase("file") || 
  6.     protocol.EqualsIgnoreCase("javascript") || 
  7.     protocol.EqualsIgnoreCase("ftp")) {          <<<--- 

***的“ftp”很可疑,它之前已經(jīng)被比較過了。

Quake-III-Arena

  1. if (fabs(dir[0]) > test->radius || 
  2.     fabs(dir[1]) > test->radius || 
  3.     fabs(dir[1]) > test->radius) 

dir[2]的值忘記檢查了。

Clang

  1. return (ContainerBegLine <= ContaineeBegLine && 
  2.         ContainerEndLine <= ContaineeEndLine && 
  3.         (ContainerBegLine != ContaineeBegLine || 
  4.          SM.getExpansionColumnNumber(ContainerRBeg) <= 
  5.          SM.getExpansionColumnNumber(ContaineeRBeg)) && 
  6.         (ContainerEndLine != ContaineeEndLine || 
  7.          SM.getExpansionColumnNumber(ContainerREnd) >= 
  8.          SM.getExpansionColumnNumber(ContainerREnd))); 

***一塊,“SM.getExpansionColumnNumber(ContainerREnd)”表達式在跟自己比較大小。

MongoDB

  1. bool operator==(const MemberCfg& r) const { 
  2.   .... 
  3.   return _id==r._id && votes == r.votes && 
  4.          h == r.h && priority == r.priority && 
  5.          arbiterOnly == r.arbiterOnly && 
  6.          slaveDelay == r.slaveDelay && 
  7.          hidden == r.hidden && 
  8.          buildIndexes == buildIndexes; 

程序員把***一行的“r”忘記了。

Unreal Engine 4

  1. static bool PositionIsInside(....) 
  2.   return 
  3.     Position.X >= Control.Center.X - BoxSize.X * 0.5f && 
  4.     Position.X <= Control.Center.X + BoxSize.X * 0.5f && 
  5.     Position.Y >= Control.Center.Y - BoxSize.Y * 0.5f && 
  6.     Position.Y >= Control.Center.Y - BoxSize.Y * 0.5f; 

***一行中,程序員忘記了兩個地方。首先,“>=”應(yīng)改為“<=”,其次,減號應(yīng)改為加號。

Qt

  1. qreal x = ctx->callData->args[0].toNumber(); 
  2. qreal y = ctx->callData->args[1].toNumber(); 
  3. qreal w = ctx->callData->args[2].toNumber(); 
  4. qreal h = ctx->callData->args[3].toNumber(); 
  5. if (!qIsFinite(x) || !qIsFinite(y) || 
  6.     !qIsFinite(w) || !qIsFinite(w)) 

***一個qlsFinite中,傳入?yún)?shù)應(yīng)該是‘h’。

OpenSSL

  1. if (!strncmp(vstart, "ASCII"5)) 
  2.   arg->format = ASN1_GEN_FORMAT_ASCII; 
  3. else if (!strncmp(vstart, "UTF8"4)) 
  4.   arg->format = ASN1_GEN_FORMAT_UTF8; 
  5. else if (!strncmp(vstart, "HEX"3)) 
  6.   arg->format = ASN1_GEN_FORMAT_HEX; 
  7. else if (!strncmp(vstart, "BITLIST"3)) 
  8.   arg->format = ASN1_GEN_FORMAT_BITLIST; 

字符串“BITLIST”長度為7,而非3。

就此打住吧。我舉的例子已經(jīng)夠說明問題了吧?

結(jié)論

本文告訴你“拷貝-粘貼”大法在***一個粘貼代碼塊中出錯的概率很可能是其他塊的4倍。

這跟人類的心理學(xué)有關(guān),與技術(shù)水平無關(guān)。文中說明了即便是像Clang或者Qt項目中的編程高手也會犯這種錯誤。

我希望這個現(xiàn)象的發(fā)現(xiàn)對于程序員們有所幫助,也許可以促使他們?nèi)パ芯课覀兊腷ug數(shù)據(jù)庫。相信如此有助于在這些錯誤中發(fā)現(xiàn)新的規(guī)律并總結(jié)出新的編程建議。

責(zé)任編輯:張偉 來源: 外刊IT評論
相關(guān)推薦

2012-06-15 09:54:58

程序員編程開發(fā)

2012-08-30 10:05:40

編程編程語言程序員

2012-08-29 15:49:50

2009-02-17 10:12:10

ASP面試技術(shù)

2013-11-14 10:05:25

程序員職業(yè)轉(zhuǎn)型

2017-03-13 09:07:05

測定代碼基因

2014-12-23 11:16:43

程序員

2015-02-03 02:40:33

程序員盲人程序員

2014-11-10 09:46:57

程序員

2013-08-20 09:33:59

程序員

2020-10-27 11:43:29

低代碼開發(fā)工具開發(fā)

2013-06-28 13:28:09

2020-12-07 14:46:07

程序員代碼分析工具

2021-03-29 23:05:36

程序員工具靜態(tài)分析

2014-06-13 11:03:19

程序員

2014-08-01 10:18:16

.Netdump

2011-11-11 16:20:22

編程

2019-06-17 01:23:06

程序員技能開發(fā)者

2013-08-08 10:02:08

2009-02-27 09:25:28

編程語言程序員C#
點贊
收藏

51CTO技術(shù)棧公眾號

成人黄色国产精品网站大全在线免费观看 | 国产黄色免费视频| 美女久久99| 欧美乱熟臀69xxxxxx| 日本道在线视频| 四虎影视在线播放| 精品综合免费视频观看| 国内精品小视频在线观看| 第一次破处视频| 日韩三级久久| 91国模大尺度私拍在线视频| 一区二区三区欧美在线| 手机在线不卡av| 美女一区二区三区| 97在线看福利| 日韩精品一区二区亚洲av性色| 久久中文字幕导航| 欧美男女性生活在线直播观看| 人人妻人人澡人人爽欧美一区| 青青操在线视频| 国产成人午夜电影网| 国产精品狼人色视频一区| 国产在线一二区| 91一区在线| 亚洲欧美资源在线| 美女伦理水蜜桃4| 伊人亚洲精品| 色就色 综合激情| 欧美精品自拍视频| 91亚洲天堂| 国产精品乱人伦| 麻豆传媒一区| 人妻91麻豆一区二区三区| 精品一区二区三区香蕉蜜桃 | 8x8ⅹ国产精品一区二区二区| 日本福利片在线| 波多野结衣一区二区三区| 成人久久一区二区| 中文字幕在线日亚洲9| 久久精品电影| 91精品国产一区| 日本少妇激情舌吻| 国语自产精品视频在线看8查询8| www.亚洲天堂| 天堂在线中文视频| 欧美亚洲精品在线| 亚洲新中文字幕| 99久久人妻无码精品系列| 美女福利一区| 亚洲精品美女网站| 久久午夜夜伦鲁鲁片| 激情视频极品美女日韩| 亚洲第一中文字幕在线观看| 老熟女高潮一区二区三区| 亚洲专区**| 日韩免费成人网| 2025中文字幕| www.成人网| 亚洲第一区中文字幕| 亚洲国产精品第一页| 国产毛片久久久| 欧美不卡激情三级在线观看| 最好看的中文字幕| 国产精品色呦| 国产视频在线观看一区二区| 蜜臀av一区二区三区有限公司| 天天做夜夜做人人爱精品| 精品香蕉一区二区三区| 日韩精品电影一区二区| 成人动漫免费在线观看| 日韩在线播放一区| 免费在线看黄网址| 国产免费成人| 国产精品久久久久久av福利软件| 中文字幕人成人乱码亚洲电影| 麻豆国产精品视频| 亚洲xxx自由成熟| 亚洲男女视频在线观看| av日韩在线网站| 日韩欧美一区二区视频在线播放 | 一级黄色免费视频| 亚洲人成网站77777在线观看| 一个色综合导航| 国产一区二区精彩视频| 亚洲激情自拍| 国产精品wwwwww| 99精品视频免费看| 99免费精品视频| 日韩一区免费观看| 污污片在线免费视频| 欧美日韩亚洲高清| 手机av在线网| 国产精品中文字幕制服诱惑| 国产亚洲欧洲在线| 欧美黄色一级网站| 老牛嫩草一区二区三区日本| 96精品久久久久中文字幕| 日本黄视频在线观看| 中文一区在线播放| 免费不卡av在线| 成人国产精品入口免费视频| 欧美成人一区二区三区| 男人舔女人下部高潮全视频| 欧美1级日本1级| 日本欧美中文字幕| 国产夫绿帽单男3p精品视频| 久久婷婷综合激情| 特级西西444| 欧美中文字幕精在线不卡| 日韩欧美成人午夜| www久久久久久久| aⅴ色国产欧美| 91牛牛免费视频| 岛国最新视频免费在线观看| 香蕉成人啪国产精品视频综合网 | 国产超碰在线一区| 亚洲国产一区二区精品视频| 国产资源在线观看入口av| 91麻豆精品国产自产在线观看一区| 真人bbbbbbbbb毛片| 在线中文字幕亚洲| 国产精品丝袜久久久久久不卡| 日本人妻丰满熟妇久久久久久| 亚洲欧洲成人精品av97| 99草草国产熟女视频在线| 国产劲爆久久| 欧美另类在线播放| 97超碰人人模人人人爽人人爱| 久久综合色8888| 欧美日韩性生活片| 超碰成人97| 色综合视频一区中文字幕| 亚洲无码精品在线播放| 日本一区二区视频在线| 北条麻妃在线观看| 神马久久影院| 81精品国产乱码久久久久久| 内射无码专区久久亚洲| 夜夜嗨av一区二区三区四季av| 色一情一区二区| 日韩理论片av| 国产精品久久久久久久av大片| 五月婷婷六月激情| 午夜精品福利在线| 亚洲一级Av无码毛片久久精品| 亚洲视频狠狠| 国产精品久久波多野结衣| 日本天码aⅴ片在线电影网站| 91精品国产综合久久久蜜臀图片 | 香蕉加勒比综合久久| a级片在线观看视频| 影音先锋亚洲电影| 精品国产区在线| 无码小电影在线观看网站免费| 日韩成人在线观看| 国产精品va无码一区二区三区| 91亚洲精品一区二区乱码| 91猫先生在线| 久久av综合| 国产精品综合不卡av| 黄网页在线观看| 欧美一二三四区在线| 美女视频黄免费| 99re成人在线| 日本精品久久久久中文字幕| 国产一区二区观看| 成人av.网址在线网站| h片在线播放| 精品国产一区二区在线观看| www.国产成人| 国产午夜精品福利| 免费成人黄色大片| 国产主播精品| 乱色588欧美| 亚洲色图图片| 久久人人爽国产| 激情在线视频| 7777精品伊人久久久大香线蕉经典版下载 | 亚洲综合男人的天堂| 一起草在线视频| 美女一区二区三区| www.射射射| 欧美亚洲国产精品久久| 1卡2卡3卡精品视频| 僵尸再翻生在线观看| 中文字幕亚洲欧美日韩在线不卡 | 99精品桃花视频在线观看| 亚洲成人福利在线观看| 欧美日韩亚洲一区三区| 久久99精品久久久久久青青日本| 国产成人福利夜色影视| 久久久久中文字幕| 草草影院在线观看| 亚洲成人免费在线视频| 嫩草影院一区二区三区| 亚洲精品久久7777| 在线观看福利片| 国产麻豆精品theporn| av免费播放网址| 亚洲天天影视网| 欧美亚洲另类久久综合| 三级欧美日韩| 国产精品久久久久久久久借妻| 国产羞羞视频在线播放| 色哟哟亚洲精品一区二区| 亚洲 精品 综合 精品 自拍| 91精品免费在线观看| 国产一级片免费在线观看| 亚洲综合图片区| 国内毛片毛片毛片毛片毛片| 97se狠狠狠综合亚洲狠狠| 天天干天天色天天干| 日一区二区三区| 欧美久久在线观看| 91中文字幕精品永久在线| 欧美亚洲精品日韩| 爽爽窝窝午夜精品一区二区| 97操在线视频| 成人豆花视频| 国产精品视频xxx| 在线黄色的网站| 久久久久亚洲精品| 超碰免费公开在线| 日日噜噜噜夜夜爽亚洲精品| 男人天堂资源在线| 日韩高清欧美高清| 丰满肥臀噗嗤啊x99av| 在线综合视频播放| 97在线公开视频| 欧美三级欧美一级| 亚洲欧美一二三区| 色综合色狠狠综合色| 日韩伦人妻无码| 亚洲国产一区二区视频| 久久久久久久久久久久久久免费看 | 成人18视频| 国产一区二区三区视频在线| 国产日韩精品在线| 在线观看亚洲精品福利片| 国产精品香蕉在线观看| 电影在线观看一区二区| 国产精品成人观看视频国产奇米| 丁香六月综合| 国产精品com| av免费在线一区| 国产精品高潮呻吟久久av黑人| 高清电影一区| 国产精品久久久久久久久久| 成人在线视频免费| 国产精品美乳一区二区免费| 成人在线不卡| 国产主播欧美精品| 24小时成人在线视频| 91久久国产精品| 免费精品一区| 俄罗斯精品一区二区| 福利片在线一区二区| 国产一区二区不卡视频| 婷婷精品在线| 日韩一区二区三区高清| 国产精品久久久久蜜臀| 欧美大片免费播放| 在线高清一区| av黄色在线网站| 蜜桃免费网站一区二区三区| 国产又黄又猛的视频| 国产成人午夜精品5599| 好吊色视频一区二区三区| 久久女同性恋中文字幕| 最新日韩免费视频| 亚洲精品午夜久久久| 黄色小视频在线免费看| 色综合久久久久综合体桃花网| 国产成人麻豆免费观看| 3d成人h动漫网站入口| www日本在线| 亚洲精品一区在线观看香蕉| av网站大全在线观看| 久久艳片www.17c.com| 136福利第一导航国产在线| 国产suv精品一区二区| 一区二区三区| 久久久久久久久四区三区| re久久精品视频| 成人黄色大片网站| 日韩精品五月天| 不许穿内裤随时挨c调教h苏绵 | 日韩三级视频中文字幕| 香蕉视频网站在线| 久久精品2019中文字幕| 国产v日韩v欧美v| 国产免费一区二区三区香蕉精| 亚洲视频国产| 亚洲色图自拍| 国产午夜精品一区二区三区欧美 | 高清国产一区二区三区四区五区| 国产精品久久久久久久免费大片| 国产一区二区三区电影在线观看| 日韩video| 天堂资源在线中文精品| 一区二区在线免费观看视频| 欧美极品aⅴ影院| 中文字幕一区二区三区手机版| 欧美亚洲综合色| 天堂av一区二区三区| 久久久精品久久| 日日夜夜天天综合| 国产美女精品久久久| 国产精品精品国产一区二区| 六月丁香婷婷激情| 成人亚洲一区二区一| 极品色av影院| 在线观看日韩毛片| 婷婷丁香花五月天| 欧美大片免费观看| 伊人久久一区| 亚洲一区二区四区| 日韩综合小视频| 性色av蜜臀av色欲av| 亚洲国产视频一区| 精品免费久久久| 色婷婷**av毛片一区| 性欧美超级视频| 蜜桃在线一区二区三区精品| 亚洲黄色天堂| 在线观看欧美一区二区| 中文字幕中文在线不卡住| 国产午夜无码视频在线观看 | 女人又爽又黄免费女仆| 五月婷婷欧美视频| 黄色成人一级片| 欧美激情一区二区三区久久久 | 在线看视频不卡| 日韩精品亚洲一区| 丁香花五月婷婷| 在线观看精品一区| av一区在线观看| 国产精品自产拍高潮在线观看| 久久av免费| 午夜免费高清视频| 欧美激情在线一区二区| 波多野结衣视频观看| 一区二区三区视频免费| 性欧美freehd18| 亚洲精品一区二区三区蜜桃久 | 日本50路肥熟bbw| 亚洲国产欧美在线| 婷婷在线观看视频| 97超视频免费观看| 午夜精品影视国产一区在线麻豆| 成人观看免费完整观看| 久久久久久黄色| 激情网站在线观看| 最新国产成人av网站网址麻豆| 青青久久精品| 欧美一级中文字幕| 成人黄色网址在线观看| 日韩视频在线观看一区| 亚洲人成免费电影| 成人一级视频| 日韩视频一二三| 成人av在线网| av大全在线观看| 中文字幕av一区二区| 日韩成人精品一区二区三区| 玖玖精品在线视频| 成人av电影免费观看| 久久久精品视频网站| 中文字幕av日韩| 97一区二区国产好的精华液| 欧美一级在线看| 亚洲国产高清在线| 国产色视频在线| 久久人人看视频| 国产一区二区三区四区二区| 99sesese| 亚洲高清免费在线| 九色在线视频| 亚洲一区二区三区久久| 日韩一区二区久久| 色欲狠狠躁天天躁无码中文字幕 | 色先锋aa成人| 黄网站app在线观看| 久久亚洲免费| 韩国一区二区在线观看| 亚洲国产精品午夜在线观看| 夜夜嗨av色一区二区不卡| 精品视频在线观看网站| 中文字幕乱码人妻综合二区三区 | 蜜臀在线免费观看| 91丨porny丨在线| 国产精品色综合| 欧美一级电影免费在线观看| 久久亚洲国产| 成年人网站免费在线观看| 51精品视频一区二区三区| 日本不良网站在线观看| 老汉色影院首页| 国产肉丝袜一区二区| 丰满岳乱妇国产精品一区|