超碰91资源站-超碰97豆花-超碰97人妻-超碰97人人干-超碰97人人香蕉-超碰97天天操-超碰97在线资源站-超碰97资源站共享-超碰97资源站总站-超碰aa在线91-超碰av操-超碰爱爱

半岛外围网上直营

C++代碼質(zhì)量掃描主流工具深度比較

轉(zhuǎn)帖|對(duì)比評(píng)測(cè)|編輯:龔雪|2016-06-02 14:39:12.000|閱讀 1861 次

概述:統(tǒng)計(jì)證明,在整個(gè)軟件開發(fā)生命周期中,30%至70%的代碼邏輯設(shè)計(jì)和編碼缺陷是可以通過靜態(tài)代碼分析來發(fā)現(xiàn)和修復(fù)的。 本文中,將對(duì)C++代碼質(zhì)量掃描主流工具進(jìn)行深度對(duì)比。

# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>

相關(guān)鏈接:

一、引言

靜態(tài)代碼分析是指無需運(yùn)行被測(cè)代碼,通過詞法分析、語法分析、控制流、數(shù)據(jù)流分析等技術(shù)對(duì)程序代碼進(jìn)行掃描,找出代碼隱藏的錯(cuò)誤和缺陷,如參數(shù)不匹配,有歧義的嵌套語句,錯(cuò)誤的遞歸,非法計(jì)算,可能出現(xiàn)的空指針引用等等。統(tǒng)計(jì)證明,在整個(gè)軟件開發(fā)生命周期中,30%至70%的代碼邏輯設(shè)計(jì)和編碼缺陷是可以通過靜態(tài)代碼分析來發(fā)現(xiàn)和修復(fù)的。

在C++項(xiàng)目開發(fā)過程中,因?yàn)槠錇榫幾g執(zhí)行語言,語言規(guī)則要求較高,開發(fā)團(tuán)隊(duì)往往要花費(fèi)大量的時(shí)間和精力發(fā)現(xiàn)并修改代碼缺陷。所以C++靜態(tài)代碼分析工具能夠幫助開發(fā)人員快速、有效的定位代碼缺陷并及時(shí)糾正這些問題,從而極大地提高軟件可靠性并節(jié)省開發(fā)成本。

C/C++代碼審查工具Parasoft C/C++test

資源下載

靜態(tài)代碼分析工具的優(yōu)勢(shì):

  1. 自動(dòng)執(zhí)行靜態(tài)代碼分析,快速定位代碼隱藏錯(cuò)誤和缺陷。
  2. 幫助代碼設(shè)計(jì)人員更專注于分析和解決代碼設(shè)計(jì)缺陷。
  3. 減少在代碼人工檢查上花費(fèi)的時(shí)間,提高軟件可靠性并節(jié)省開發(fā)成本。

二、業(yè)界主流靜態(tài)代碼掃描工具概況

目前市場(chǎng)上的C++靜態(tài)代碼分析工具種類繁多且各有千秋,本文將分別介紹TSC團(tuán)隊(duì)自主研發(fā)的tscancode工具和當(dāng)前4種主流C++靜態(tài)代碼分析工具(cppcheck、coverity、clang、pclint),并從功能、效率、易用性等方面對(duì)它們進(jìn)行分析和比較,以期幫助C++開發(fā)人員更清晰靜態(tài)代碼分析工具的工作效果、適用場(chǎng)景和擴(kuò)展空間,同時(shí)在其對(duì)應(yīng)項(xiàng)目特征中選擇合適的工具應(yīng)用到項(xiàng)目開發(fā)環(huán)節(jié)中。

以下為工具在付費(fèi)價(jià)格、規(guī)則數(shù)量、準(zhǔn)確率、掃描效率、編譯依賴、IDE支持、跨平臺(tái)支持、可擴(kuò)展開發(fā)方面的對(duì)比數(shù)據(jù)。注:本次競(jìng)品分析的選擇了3款游戲項(xiàng)目(約500萬行代碼)。

在可擴(kuò)展性上,TSC有專人維護(hù),定期根據(jù)用戶需求擴(kuò)展規(guī)則或新增功能特性,cppcheck和clang是開源工具,工具更新較慢,但如果用戶有特殊需求可以自己擴(kuò)展開發(fā),pclint和coverity是商業(yè)軟件,難以進(jìn)行功能擴(kuò)展。

同時(shí),TSC有完整代碼質(zhì)量管理閉環(huán)平臺(tái)QOC支持;coverity和clang可用web端的結(jié)果展示,但無法自行管理問題流,需要進(jìn)行二次開發(fā);cppcheck和pclint缺少web端結(jié)果展示。

以下重點(diǎn)比較具體檢查規(guī)則和有效問題報(bào)錯(cuò)率。

三、檢查規(guī)則大比拼

1.規(guī)則大類

針對(duì)業(yè)內(nèi)大量掃描工具在實(shí)際項(xiàng)目中掃描結(jié)果的影響比較,我們將代碼質(zhì)量問題分為以下幾大類:

  1. 致命類:可能導(dǎo)致程序宕機(jī)、無響應(yīng)等影響范圍極大的錯(cuò)誤;
  2. 邏輯類:可能造成程序不能達(dá)到預(yù)期邏輯結(jié)果的錯(cuò)誤;
  3. 編碼規(guī)范及其他類:可能造成程序的可讀性、可維護(hù)性較差的錯(cuò)誤(不可達(dá)代碼,無效的變量聲明等);

2.規(guī)則大類分布

根據(jù)3大影響分類,其嚴(yán)重程度分別為高、中、低,各類型規(guī)則數(shù)量分布為:

從規(guī)則分類占比來看:

  1. TSC針對(duì)互聯(lián)網(wǎng)產(chǎn)品高效開發(fā)修復(fù)原則,工具定位為針對(duì)致命和邏輯類問題,相對(duì)傳統(tǒng)、軍事、安全領(lǐng)域,并不關(guān)注編碼規(guī)范及編譯錯(cuò)誤;
  2. coverity作為商業(yè)化軟件,在付費(fèi)后添加規(guī)則上,達(dá)到覆蓋率最全面,除致命和邏輯類規(guī)則外,還有大量編碼規(guī)范、安全和針對(duì)其他語言(如java,C#)的規(guī)則;
  3. cppcheck作為開源工具,應(yīng)用范圍廣泛,根據(jù)開源社區(qū)場(chǎng)景搜集,在各方面都有規(guī)則添加,但場(chǎng)景較為粗獷,場(chǎng)景雖多,但有效率不高。例如:cppcheck在初始化檢查上有5個(gè)子規(guī)則,樣本代碼共掃描出312個(gè)問題,其中有效問題僅8個(gè),有效率僅為3%。
  4. pclint作為商業(yè)化軟件,在付費(fèi)后添加規(guī)則上,達(dá)到覆蓋率最全面,除致命和邏輯類規(guī)則外,還有大量編碼規(guī)范、安全的規(guī)則;
  5. clang作為開源軟件,規(guī)則較少,但規(guī)則類型分布較為均勻,在致命、邏輯類,還有編碼規(guī)范、安全類都有規(guī)則添加。

3.規(guī)則報(bào)錯(cuò)數(shù)量

整體規(guī)則數(shù)量上:pclint[915]>coverity[515]>cppcheck[245]>clang[74]>TSC[67]

可以看出pclint和coverity規(guī)則最多,TSC和clang規(guī)則最少,原因有如下3點(diǎn):

  1. pclint和coverity作為商業(yè)化軟件,需求來源于傳統(tǒng)軟件、軍事、安全各個(gè)領(lǐng)域,其規(guī)則總數(shù)最多,其編碼規(guī)范類規(guī)則數(shù)量分別高達(dá)646條和382條;排除掉低價(jià)值的編碼規(guī)范類規(guī)則,規(guī)則數(shù)量排序?yàn)椋?br /> pclint[269]>cppcheck[151]>coverity[133]>TSC[67]>clang[44]
  2. 在規(guī)則實(shí)際報(bào)錯(cuò)數(shù)量上,以3款游戲500萬行代碼的結(jié)果覆蓋度來看;

    注:規(guī)則總數(shù)指工具所有的規(guī)則總數(shù),報(bào)錯(cuò)規(guī)則數(shù)指開啟工具所有規(guī)則情況下,掃描樣本代碼所覆蓋的規(guī)則數(shù)量。

    從實(shí)際項(xiàng)目掃描結(jié)果來看:

    掃描出問題的規(guī)則數(shù)/規(guī)則總數(shù):

    TSC[60%]>cppcheck[27%]>clang[19%]>coverity[10%]>pclint[9%]

    pclint、coverity、cppcheck雖然規(guī)則數(shù)量很多,但因?yàn)槠涠ㄖ萍尤氲拇蟛糠忠?guī)則普遍適用度不高,大量規(guī)則可能在多個(gè)項(xiàng)目中都無法掃描出問題。有些規(guī)則卻在多個(gè)項(xiàng)目中掃描出大量非核心的問題,如:函數(shù)沒有被調(diào)用、未使用的變量、存在多余的頭文件等。

  3. 規(guī)則數(shù)量多來源于兩個(gè)方面,一方面是規(guī)則覆蓋更全面,另一方面是規(guī)則粒度劃分得更細(xì);

通過對(duì)具體規(guī)則進(jìn)行分析,發(fā)現(xiàn)在規(guī)則劃分粒度由細(xì)到出排序?yàn)閇pclint,coverity,cppcheck,clang,TSC]

pclint和coverity劃分粒度最細(xì),cppcheck,clang次之,TSC最粗。

例如:coverity的除0報(bào)錯(cuò)分為整型除0,浮點(diǎn)數(shù)除0,取模除0;數(shù)組下標(biāo)越界也細(xì)分為訪問越界、讀越界、寫越界。Pclint和cppcheck初始化分為變量未初始化、結(jié)構(gòu)體成員未初始化、類成員未初始化、string未初始化、data未初始化、union未初始化、全局靜態(tài)變量未初始化等;而TSC則合并了一些過細(xì)的規(guī)則,未初始化上只分為變量未初始化和成員未初始化。

粒度劃分越細(xì)既有優(yōu)點(diǎn)也有缺點(diǎn):

優(yōu)點(diǎn):可以針對(duì)細(xì)分規(guī)則靈活配置開關(guān),關(guān)掉準(zhǔn)確率低的規(guī)則

缺點(diǎn):規(guī)則數(shù)量太多, 用戶配置相當(dāng)麻煩,新用戶很難理解多個(gè)相似的規(guī)則之前的區(qū)別。

TSC為降低用戶配置難度,在規(guī)則粒度劃分上相對(duì)粗獷,但會(huì)從中提取出其中準(zhǔn)確率低的場(chǎng)景,作為單獨(dú)規(guī)則,從而達(dá)到可以關(guān)掉低準(zhǔn)確率規(guī)則的目的。

四、同類規(guī)則效果對(duì)比分析

本文針對(duì)每個(gè)工具在關(guān)鍵報(bào)錯(cuò)項(xiàng),如:空指針、越界、變量未初始化、內(nèi)存泄露、邏輯上的報(bào)錯(cuò)結(jié)果進(jìn)行分析。

樣本代碼——3款游戲項(xiàng)目(約500萬行代碼)代碼

測(cè)試對(duì)象——tscancode2.0、coverity7.5、cppcheck1.68、pclint9.0、clang3.4

有效報(bào)錯(cuò)數(shù)——某類規(guī)則在3款游戲項(xiàng)目的有效報(bào)錯(cuò)數(shù)總和

準(zhǔn)確率——某類規(guī)則在3款游戲項(xiàng)目的平均準(zhǔn)確率,準(zhǔn)確率=有效報(bào)錯(cuò)數(shù)/報(bào)錯(cuò)總數(shù)*100%

綜合評(píng)分——綜合有效報(bào)錯(cuò)數(shù)和準(zhǔn)確率的評(píng)分,有效報(bào)錯(cuò)數(shù)和準(zhǔn)確率的權(quán)值暫定為45:55,綜合評(píng)分=有效報(bào)錯(cuò)/最大有效報(bào)錯(cuò)數(shù)*100*45%+準(zhǔn)確率*100*55%

1.空指針規(guī)則

空指針檢查規(guī)則主要檢查是否存在對(duì)賦值為空的指針解引用的情況,空指針是c/c++中最大的問題,經(jīng)常造成程序崩潰的致命錯(cuò)誤。因此,C++靜態(tài)代碼分析工具對(duì)空指針的檢查能力顯得尤為重要。

圖為五個(gè)工具對(duì)樣本代碼掃描結(jié)果:

有效報(bào)錯(cuò)數(shù):TSC [401] >coverity[219]>>clang[57] >cppcheck[20]>pclint[14]

準(zhǔn)確率:coverity[95%]≈TSC[92%] ≈clang[90%]>>cppcheck[28%]>pclint[14%]

綜合評(píng)分:TSC[96分] >coverity[77分] >clang[56分]>cppcheck[18分]>pclint[8分]

  1. 從準(zhǔn)確率來看,在空指針檢查方面,不考慮掃描效率和掃描環(huán)境搭建復(fù)雜度,TSC、coverity和clang都很優(yōu)秀,三者準(zhǔn)確率都很高。cppcheck, pclint在結(jié)果準(zhǔn)確率上和數(shù)量上都較差,不推薦使用。
  2. 從空指針規(guī)則細(xì)分程度來看,TSC和coverity相當(dāng),細(xì)分場(chǎng)景挖掘更多,cppcheck規(guī)則并未細(xì)分空指針規(guī)則,從實(shí)際項(xiàng)目結(jié)果來看,只能檢查出dereferenceBeforeCheck場(chǎng)景的錯(cuò)誤。Clang和pclint在空指針細(xì)分上維度跟TSC和coverity不同,比如:它們區(qū)分是參數(shù)指針解引用還是局部變量解引用,細(xì)分粒度不夠且覆蓋場(chǎng)景較少,其覆蓋場(chǎng)景基本都被TSC和coverity包含。

    cppcheck掃描出來的問題存在大量誤報(bào),誤報(bào)主要是冗余的判空,并不會(huì)引起實(shí)際問題,具體誤報(bào)場(chǎng)景如下:

  3. 從有效報(bào)錯(cuò)數(shù)量上,TSC有效報(bào)錯(cuò)數(shù)量更多,細(xì)分場(chǎng)景挖掘更多,無疑是掃描 空指針最佳選擇;clang覆蓋的場(chǎng)景較少,其有效報(bào)錯(cuò)基本都能被coverity和TSC覆 蓋,不過由于其準(zhǔn)確率較高且免費(fèi),與TSC搭配使用也是不錯(cuò)的選擇;而coverity雖然覆蓋場(chǎng)景多但因?yàn)橹粫?huì)報(bào)完全可信的問題,因此會(huì)漏掉部分有效報(bào)錯(cuò),例如:指針變量 來源于函數(shù)返回值,而函數(shù)返回值是否為NULL依賴于用戶輸入,在靜態(tài)分析中 coverity無法判斷其是否會(huì)為NULL,為保證準(zhǔn)確率會(huì)漏掉該指針報(bào)錯(cuò)。若項(xiàng)目對(duì)空指 針漏報(bào)容忍度較高,且有足夠預(yù)算采購(gòu)商業(yè)軟件,可以選擇coverity;而cppcheck和 pclint檢查出的有效問題極少并伴隨大量誤報(bào),同上結(jié)論,不宜使用。
  4. 在易用性上,coverity和clang編譯環(huán)境構(gòu)建復(fù)雜,編譯時(shí)長(zhǎng)增加較多;TSC在易用性上也有一個(gè)缺點(diǎn),即為提高準(zhǔn)確率,在個(gè)別項(xiàng)目存在一次性配置工作。原因是個(gè)別項(xiàng)目存在自定義判空宏,但由于不依賴編譯,TSC掃描的代碼可能并不完整,導(dǎo)致個(gè)別自定義判空宏找不到,需要在cfg.ini中配置自定義判空宏。當(dāng)然,如果掃描的代碼完整度同編譯環(huán)境,則無此問題。

2.越界規(guī)則

越界一般來講是指數(shù)組下標(biāo)越界,或者緩沖區(qū)讀寫越界。這類錯(cuò)誤會(huì)導(dǎo)致非法內(nèi)存的訪問,引發(fā)程序崩潰或者錯(cuò)誤。

下圖是五個(gè)工具對(duì)樣本代碼掃描結(jié)果:

注:越界對(duì)誤報(bào)判定的規(guī)則比較嚴(yán)格,即使場(chǎng)景識(shí)別本身無誤,但是通過代碼邏輯可以推斷該場(chǎng)景不會(huì)越界的也判定為誤報(bào)。

例如:

這里由found變量間接推斷出data[region_index]不會(huì)越界,將其判定為誤報(bào)。

從報(bào)錯(cuò)數(shù)量和準(zhǔn)確率來看:

有效報(bào)錯(cuò)數(shù):coverity[98]>>TSC [18]>pclint[16] >cppcheck[6]> clang[4]

準(zhǔn)確率:clang[100%] >coverity[80%]>TSC[70%] >cppcheck[67%]>>pclint[2%]

綜合評(píng)分:coverity[90分] >TSC[54分]≈clang[55分]>cppcheck[40分]>pclint[1分]

  1. 在報(bào)錯(cuò)數(shù)量上,coverity在越界檢查上有較大的優(yōu)勢(shì),因?yàn)閏overity有較強(qiáng)的符 號(hào)查找和場(chǎng)景識(shí)別能力,能識(shí)別相對(duì)復(fù)雜的越界場(chǎng)景。其他四個(gè)工具同coverity相比還 有差距,其中pclint存在大量誤報(bào),表現(xiàn)最差。如:TSC和cppcheck只能識(shí)別數(shù)組變量 本身越界,但如果是一個(gè)指針p指向數(shù)組的第一個(gè)元素,通過p[i]訪問時(shí)的越界,TSC 和cppcheck都無法檢查,而coverity能找到p所指向的數(shù)組定義,得到數(shù)組大小,從而 判斷p[i]是否越界。
  2. clang越界這塊的準(zhǔn)確率雖然最高為100%,但其覆蓋的場(chǎng)景單一(strncpy使用越界報(bào)了4條),其報(bào)錯(cuò)都被TSC和coverity覆蓋,數(shù)量上和其他工具有較大差距。TSC越界檢查結(jié)果要略好于cppcheck,clang和pclint,TSC增加了對(duì)變量取值范圍的推斷,檢測(cè)出是否存在越界的風(fēng)險(xiǎn)。比如:

    (TSC越界有效報(bào)錯(cuò)場(chǎng)景)

對(duì)于數(shù)組下標(biāo)iCountry的判定存在風(fēng)險(xiǎn),代碼執(zhí)行到當(dāng)前上下文時(shí),iCountry可能 取值為MAX_QT_COUNTRY_JIFEN_ITEM_CNT,而這正是數(shù)組m_astDataInDB的長(zhǎng) 度,也就是說在這種邊界情況下會(huì)造成了數(shù)組訪問越界。對(duì)于如上場(chǎng)景,應(yīng)該將代碼修 改為iCountry>= MAX_QT_COUNTRY_JIFEN_ITEM_CNT。

3.變量未初始化規(guī)則

變量未初始化顧名思義:變量聲明后沒有賦初值,其分配的內(nèi)存值是隨機(jī)的。這也是代碼中容易出現(xiàn)的問題,會(huì)導(dǎo)致不確定的程序行為,造成嚴(yán)重的后果。

下圖是五個(gè)工具對(duì)樣本代碼掃描結(jié)果:

注:結(jié)果排除了3個(gè)工具都有的檢查項(xiàng)——構(gòu)造函數(shù)中是否存在未初始化成員變量。在實(shí)際項(xiàng)目中發(fā)現(xiàn),C++類構(gòu)造函數(shù)中對(duì)成員變量不做初始化的情況是普遍的,很多代碼會(huì)采用“延遲初始化”,即在實(shí)際用到該對(duì)象的時(shí)候調(diào)用類似Initialize的方法進(jìn)行初始化。因此在此次對(duì)比中并沒有把這條規(guī)則納入進(jìn)來。

從報(bào)錯(cuò)數(shù)量和準(zhǔn)確率來看:

有效報(bào)錯(cuò)數(shù):coverity[75]>>pclint[25] >TSC [9]>cppcheck[8]> clang[1]

準(zhǔn)確率:TSC[75%] >coverity[68%]>pclint[26%] > clang[17%] >cppcheck[3%]

綜合評(píng)分:coverity[82分] > TSC[47分] >pclint[30分] > clang[10分] >cppcheck[6分]

  1. 在報(bào)錯(cuò)數(shù)量上,coverity初始化檢查場(chǎng)景覆蓋比其他四個(gè)工具要全,TSC為保持 準(zhǔn)確率,規(guī)則覆蓋上比較保守,而cppcheck存在比較嚴(yán)重的誤報(bào)問題,準(zhǔn)確率僅為 3%。pclint的誤報(bào)也相對(duì)很高,clang在初始化這塊顯得無能為力。從上圖可以很容易發(fā) 現(xiàn)cppcheck的誤報(bào)數(shù)量相當(dāng)?shù)酶撸琧ppcheck會(huì)將如下的場(chǎng)景判定為未初始化:
    (cppcheck誤報(bào)場(chǎng)景)

    SMD_POS是一個(gè)簡(jiǎn)單的結(jié)構(gòu)體,它包含了一個(gè)空的構(gòu)造函數(shù),cppcheck依據(jù)這點(diǎn) 判定這是一個(gè)未初始化的錯(cuò)誤。但這樣的場(chǎng)景不會(huì)有什么問題,算是一個(gè)誤報(bào)。這導(dǎo)致 了cppcheck在未初始化規(guī)則的結(jié)果可信度大大降低。

  2. coverity在未初始化這塊的場(chǎng)景覆蓋比較全,特別是對(duì)結(jié)構(gòu)體對(duì)象的字段的初始 化情況的檢測(cè),因?yàn)槠浠诰幾g可對(duì)變量做路徑跟蹤,例如:構(gòu)造函數(shù)里面調(diào)用了init() 函數(shù),coverity會(huì)繼續(xù)跟蹤init()函數(shù)中是否有對(duì)變量的賦值,所以掃描覆蓋場(chǎng)景最全。 coverity的誤報(bào)主要分為兩類:一類是對(duì)幾種未初始化場(chǎng)景的識(shí)別上存在問題,如:,變 量在某個(gè)分支的確沒有初始化,但用了一個(gè)狀態(tài)標(biāo)識(shí)其未初始化,當(dāng)使用這個(gè)變量前會(huì) 使用狀態(tài)標(biāo)記來判斷其是否沒有初始化,保證使用的變量都是初始化過了的。另一類就 是上面提到的“低價(jià)值報(bào)錯(cuò)”,即通過代碼邏輯或者做了代碼保護(hù),保證變量不會(huì)因?yàn)?沒有初始化而產(chǎn)生實(shí)際的問題。如:一個(gè)表示時(shí)間的結(jié)構(gòu)體,里面字段有year, month,day,hour,min,day這個(gè)字段沒有初始化,但實(shí)際代碼中也沒有用到這個(gè)字段,因此并不會(huì)產(chǎn)生任何問題。

    TSC在未初始化變量的檢查因不具備路徑分析能力,而以分支作用域檢查特定變量 在各個(gè)代碼分支的初始化情況,誤報(bào)率保持在相對(duì)低的一個(gè)水平。但場(chǎng)景覆蓋較少,沒 有針對(duì)結(jié)構(gòu)體字段的初始化場(chǎng)景做覆蓋。因?yàn)閷?duì)結(jié)構(gòu)字段的初始化方式相對(duì)比較多樣: 逐個(gè)字段初始化,函數(shù)調(diào)用初始化,構(gòu)造函數(shù)初始化等。

4.內(nèi)存/資源泄露規(guī)則

內(nèi)存泄漏指由于疏忽或錯(cuò)誤造成程序未能釋放已經(jīng)不再使用的內(nèi)存,從而造成了內(nèi) 存浪費(fèi)的情況。內(nèi)存泄漏是靜態(tài)下很難檢測(cè)的一種錯(cuò)誤,一般需要?jiǎng)討B(tài)分析工具進(jìn)行檢 測(cè),如valgrind工具會(huì)捕獲malloc()/free()/new/delete的調(diào)用,監(jiān)控內(nèi)存分配和釋放,從 動(dòng)態(tài)上檢測(cè)程序是否存在內(nèi)存泄漏。因此,靜態(tài)代碼分析能檢查的內(nèi)存泄漏就非常有限 了,當(dāng)前各工具主要是從代碼寫法上檢查內(nèi)存分配和釋放是否配對(duì)使用。比如:fopen 打開文件后在退出函數(shù)前是否有執(zhí)行fclose,new[]和delete[]是否配對(duì)使用等。

下圖是五個(gè)工具對(duì)樣本代碼掃描結(jié)果:

注:以上數(shù)據(jù)排除了cppcheck35個(gè)低價(jià)值報(bào)錯(cuò),這里排除的cppcheck35個(gè)報(bào)錯(cuò)都是基本數(shù)據(jù)類型的new和delete不匹配(如char* p=new char[100];delete p;)雖然這種寫法不規(guī)范,但由于實(shí)際上不會(huì)造成內(nèi)存泄漏,很多項(xiàng)目不會(huì)對(duì)此進(jìn)行修復(fù)。

從報(bào)錯(cuò)數(shù)量和準(zhǔn)確率來看:

有效報(bào)錯(cuò)數(shù):pclint[55] >TSC[40]>coverity [29]>cppcheck[28]> clang[0]

準(zhǔn)確率:coverity[100%]=cppcheck[100%] >TSC[73%]>pclint[23%] > clang[N/A]

綜合評(píng)分:coverity[79分] ≈ TSC [73分]≈cppcheck[77分]>pclint[57分]>clang[0分]

從報(bào)錯(cuò)數(shù)量上看出,在內(nèi)存泄漏檢查方面,pclint雖然發(fā)現(xiàn)有效問題最多,但誤報(bào)很高,不推薦使用。TSC的有效錯(cuò)誤數(shù)比coverity和cppcheck多,但誤報(bào)也相對(duì)較高。clang則不具備泄露類場(chǎng)景的檢測(cè)能力。

注:由于靜態(tài)掃描能檢查的內(nèi)存泄露場(chǎng)景都非常明確,因此一般都不會(huì)出現(xiàn)問題,TSC的15個(gè)誤報(bào)也非場(chǎng)景識(shí)別有誤而是工具底層bug導(dǎo)致,后續(xù)會(huì)對(duì)底層bug進(jìn)行修復(fù)。如:#ifdef 和#else分支中各有一個(gè)fopen,實(shí)際編譯時(shí)只會(huì)走其中1個(gè)分支識(shí)別1次fopen,但由于底層bug識(shí)別了2次fopen,導(dǎo)致誤報(bào)。

5.邏輯錯(cuò)誤規(guī)則

邏輯錯(cuò)誤:指可能存在的邏輯問題,如if不同分支內(nèi)容相同,在switch內(nèi)缺少break等,對(duì)指針使用sizeof進(jìn)行空間分配等問題。

下圖是五個(gè)工具對(duì)樣本代碼掃描結(jié)果:

注:這些報(bào)錯(cuò)中剔除了一些無修改意義且結(jié)果數(shù)量很多規(guī)則:如:coverity掃描存在7484條Logically dead code(邏輯代碼不可達(dá))報(bào)錯(cuò)。cppcheck存在2246條unusedFunction(函數(shù)未被使用)報(bào)錯(cuò)。

從報(bào)錯(cuò)數(shù)量和準(zhǔn)確率來看:

有效數(shù)量:TSC[293]>coverity[164]>clang[142] >cppcheck [120]>pclint[116]

準(zhǔn)確率:clang[97%] >TSC[93%]>coverity(88%)>pclint[72%] >cppcheck[55%]

綜合評(píng)分:coverity[94分] > TSC[86分] > clang[80分] >cppcheck[63分] >pclint[27分]

從報(bào)錯(cuò)數(shù)量和準(zhǔn)確率上可以看出TSC可以更有效的發(fā)現(xiàn)邏輯類問題。但各工具邏輯類場(chǎng)景各有特色,互為互補(bǔ),可以一同選擇掃描,但cppcheck和pclint準(zhǔn)確率較低,可以較少選擇。clang的準(zhǔn)確率最高,但clang掃描出來的邏輯錯(cuò)誤中有一大半為低價(jià)值的邏輯錯(cuò)誤,比如clang掃描出來的142條邏輯錯(cuò)誤中就有140條“變量賦值但沒有使用”錯(cuò)誤。

①TSC,coverity具備較強(qiáng)宏展開能力

以DuplicateExpression規(guī)則為例,TSC發(fā)現(xiàn)DuplicateExpression規(guī)則報(bào)錯(cuò)32條,cppcheck發(fā)現(xiàn)DuplicateExpression規(guī)則報(bào)錯(cuò)12條。因?yàn)門SC可以對(duì)宏進(jìn)行更有效展開,例如:

這種報(bào)錯(cuò)TSC可以準(zhǔn)確的識(shí)別出來,宏MAX_TASK_TAB_SIZE和MAX_TASK_RES_NUM為相同的數(shù)值,而cppcheck無法區(qū)分發(fā)現(xiàn)這類問題,只能進(jìn)行簡(jiǎn)單的文本匹配。coverity在推斷能力上也不差,在這點(diǎn)也明顯優(yōu)于cppcheck。

②TSC規(guī)則類型更有效

經(jīng)過篩選,TSC只保留價(jià)值更高的推斷和有效規(guī)則;

Ø增加一些函數(shù)檢查規(guī)則,如:MemsetZeroBytes,這種錯(cuò)誤的Memset寫法:memset(ctYear, sizeof(ctYear),0);可疑的數(shù)組下標(biāo)使用等這些規(guī)則在coverity邏輯類檢查中并沒有體現(xiàn),而coverity只會(huì)報(bào)出非常準(zhǔn)確的報(bào)錯(cuò)如:if分支完全相同等檢查項(xiàng)。

Ø剔除價(jià)值低的無效規(guī)則,如coverity規(guī)則Logically dead code,指一些邏輯上不可達(dá)的廢棄代碼;cppcheck規(guī)則memsetClassFloatc指對(duì)存在Float類型成員變量的Class
使用Memset,當(dāng)時(shí)代碼中發(fā)現(xiàn)基本都是Memset為0,并不會(huì)有數(shù)據(jù)丟失等問題。故這類規(guī)則發(fā)現(xiàn)有效問題很低,在數(shù)量較大的情況下,需要耗費(fèi)大量的人力來確認(rèn),性價(jià)比不高,TSC已經(jīng)將這種規(guī)則剔除。

總的來說,TSC在發(fā)現(xiàn)問題和準(zhǔn)確率方面表現(xiàn)都不錯(cuò),可以節(jié)省大量的人力在鎖定邏輯類型錯(cuò)誤。

TSC在某些細(xì)小規(guī)則的推斷能力上比coverity要稍微弱一些,如規(guī)則Missing break in switch:coverity發(fā)現(xiàn)全部準(zhǔn)確的報(bào)錯(cuò),TSC存在一定的誤報(bào),這些復(fù)雜場(chǎng)景需要較強(qiáng)的動(dòng)態(tài)計(jì)算如:

五、常見誤報(bào)場(chǎng)景

1.空指針常見誤報(bào)場(chǎng)景

誤報(bào)場(chǎng)景一(cppcheck)

以上538行代碼報(bào)quiz_set_ptt存在空指針訪問。

誤報(bào)原因:538行只是指針的比較,并沒有解引用,這是一個(gè)比較低級(jí)的誤報(bào)。

誤報(bào)場(chǎng)景二(coverity)

以上119行代碼報(bào)actor存在空指針訪問,判定邏輯如下:112行對(duì)actor進(jìn)行了判空,說明actor在當(dāng)前上下文可能為空。所以119行actor可能為空。

誤報(bào)原因:xy_assert_retval是個(gè)宏,展開后包含有return語句,即如果actor為空115行就返回了,119行actor不會(huì)為空。

2.越界常見誤報(bào)場(chǎng)景

誤報(bào)場(chǎng)景一(TSC)

以上83行代碼報(bào)第數(shù)組訪問可能越界,判定邏輯如下:第61行的if語句對(duì)req_list.num的取值范圍作了限制,req_list.num在當(dāng)前上下文的最大值可以是
MAX_RECRUIT_REQ_LIST_SIZE(4);83行req_list._數(shù)組對(duì)象用req_list.num作為其數(shù)組訪問的下標(biāo),當(dāng)req_list.num取值為MAX_RECRUIT_REQ_LIST_SIZE時(shí)發(fā)生越界(req_list._數(shù)組的長(zhǎng)度為MAX_RECRUIT_REQ_LIST_SIZE(4))。

誤報(bào)原因:第79行的if條件保證了之后的代碼req_list.num的值不會(huì)等于MAX_RECRUIT_REQ_LIST_SIZE,所以這是一個(gè)誤報(bào)。

誤報(bào)場(chǎng)景二(cppcheck)

以上第691行代碼報(bào)t_index_map可能取值-1越界,判定邏輯如下:665行聲明t_index_map并賦值為-1,t_index_map的賦值在681行,但681行在for循環(huán)里面,而for循環(huán)存在不能進(jìn)入的可能性,所以在691行使用t_index_map可能未初始化。

誤報(bào)原因:進(jìn)入691行代碼的前提條件是found變量為true,而found為true保證了t_index_map被賦值了。

誤報(bào)場(chǎng)景三(coverity)

以上第146行代碼報(bào)src_index + 1可能取值為4越界,判定邏輯如下:139行對(duì)src_idx的取值范圍進(jìn)行了限定:[0, 3](TEAM_MEMBER_MAX長(zhǎng)度為4),因此146行src_idx + 1可能為4導(dǎo)致對(duì)team_ptr->team_member訪問越界。

誤報(bào)原因:144行對(duì)src_idx的取值范圍進(jìn)行了過濾,保證了src_idx+1不會(huì)越界。

3.未初始化常見誤報(bào)場(chǎng)景

誤報(bào)場(chǎng)景一(cppcheck)

以上第462行代碼報(bào)ret未初始化錯(cuò)誤,判定邏輯如下:ret變量在第434行聲明,在switch中的兩個(gè)case中均有初始化代碼,但是在default分支中沒有對(duì)ret進(jìn)行初始化,因此判定462行可能會(huì)返回一個(gè)沒有初始化的ret。

誤報(bào)原因:default分支中的xy_assert_retval是一個(gè)宏,因?yàn)閏ppcheck宏查找策略的原因?qū)е略摵隂]有展開。實(shí)際上宏展開包含了return語句,也就是說如果進(jìn)入default分支就函數(shù)就直接返回而不會(huì)執(zhí)行到462行代碼。

誤報(bào)場(chǎng)景二(coverity)

以上第284行代碼報(bào)careers未初始化錯(cuò)誤,判定邏輯如下:careers數(shù)組在第278行聲明,但在for循環(huán)對(duì)每個(gè)數(shù)組成員進(jìn)行了初始化。這可能造成careers完全沒有初始化,或者只初始化了一部分。因此在284行使用careers存在未初始化錯(cuò)誤。

誤報(bào)原因:通過代碼邏輯可知,career_num代表的是careers被初始化的長(zhǎng)度,在訪問careers數(shù)組元素的時(shí)候,通過career_num進(jìn)行了保護(hù),因此不會(huì)出現(xiàn)未初始化的錯(cuò)誤。

4.泄露類常見誤報(bào)場(chǎng)景

誤報(bào)場(chǎng)景一(TSC)

以上第63行代碼報(bào)fp存在資源泄露風(fēng)險(xiǎn)錯(cuò)誤,判定邏輯如下:xy_assert_retnone宏展開后,含有return語句,也就是說fp在調(diào)用fclose之前可能返回,存在泄露風(fēng)險(xiǎn)。

誤報(bào)原因:實(shí)際上代碼邏輯決定了函數(shù)return的前提條件fp為空。這個(gè)時(shí)候是沒有必要調(diào)用fclose的,不存在泄露風(fēng)險(xiǎn)。

誤報(bào)場(chǎng)景二(pclint)

以上第139行代碼(~CGIProcessor(), 析構(gòu)函數(shù))報(bào)存在資源泄露風(fēng)險(xiǎn)錯(cuò)誤,因?yàn)闆]有釋放_(tái)cgiContainer。判定邏輯如下:_cgiContainer作為CGIProcessor的一個(gè)指針成員(第149行),需要在析構(gòu)函數(shù)中進(jìn)行釋放,否則為內(nèi)存泄露。

誤報(bào)原因:CGIProcessor對(duì)象并不own _cgiContainer指向的對(duì)象,不需要它來釋放。

5.邏輯類常見誤報(bào)場(chǎng)景

誤報(bào)場(chǎng)景一(cppcheck)

以上4596行代碼報(bào)“對(duì)包含有float成員的對(duì)象調(diào)用memset方法”錯(cuò)誤。

誤報(bào)原因:利用memset對(duì)一個(gè)對(duì)象的數(shù)據(jù)字段清零是比較常見的做法,float成員清零后值也為0,不會(huì)造成什么問題。

原文轉(zhuǎn)載自:


標(biāo)簽:測(cè)試優(yōu)化代碼優(yōu)化C/C++軟件測(cè)試

本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@ke049m.cn


為你推薦

  • 推薦視頻
  • 推薦活動(dòng)
  • 推薦產(chǎn)品
  • 推薦文章
  • 慧都慧問
相關(guān)產(chǎn)品
軟件
  • 產(chǎn)品功能:測(cè)試分析
  • 源 碼:非開源
  • 產(chǎn)品編號(hào):13140
  • 當(dāng)前版本:v2025.1 [銷售以商家最新版為準(zhǔn),如需其他版本,請(qǐng)來電咨詢]
  • 開 發(fā) 商: Parasoft 正式授權(quán)
  • ">Parasoft C/C++test

    針對(duì) C/C++ 軟件開發(fā)提供統(tǒng)一、完全集成的測(cè)試解決方案。

    軟件
  • 產(chǎn)品功能:測(cè)試分析
  • 源 碼:非開源
  • 產(chǎn)品編號(hào):13559
  • 當(dāng)前版本:v2025 [銷售以商家最新版為準(zhǔn),如需其他版本,請(qǐng)來電咨詢]
  • 開 發(fā) 商: Gimpel Software 正式授權(quán)
  • ">PC-lint Plus

    PC-lint Plus是針對(duì)C和C ++的綜合靜態(tài)分析解決方案

    title
    掃碼咨詢


    添加微信 立即咨詢

    電話咨詢

    客服熱線
    023-68661681

    TOP
    利記足球官網(wǎng)(官方)網(wǎng)站/網(wǎng)頁(yè)版登錄入口/手機(jī)版登錄入口-最新版(已更新) 真人boyu·博魚滾球網(wǎng)(官方)網(wǎng)站/網(wǎng)頁(yè)版登錄入口/手機(jī)版登錄入口-最新版(已更新) 最大網(wǎng)上PM娛樂城盤口(官方)網(wǎng)站/網(wǎng)頁(yè)版登錄入口/手機(jī)版登錄入口-最新版(已更新) 正規(guī)雷火競(jìng)技官方買球(官方)網(wǎng)站/網(wǎng)頁(yè)版登錄入口/手機(jī)版登錄入口-最新版(已更新) 雷火競(jìng)技權(quán)威十大網(wǎng)(官方)網(wǎng)站/網(wǎng)頁(yè)版登錄入口/手機(jī)版登錄入口-最新版(已更新) boyu·博魚信譽(yù)足球官網(wǎng)(官方)網(wǎng)站/網(wǎng)頁(yè)版登錄入口/手機(jī)版登錄入口-最新版(已更新) 權(quán)威188BET足球網(wǎng)(官方)網(wǎng)站/網(wǎng)頁(yè)版登錄入口/手機(jī)版登錄入口-最新版(已更新) 正規(guī)188BET足球大全(官方)網(wǎng)站/網(wǎng)頁(yè)版登錄入口/手機(jī)版登錄入口-最新版(已更新) 成人午夜福利免费无码 | 国产成人一区二区在线观看 | 2025国语电影免费在线观看 | 2025国产午夜福利 | 国产精品成人在线 | 国产成人亚洲精品无码综合原创 | 国产成人av免费 | 国产高清午夜自在在线 | 国产高清一区二区三区人妖 | 国产超碰人人做人人爱ⅴa 国产超碰人人做人人爱电影 | 国产1区2区3区4区 | 国产中文欧美 | 国产成人亚洲日韩欧美 | 国产黄页网址大全免费 | 91桃色无码国产在线观看二区 | 国产精品高清全国免费观看 | 国产午夜无码片在线观看网站 | 国产综合久久久久 | 国产中文字幕在线观看 | 国产成人精品免高潮在线观看 | 国产精品嫩草影院 | 3d动漫精品啪啪一区二区免费 | 91尤物手机在线观看 | 国产欧美日韩视频免费61794 | 91久久如何满足用户需求 | 国产成人国产在线观看入口 | 国产精品日本一区二 | 国产av无码专区亚洲av人妖 | 国产呦精品一区二区三区下载 | 国产精品丝袜美女久久 | 国产精品日韩精品中文字幕 | 国产午夜三级一区二区 | av在线高清亚洲 | 18禁男女污污污午夜网站 | 精品国产日韩亚洲一区在线 | 国产麻豆激情视频在线观看 | 国产一区二区三四区在线观看 | 国产一区二区青草久久 | 91在线视频免费看 | 91麻豆国产精品91久久久 | 精品久久久久久中文无码 | 囯产精品久久久久久久久免费蜜桃 | 精品视频精品免费 | 精品无码成人片一区二区98 | 国产福利一区二区三区四区 | 精品人妻一卡二卡三卡 | 国产做a爱片久久毛片a片 | 国产丝袜在线视频亚洲 | 国产经典自拍一区 | 成人免费av毛片 | 变态另类一区二区sm | 99国产欧| 国产精品无码免费专区午夜 | 国产一区二区三区色噜噜图片 | 成人的天堂视频一区二区三区 | 精品视自拍视频在线观看 | 国产精品视频一区二区亚瑟 | 国产精品免费观看在线观看 | 国产精品一一老牛影视视 | 国产系列在线频高清在线观看 | 国产成人久久一区二区三区 | 2025最新国产成人精品免费 | 2025无码国产在线视频 | 国产三级在观线 | 99精品国产丝袜在线拍国语 | 国产亚洲精品久久久久一区 | 国偷自产av一区二区三区不卡 | 精品国产制服丝袜高跟 | 91人妻中文字 | 国产精品国产三级厂七 | 国产欧美日韩区二区 | 国产成人精品福利网站 | 国产人妻高清国产拍精品 | 精品国内自产拍在线播放观看 | 国产真实露脸乱子伦 | 国产精品出租屋系列 | 国产a久久精品 | 国产精品一在线观看 | 国产91特黄特色a级毛片 | 2025最新无码精品国产 | 国产精品偷伦视频免费手机播放 | 国产精品入口 | 91极品女神私人尤物在线播放 | 国产精品视频一区二区三区不卡綜合 | 国产一区亚洲二区三区毛片 | 99久久婷婷国产一区二区 | 粉嫩av无码一区二区三区软件 | 国产aⅴ无码专区亚洲av综合网 | 国产精品高清偷窥盗摄 | 国产成人综合一区精品 | 成人一区专区在 | 国产99久久亚洲综合网 | 国产成人无码区免费内射一片色欲 | 国产精品亚洲香蕉第五区 | 91无码久久国产线看观看 | 成人爽片在线免费看 | 成人区精品一区二区毛片不卡 | 国产日韩精品在线播放 | 国产福利一区二区三区在线视频 | h无码精品动漫在线观看免费下载 | 国产无套粉嫩白浆免费观看 | 91福利国产在线观看一区二区 | 2025国内自拍视频在线播放 | 国产精品美女挤奶汁视频 | 国产精品成人三级 | 极品色在线精品视频 | 国产精品不卡一区二区 | 国产成人户外露出视频在线观看 | 国产一区中文字幕 | 国产精品v毛片免费看视频 国产精品v毛片免费软件 | 精品人妻一区二区三区曰产乱码 | 成人免费视频在线播 | 丰满人妻精品一区二区 | 国产三级无码内射在线看 | 国产精品成人啪精品视频免 | 69人妻精品久久无人专区 | 国产经典aⅴ三级观看 | 99久久精品亚洲国产 | 国产成在线观看免费视频密 | 丰满的岳乱一区二区 | 国产美女精品在线 | a级国产乱理伦片在线 | 国产免费一区二区三区免费观看 | 国产高清无码在线 | 国产精品高清在线看 | 国产亚洲制服免视频 | 精品日韩欧美一区在线播放不 | av在线免费不卡可看 | 国产午夜三级片 | 成人精品一区在线 | 成无码三级视频 | av王无码中文字幕 | 国产午夜免费啪视频观看视频 | 国产一区视频在线免费观看 | 不卡人妻午夜中文在线 | 国产偷录视频叫床高潮 | 成人无码免费看 | 国产美女久久久久久久久久久 | 国产精品一级二级 | 国产精品成人观看视频国产奇米 | 国产在线精品无码 | 国产高清在线精品四区 | ww成人片在线观看 | 国产无码中文字幕在线观看 | 91人妻无码一区二区免费 | 高清国产亚洲精品自在久久 | 成人国产片免费在线观看 | 91丝袜高潮流白浆潮喷在线观看 | 2025国产在线观看不卡视频 | 国产巨臀系列在线观看 | 99国产精品高清一区二区二区 | 国产亚洲精品久久无亚洲 | 国产自无码视频在线观看手机 | 国产3级在线高清手机在线播放 | 成人黃色一級片91久久午夜 | 国产做野战视频在线观看 | 国产偷抇久久精品a片蜜臀a | 韩国高清无码久久av | 国产猛男猛女超爽免费视频 | 国产成人片一区二区三区白 | 高清无码不卡视频 | 国产精品疯狂输出白丝jk | 911亚洲精品青草衣衣 | 国产精品民宅偷窥盗摄 | 国产动漫一区 | 国产欧美日韩灭亚洲精品 | 成人综合亚洲欧美天堂 | 国产精品一区二区三区免费视频 | 国产一区欧美一区二区 | 国产毛a片啊久久久久久按摩 | 国产囗交口爆吞精在线视频 | 国产欧美日韩综合精品二区 | 国产在线观看一区免费精品 | 国产蜜桃tv一区二区无码 | 国产成人久久综合一区77 | 国产午夜精品毛片不卡 | 波多野结衣人妻在线一区二区 | 福利一区在线视频 | 成人一区二区三区漫画 | 国产高清国内精品福利色噜噜 | 国产91久久精品一区二区 | 国产成人精品日本亚洲尤物 | 91精选国产大片 | 国模少妇一区二区三区 | 国产成人狂喷潮在线观看2345 | a级日本乱理伦片免费入口 a级日本乱理伦片免费入口: | 国产成人亚洲日韩欧美 | 国产成人精品综合久久久久 | 成人欧美一区二区三区在线观看 | 911天堂国产在线观看 | 国产午夜不卡 | 国产高清不卡免费视 | 国产午夜福利一区视频 | 国产成人在线观看网站 | 国产91尤物中文在线 | 精品视频一区二区三区免费观 | 国产成人一区二区三区综合网影院 | 极品尤物国产在线播放 | 国产欧美精品一区二区三区涩涩 | 国产激情一区二区三区成人91 | av片不卡在线观看 | 国产精品国产三级国产专播 | 高清中文字幕在线 | 海角社区国产精品伦子伦免费 | 911国产网站尤物在线观看 | 精品国产精品国自产网站 | 国产a级国片免费播放 | 国产色婷婷精品综合在线手机播放 | 国产成人精品一区在线 | 成人无码在线视频网站 | 国产成人w一区二区三区综合 | 国产午夜福利精品偷伦91 | 国产精品大白天新婚身材 | 国产粗语刺激 | 精品亚洲香蕉一区二区 | 国产成人精品麻豆免费网站 | 国产精品爽爽在线观看 | 国产高清av在线播放无弹窗 | 精品久久久久久中文字幕无码漫画 | 国产白丝jk制服在线视频 | 国产一区美女视频 | 国产原创一区二区 | 国产精品无码专区在线观看不卡 | 国产一级无码视频 | 国产欧美亚洲日本网站 | 成人午夜福利视频镇东影视 | 国产盗摄一区二区欧美精品 | 99久久国语露脸精 | 国产一本大道香蕉大在线 | 国产成人激情视频 | 国产91丝袜播放动漫 | 91精品亚洲欧美一区二区综合 | 国产91在线免费观看 | 丰满白嫩尤物啪啪 | 国产精品玖玖 | 丰满少妇大乳高潮在线 | 国产自在现偷国产精品国产日韩 | 国产精品欧美亚洲大片在线观看 | 成人无码网www在线观看软件 | 国产成人精品一区二区不卡 | 国产av巨作无遮挡 | 1024国产精品一区在线观看 | 国产精品九九久久精品女同 | 激情都市亚洲一区二区 | 国产麻豆天美果冻无码视频 | 国产91l在线播放 | 白丝护士高潮喷水免费网站 | 国产精品视频一二三四五 | 精品无码一区二区三区av | 成人精品国产区在线观看 | 国产成年女人特黄特色大片免费 | 国产精品福利在线观看无码卡一 | 精品日韩在线视频一区二区三 | 国产精品白嫩极品久久久久 | 国产成人精品本亚洲 | 国产精品福利自产拍 | 国产激情视频白浆免费 | 国产丝袜不卡一区二区 | 精品美女国产福到在线 | 国产精品高潮久久久久 | 风韵丰满熟妇啪啪区老熟熟女 | 精品国产专区91在线官网 | 91精品国产乱码久久蜜臀 | 18国产精品白浆在线观看 | 国产av无码无遮挡毛片 | 成人欧美在线视频 | 成人免费无码婬片在线观看免费 | 99久免费精品视频在线观看 | 91亚洲精品一 | 精品国产av一区二区三 | 韩国美女高清爽快一级毛片 | 国产尤物在线观看一区二区 | 成人黄色视频免费播放 | 91成人在线观看 | 国产成人无码综合亚洲日韩色欲 | 国产熟睡乱子伦视频观看软件 | 18禁裸乳无遮挡啪啪无码免费 | av无码精品久久久久精品免费 | 国产极品高清在线播放 | 91久久久久新精品 | 国产a级一级久久毛片 | 国产麻豆精品入口在线观看 | 91精品国产综合久久香蕉爱欲 | 国产精品亚洲电影久久成人影院 | 国产精品成人av电影不卡 | 国产精品线在线精品国语 | 国产精品伦视 | 国产成人毛片在线视频软件 | 国产微拍一区二区三区四区 | 国产亚洲欧美日韩在线我不卡 | 极品欧美一区二区 | 高清一区二区亚洲欧美日韩 | 国产精品无码一区二区三区 | 国产高清无码黄片亚洲成人毛片 | 精品国产免费第一区二区三区日 | 2025国产精华国产精 | 99久久精品国产毛片 | 国产在线制服丝袜国产 | 成人的天堂视频一区二区三区 | 成人无码区免费视频网站入口 | 高h纯肉无码视频在线观看 高h短篇辣肉各种姿势自慰h | 成人午夜免费福利视频 | 国产成人av区一区二区 | 精品人妻午夜一区二区三区 | 国产精品一级毛片无码 | 国产91丝袜播放动漫 | 超级香蕉97视频在线观看一区 | 国产精品一区二区国产馆蜜桃 | 国产ol丝袜高跟在线观看 | av中文字幕| 国产成人亚洲精品无码青草 | 国产对白俱乐部交换在线播放 | 成人无码免费看 | 精品人妻一区二区三区曰产乱码 | 国产精品视频网国产 | 精品人妻无码专区中文字幕 | 国产精品在线就撸 | 国产精品制服丝袜亚洲欧美 | 18禁无遮挡爽爽爽无码视频 | 国产成人精品久久亚洲高 | 国产91精品一区麻豆亚洲 | 国产亚洲国产真人av | 国产欧美日韩小视频高清 | 国产真实喝醉系列39女同事 | 国产综合成色在线视频 | 成人午夜精品久久久久久久秋霞 | 国产av天堂一区二区三区 | 成人国内精品久久久久影 | 国产经典系列在线观看 | 国自产拍偷拍精品啪啪一区二 | 国产精品日产无码av永久不卡 | 国产午夜精品久久理论片小 | 国产精品一区二区久久毛片 | 国产一区高清三级久色成人 | 岛国一区二区三区视频 | 国产激情福利久久精品麻豆 | 国产成人美女福利在线观看 | 国产精品入口麻豆 | 国产亚洲日韩在线播放人成 | 国产精品人人妻人人爽人人牛 | 国产精品先锋在线直播 | 91无码人妻精品一区二区三区 | 成人区精品一区二区不 | 国产成人丝袜视频在线观看 | 2025精品极品国产 | www.亚洲一区二区三区 | 国产蜜臀一区二区三区亚洲 | 国产精品无码一区二区aⅴ污美国 | 国产一区二区三区四区五区视频 | 国产99久久久国产精品~~牛 | 国产精品欧美韩国日本久久 | 国产不卡福利片在线观看浪潮 | 91露脸熟女四川熟女在线观看 | 国产亚洲精aa在线观看see | aⅴ人在线观看 | www国产精品内射老熟 | 国产精品一区二区三区01 | 精品国欧美一区二区三区 | 2025天堂中文幕一二区在线观 | 97人妻免费公开视频在线看 | 99久久综合狠狠综合久久aⅴ | 国产a毛片| 99久久久久久久无码 | 国精品一区二区三区免费观看 | 成人国产亚洲欧美一区 | 国产激情视频在线观看的 | 精品国产乱码九九九久久久 | 91嫩草私人成人亚洲影院 | 成人免费的性色视频播放 | 91精品国产三级a在线 | 国产交换配乱婬视频偷 | 国产精品国产三级国产av主播 | 国产一级片内射 | 国产麻豆精品视频 | 国产精品成人无码免 | 国产日本精品一区二区 | 国产一区二区在线免费观看 | 91精品导航在线网址 | 91天天综合丝袜内裤高跟鞋 | 国产超碰人人做人人爱ⅴa 国产超碰人人做人人爱电影 | 国产午夜精品久久理论片小 | 国产在线无码不卡播孜 | 国产精品视频无码 | 精品一区二区三区免费视频 | 国产亚洲欧美日韩综合另类 | 精品高清美女精品国产区 | 国产91精品看黄网站在线观看 | 国产成人精品日本亚洲直播 | 国产美女下面流白浆视频 | 国产精品亚洲片牛牛 | 国产高清无码在线观看 | 成人在线91日韩手机视频 | 91精品人妻一区二区三区蜜桃 | 国产高清在线免费观看 | 成人午夜精品久久久久久久小说 | 国产熟女乱子伦精品 | 69精品人人人人 | 国产成人精品一区二区免费网站 | 国产高清不卡一区二区三区 | 国产精品无码久久av不卡 | 二区日本成 | 国产成人午夜 | 国产美女福利视频一区二区 | 国产麻豆精选av精彩内容大揭秘 | 国产精品自拍小视频 | 国产福利一区二区三区四区 | 国产极品白嫩精品无码视频 | 国产成人精品一区二区三区视频 | 国产成人免费āv片在线观看 | 国产一区二区丝袜美腿在线 | 91精品国产现在观看 | 国内精品一区二区三区不卡 | 国产a毛片精品日日夜 | 97无码国产精品 | 国产麻豆媒一区一区二区三区 | 成人无码免费一区二区三区 | 国产欧美精品国产第一区 | 91福利国产在线观看香蕉 | 成年女人毛片免费视频播放器 | 国产精品无码无片在线观看 | 国产欧美久久一区 | 国产精品亚洲五月天高清 | 国产成人无码a区在线观看导航 | 国产果冻豆传媒麻婆精东 | 国产三级a三级a三级 | 国产午夜不卡av高清 | 国产精品天干天干在线下载 | 91福利一区入口 | 国产精品国三级国产av视色 | 成人欧美一区二区三区在线电影 | 18成禁人视频免费午夜影视 | 成人va在线一区二区三区四区 | 国产中文字幕无码人妻 | 国产精品成人一区二区三区视频 | 国产福利免费的网址 | 国产精品成人无码视频 | 高清欧美日韩一区二区三区在线 | 成人无码h动漫在线网站免费y | 国产人妻久久精品二区三区特黄 | 97人妻碰碰碰久久久久禁片 | 国产精品国产亚洲精品看不卡 | 国产一区二区视频在线 | 国产美女视频免费观看的网站 | 国产午夜精品在人线播放 | 东京热无码中文人妻 | 国产在线播放成人午夜精品 | 国产精品国产福利国产秒拍 | 国产对白俱乐部交换在线播放 | 韩国公妇里乱片a片免费观看 | 国产欧美日韩综合第一区第二区 | 国产精品视频视频久久 | 国产极品粉嫩福利姬萌白酱 | 国产高清精品在线 | 国产精品丝袜亚洲熟女 | 91精品国产91久久综合 | 国产亚洲精aa在线看 | 国产精品成人观看视频国产奇米 | 国产大学生喷水流白浆视频 | 国产成人精品久久久久免费 | 91国偷自产一区二区三区 | 91国在线啪精品一区 | 国产精品毛片久久 | 成人午夜福 | 国产91白丝在线播放 | 国产精品六区久久综合亚洲av | 国产aⅴ无码专区亚洲aⅴ毛 | 国产精品免费在线播放 | 精品无人区乱码在线观看 | 国产欧美日韩另类一区乌克兰 | 国产精品视频一区无码 | 精品国产亚洲老地址 | 国产成人综合精品 | 国产午夜精品福利 | 国产亚洲欧美在线视须 | 国产激情一级毛片在线视频 | 国产成人免费午夜在线观看 | 国产午夜精品无码一区二区 | 国产成人精品久久综合 | 精品特黄在线观看 | 91精品久久久久久久蜜臀 | 91久久精品人妻 | 国产亚洲精久久久久久无码色戒 | 国产精品人人操人人爽 | 丰满熟女人妻一区二区三 | 国产福利91精品一区二区三 | 高清一区二区亚洲欧美日韩 | 2025国产成人精品视频 | 成人一在线视频日韩国产 | 国产欧美精品在线一区二区三 | 91午夜伦伦电影理论片 | 国产一区二区在线观看动漫 | 精品国产一区二区三区免费看 | 国产69精品久久久久无码小说 | 国产精品欧美一区二区三区不卡 | 成人在线一区二区三区四区 | 国产精品日本一区二区在线播放 | 成人中文字幕在线 | 国产a一级黄片视频 | 91精品福利一区二区三区 | 国产91调教在线观看 | 2025无码不卡免费视频观看 | 国产精品福利网站导航伊人网 | 国产午夜草莓视频在线观看 | av免费网址在线 | 国产日韩午夜三级无码专区直播 | 国产艳情熟女视频 | 18禁美女黄网站色大片免费看 | 国产麻豆天美果冻无码视频 | 国产一级美女户外自慰操穴α片 | 国产激情视频一区二区三区 | av免费网址在线看 | 国产日本精品一区二区 | 国产精品国产三级囯产av中文 | 丰满年轻岳欲乱中文字幕电影 | 国产欧美丝袜在线二蜜芽tv | 国产午夜亚洲精品不卡福利 | 丰满人妻一区二区三区无码av | 国产成人激烈叫床视频 | 国产偷啪视频一区 | 国产精品一区在线看 | 成人亚洲国产精品无码久久一线 | 国产巨作麻豆欧美亚洲综合久久 | 国产高清在线观看一区二区三区 | 国产日韩一区二区不卡视 | 国产精品无码久久综合网老 | 18禁白丝喷水视频w 18禁白丝喷水视频www | 国产在线91免费网站 | 国产成人综合激情视频在线观看 | 国产精品午夜高清在线观看 | 国产爆初菊在线观看免费视频 | av在线播放日韩亚洲欧 | 国产亚洲精久久久久久无码av | 国产大学生一区 | 91精品国产高清久久久电影 | www夜片内射视频在观看视频 | 潮喷失禁大喷水a | 国产精品无码午夜免费影院 | 国产欧美视频在线观看 | 国产成人一区免费观看 | 成人三级精品视频在线观看 | 91精品国产色综合久久不卡蜜 | 高清无码中文字幕影片 | 91九色国产社区在线观看 | 91久久99久9| 91日韩精品久久久久精品无码 | 国产成人爱片免费观看视频 | 国产无套精品 | 二区三区在线观看 | 国产三级电影网站 | 国产午夜理论电影在线观看 | 成年女人毛片免费观看97 | 国产日韩一区二区在线观看 | 国产aⅴ精品一区二区三区久 | 91大片淫黄大片在线天堂 | av无码一区二区大桥未久 | 国产精品免费区二区三区观看 | 国产午夜理论不卡在线观 | 高清无码中文字幕乱码 | 国产精品午夜福利在线观看地址 | 91妻友:夫妻交友新体验 | 91精品久久人人妻人 | 国产精品自拍三级片 | 国产一级毛片视频网 | 911在线国产在线播放 | 国产午夜成人久久无码一区二区 | 国产做ā爰片久久毛片ā片 | 国产毛片毛片精品天天看 | 精品无码制服丝袜日韩视频 | av喷水高潮喷水在线观看 | 国产盗摄xxxx视频xxxx | 国产在线一区二区 | 国产无套内射一级毛片农民工 | 国产综合自在线另类 | 国产aⅴ日本一区二区三区 国产aⅴ视频一区二区三区 | 91精品亚洲欧美一区二区综合 | 18禁无遮挡全彩漫画免费 | 成人一级免费激情网 | 国产毛多水多高潮高清 | 后入内射少妇 | 精品国产人妻一区二区三区 | 国产成人av无码在线 | 99精品视频观看 | 99久久精品费精品国产一区二 | 91麻豆国产免费 | 精品一级毛片一区2区3区 | 国产在线观看免费无码 | 91精品国产免费无套国产 | 99久久午夜精品一区二区 | 国产产一区二区三区久久毛片最强 | 国产欧美一级大片 | 国产成人久久久精品二区三区 | 国产精品专区在线观看 | 国产三级一区二区三区 | 国产精品白浆大屁股一区二区三 | 国产成人免费视频精品一区二区 | 国产a级作爱片无码高级 | 国产福利萌白酱在线观看视频 | 国产精品成人免费观看 | 国产无码专区精品 | 国产精品老熟女视频一区二区 | 高清无码毛片在 | av中文字幕一区少妇 | 国产精品视频一区二区三区四 | 国产午夜福利精品一区二区 | 国产精品高清视亚洲一区二区 | 91免费视频在线观看一区影视 | 国产成人精品久久亚洲高清 | 高清偷自拍亚洲精品三区 | 精品亚洲一区二区三区在线观看 | 国产福利午夜九二网免费 | 国产福利区一区二 | 91制片厂果冻星空传媒科幻 | 国产精品国产三级国产av品爱 | 国产自在自线午夜精品视频在 | 国产福利刺激视频视频 | 国产精品毛片久久久久久久 | 国产高清japanese在线播放 | 91极品女神私人尤物在线播放 | 成人无码视频在线观看网站 | 国产精品无码首页自拍 | 国产女同女互慰流白浆视频 | 国产精品无码一区二区久日韩亚 | 91精品国产免费久久蜜桃 | 国产精品免费久久久久电影院 | 国产午夜亚洲精品不卡 | 国产精品午夜理论片 | 国产sm | 国产精品伦一 | 精品人妻无码中字系列 | 97人妻人人做人碰人人添 | 国产成人免费影院在线 | 国产三级韩国三级日产三级 | 91在线精品麻豆欧美在线 | 国内自拍视频在线 | 国产精品美女在线观看 | 国产精品无码午夜福利 | 国产精品后入内射日本在线观看 | 精品国产欧美一区二区三区成人 | 精品无码国产av综合 | 91亚洲中文天| 国产麻豆精品免费va | 18处破外女出血视频在线观看 | 国产一区二区三区高清在线 | 2025国产精品最新在线 | 国产精品成人久久 | 18禁无遮挡无码网站免费 | 国产不卡理论片在线观看 | 成人午夜一区二区三区视频 | 2025国产精品 | 成人精品动漫一区二区 | 国产午夜精品无码理论片 | 国产精品成人a在线观看网站。 | 国产成a人片在线观看视频下 | 国产亚洲欧美在线专区 | 精品视频一区二区三区在线观看 | 国产一区二区三区福利在线观看 | 精品国产免费人成在线 | 精品97国产免费人成视频 | 成人精品一区二区三区电影 | 精品一区二区女厕 | 高清中文字幕在线a片 | 国产成人精品一区二区秒拍 | va亚洲国产欧美日韩另类 | a亚洲无码中字幕在线观看 a亚洲中文字幕人成影院 | 91久久精品一区二 | 国产一精品一av一免费爽爽 | 国产成人一区二区三区影院 | 福利姬视频在线免费观看 | av片在线免费观看 | 国产午夜精品理论片久久久 | 国产精品高清无码在线观看 | 国产一区二区四区 | av网站在线观看三级片 | 国产精品一区二区无码 | 国产精品香蕉人多人在线观看 | 国产精品一亚洲av日韩av欧 | a级毛片无码兔费真人久久91 | 成人国产精品日本在线 | 成人精品在线 | 国产成a人亚洲精ⅴ品无码樱花 | 国产人妖一区二区动漫黄片 | 国产日韩一区二区不卡视 | av无码精品1区2区3区 | 国产一级美女户外自慰操穴α片 | 国产人妖乱国产精品人妖 | 国产一区二区三区免费在线视频 | 精品国产一区二区三区不卡 | 91麻豆 | 国产99精品老女人免费观 | av综合网男人的天堂 | 成人无码区免费视频网站蜜臀 | 动漫av纯肉无码av在线播放 | 动漫成年美女黄漫网站在线观看 | 国产美女精品一区二区三 | 国产人妻精品一区二区三区不卡 | 国内精品一区二区三区不卡 | 国产成人综合亚洲亚洲欧美 | 调教视频一区 | 国产成人综合91精品 | 国产电影无码午夜在线播放 | 国产成人精品日本亚洲专一区 | 国产成人福利久久久精品 | 精品日本一区 | www.毛片| 韩国欧美日本亚洲一区二 | 国产精品国产三级国产av主播 | 91精品国产九九九九九九亚洲 | 国产91无码网站在线观看 | 国产精品亚洲一区 | 国产欧美日韩综合在线一区二区 | 国产成人精品a视频一区 | 国内精品视频一区二区三区八戒 | 国产爆白浆水真多视频 | 91精品国产福利在线导航 | 国产精品一区波多野结衣 | 国产白袜脚足j棉袜在线观看 | 69国产成人精品午夜福中文 | 精品日韩妇女视频在线观看 | 2025最新无码免费 | 国产高清国产精品国产k | 国产原创在线 | 成人无码免费一区二区三区 | 国产精品成人h视频 | 国产蜜桃tv一区二区无码 | 国产精品成人一区二区 | 99精品视频九九精品视频 | 韩日性视频 | 国产自慰喷水 | 精品无码午夜福利免费看 | 国产精品三级一区二区 | 成人国产午夜在线视频 | 国产成人无码免费一区二区三区 | 国产精品熟女一区二区三区 | 91亚洲自偷手机在线观看 | 精品香蕉一区二区三区浪潮 | 国产高清一区二区三区人妖 | 国产精品白丝av嫩草影院 | 国产欧美日韩灭亚洲精品 | 92国产福利久久青青草原 | 国产午夜专区在线观看 | 97人人模人人爽 | 91久久久精品人妻无码专区不卡 | 国产高清无码精品性爱 | 1024国产精品免费观看 | 91精品一区二区三区久久久久 | 成av人片在线观看 | 国产精口品美女乱子伦高潮 | av无码一区二区三区鸳鸯影院 | 成人国产网站v片免费观看 成人国产亚洲精品a区天堂 | 国产精品成人va在线播放 | 精品午夜福利视频 | 国产精品制服丝袜四区 | 国产精品日本欧美一区三 | 国产精品对白刺激久久久 | 国产成人精品久久亚洲高清不亚洲 | 成人免费午夜无码视频在线观看 | 97人妻人人做人碰人人爽 | 国产午夜无码片在线观看网站 | 国产宾馆精品在线播放 | 国产一区二区三区无码免费 | 成人免费无码大片a毛片 | 国产精品日本一区二区在 | 国产在线观看一级 | 国产a级精品一级毛片 | 精品少妇白浆小泬 | 成人无码免费一区二区三区 | 国产高潮流白浆喷水动 | 91麻豆免费免费国产观看 | 国产精品一区二区三级 | 国产md视频一区二区三区 | 高潮流白浆潮喷在线观看 | 国产按头吞精在线视频 | 丰满一个美女app视频免费软 | 国产高清视频在线观看不卡 | 国产精品导航一区二区 | 91无码人妻aⅴ一区二区三区 | 成人免费午夜无码视频 | 国产亚洲日韩中文字幕欧美视频 | 国产精品成人免费视频网站京东 | 1000部啪啪未满十八勿入不卡 | 国产日韩新片无码一区 | 国产精品麻豆一区二区三区v视界 | 18禁很色很爽很黄的免费网站 | 国产成人亚洲精品无码av大片 | 国产成人精品一区二 | 成人午夜高潮a∨猛片 | 国产精品免费视 | 国产一区免费精品在线 | 黑人巨大精品一区二区在线 | 2025亚洲综合一| 国产成人啪精品视频免费软件 | 国产精品毛片av一级 | 91精品久久久久久久久久 | 国产一级无码片在线观看 | 国产91精品高跟丝袜在线 | av国内精品久久久久影院 | 精品无码一区二区三区免费看 | 国产99久久亚洲 | 国产午夜伦伦 |