亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營的一線實(shí)戰(zhàn)洞察。

編譯通過≠代碼健康:C++靜態(tài)檢測原理與工具落地指南

編譯通過≠代碼健康:C++靜態(tài)檢測原理與工具落地指南 編譯通過不等于代碼健康C靜態(tài)檢測到底在查什么我做C開發(fā)這些年越來越覺得一個(gè)道理編譯器不報(bào)錯(cuò)只是說你的代碼符合語法和類型規(guī)則它壓根不關(guān)心你的邏輯是不是對的、指針是不是懸空的、資源有沒有泄漏。很多問題要等到運(yùn)行時(shí)才炸炸的時(shí)候往往已經(jīng)晚了。所以后來我在項(xiàng)目里強(qiáng)制推行C代碼靜態(tài)檢測把它當(dāng)成和單元測試一樣重要的質(zhì)量關(guān)卡。這篇文章想把靜態(tài)檢測這件事講透——它是什么原理、為什么編譯器做不到、工具怎么選、怎么真正落地到項(xiàng)目里以及你一定會(huì)遇到的誤報(bào)問題。不管你是剛接觸C的學(xué)生還是維護(hù)著幾十萬行存量代碼的開發(fā)者看完應(yīng)該都能找到自己能上手的切入點(diǎn)。1. 編譯器漏掉的坑為什么C格外需要靜態(tài)檢測1.1 編譯器只關(guān)心語法對不對不關(guān)心代碼對不對先說個(gè)我經(jīng)常舉的例子。你把一段代碼交給編譯器它在意的核心就兩件事語法是否符合語言規(guī)范、類型是否匹配。只要這兩關(guān)過了哪怕你的代碼明顯有邏輯問題它也會(huì)給你生成一個(gè)清清爽爽的可執(zhí)行文件。比如這樣一段非常典型的錯(cuò)誤代碼char* getBuffer() { char buf[256]; // 填充buf... return buf; // 返回了棧內(nèi)存的地址 }編譯器編譯這段代碼不會(huì)報(bào)任何錯(cuò)誤最多給個(gè)warning有些編譯器連warning都不給。但等你調(diào)用這個(gè)函數(shù)拿到的指針指向的是一塊已經(jīng)被回收的棧內(nèi)存接下來發(fā)生什么完全看運(yùn)氣——可能立刻崩潰可能數(shù)據(jù)被篡改也可能恰好還能跑然后在完全沒有關(guān)聯(lián)的地方出現(xiàn)詭異問題。這就是C里著名的懸空指針問題而靜態(tài)檢測工具能通過分析變量的生命周期直接指出你返回了一個(gè)局部變量的地址。C為什么比別的語言更需要靜態(tài)檢測因?yàn)樗o了程序員極大的自由度同時(shí)也把很多安全責(zé)任交給了程序員。手動(dòng)管理內(nèi)存、指針運(yùn)算、隱式轉(zhuǎn)換、位操作……這些特性讓編譯器很難在生成代碼之前判斷邏輯上的錯(cuò)誤。靜態(tài)檢測就是在編譯和運(yùn)行之間加了一層專門盯著邏輯和潛在風(fēng)險(xiǎn)的眼睛。1.2 動(dòng)態(tài)檢測和靜態(tài)檢測是兩種完全不同的思路很多同事會(huì)問我有Valgrind也有AddressSanitizer跑起來能直接看到內(nèi)存泄漏和越界訪問為什么還要用靜態(tài)檢測這就要說清楚兩類工具的定位差異。動(dòng)態(tài)檢測工具如Valgrind、ASan的思路是運(yùn)行代碼然后在運(yùn)行時(shí)觀察它的行為。它的優(yōu)點(diǎn)是準(zhǔn)確一旦報(bào)錯(cuò)基本就是實(shí)錘缺點(diǎn)是必須讓程序真正跑起來還要覆蓋到那一條出問題的執(zhí)行路徑。如果你的某個(gè)bug只在一百萬次運(yùn)行里出現(xiàn)一次而且只在特定輸入下出現(xiàn)動(dòng)態(tài)檢測可能永遠(yuǎn)等不到那一刻。靜態(tài)檢測的思路恰恰相反不運(yùn)行代碼直接把源代碼讀進(jìn)去沿著所有可能的執(zhí)行路徑分析一遍。它不需要輸入數(shù)據(jù)、不需要啟動(dòng)程序、不需要特定的運(yùn)行環(huán)境所以能覆蓋到那些平時(shí)很難觸發(fā)的分支。代價(jià)是它只能通過推斷來發(fā)現(xiàn)問題這一推斷就可能產(chǎn)生誤報(bào)——這個(gè)后面細(xì)說。兩者不是替代關(guān)系是互補(bǔ)關(guān)系靜態(tài)檢測負(fù)責(zé)在代碼提交時(shí)大面積掃雷動(dòng)態(tài)檢測負(fù)責(zé)在出現(xiàn)可疑行為時(shí)精確確診。2. 靜態(tài)檢測工具的原理一條C代碼在檢測器內(nèi)部走什么樣的流程2.1 從源碼到AST檢測器先要讀懂你的代碼很多人以為靜態(tài)檢測就是拿正則表達(dá)式匹配代碼字符串這是最大的誤解。正則那種做法只能抓點(diǎn)皮毛比如檢查函數(shù)名是不是駝峰式、有沒有多余的空白字符。真正能發(fā)現(xiàn)深層bug的靜態(tài)檢測第一步是把源代碼解析成一棵抽象語法樹AST。AST是什么可以理解為代碼的骨架結(jié)構(gòu)。比如一個(gè)簡單的表達(dá)式if (a b) { return a; }在AST里它不是一串字符而是一個(gè)樹狀結(jié)構(gòu)根節(jié)點(diǎn)是if語句它有兩個(gè)子樹——條件部分是大于比較表達(dá)式比較表達(dá)式的左右子節(jié)點(diǎn)分別是變量a和變量bthen分支是return語句return語句的子樹里有變量a。檢測器拿到這棵樹就能精確地回答這里的變量a是什么類型它的生命周期是什么范圍它有沒有被初始化過這類語義問題。Clang-Tidy這類基于Clang的工具會(huì)直接把Clang解析源碼后生成的AST拿過來用。這意味著它的解析能力和編譯器本身是同一套不存在檢測器的理解和編譯器不一致這種低級(jí)問題。2.2 控制流圖與數(shù)據(jù)流分析檢測器怎么看見運(yùn)行時(shí)的錯(cuò)誤光有AST還不夠。很多問題需要在所有可能的執(zhí)行路徑上去判斷這時(shí)候檢測器會(huì)把AST轉(zhuǎn)換成控制流圖CFG。你可以把控制流圖想象成一張地圖上面每個(gè)節(jié)點(diǎn)是一段代碼箭頭表示可能的執(zhí)行去向。if-else會(huì)產(chǎn)生兩個(gè)分支循環(huán)會(huì)形成回路switch會(huì)產(chǎn)生多條岔路。有了控制流圖檢測器就能做數(shù)據(jù)流分析——跟蹤一個(gè)變量的定義、賦值、使用、銷毀的完整過程。舉個(gè)例子int* p nullptr; if (condition()) { p new int(42); } *p 0; // 如果condition()返回falsep一直是個(gè)空指針數(shù)據(jù)流分析會(huì)沿著condition()為false這條路徑一路走下去發(fā)現(xiàn)p在被賦值之前就被解引用了。這個(gè)分析不需要真實(shí)運(yùn)行程序它只是把代碼里的路徑全部走了一遍。這就是為什么靜態(tài)檢測能捕捉到那些動(dòng)態(tài)檢測很難觸發(fā)的邊界條件。從技術(shù)角度看Clang-Tidy的檢查項(xiàng)分了好幾個(gè)層次有純AST結(jié)構(gòu)檢查比如某個(gè)類是否缺少虛析構(gòu)函數(shù)、有基于控制流圖的檢查比如未初始化變量使用、也有基于符號(hào)執(zhí)行的檢查比如數(shù)值溢出范圍。越深的分析越強(qiáng)大但也越容易誤報(bào)這也是為什么不同檢查項(xiàng)的效果差異會(huì)那么大。2.3 模式匹配與規(guī)則引擎檢測器批量識(shí)別壞味道前面說的數(shù)據(jù)流分析適合抓通用bug但團(tuán)隊(duì)里有很多問題是高度個(gè)性化的。比如你們約定禁止在業(yè)務(wù)代碼里直接使用new必須走統(tǒng)一的內(nèi)存管理接口或者規(guī)定所有多態(tài)類必須有虛析構(gòu)函數(shù)。這類規(guī)則沒法靠通用分析覆蓋得靠模式匹配。Clang-Tidy提供了非常靈活的AST匹配器可以把它理解為針對代碼樹的SQL查詢。你寫一個(gè)匹配條件找出所有類定義包含虛函數(shù)沒有虛擬析構(gòu)函數(shù)的節(jié)點(diǎn)它就快速在整個(gè)代碼庫里篩選出符合條件的類。這種規(guī)則寫起來并不困難后面我專門寫一節(jié)怎么自定義團(tuán)隊(duì)的檢測規(guī)則。想清楚這些底層原理之后你再看工具的輸出就不會(huì)覺得神秘了——每一條警告背后都對應(yīng)著某種具體的分析邏輯搞清楚這套邏輯你才知道哪些警告要無條件修改哪些警告可以合理忽略。3. 主流工具怎么選Clang-Tidy、Cppcheck和商業(yè)方案的真實(shí)差異3.1 三款常用工具的對比我用過的靜態(tài)檢測工具不算少主流的幾個(gè)都實(shí)際跑過大型項(xiàng)目這里直接給結(jié)論。工具底層技術(shù)優(yōu)勢劣勢適合場景Clang-TidyClang AST解析精準(zhǔn)、規(guī)則豐富、可自定義、與編譯診斷一致配置復(fù)雜、需要編譯數(shù)據(jù)庫、掃描較慢中大型C項(xiàng)目的常態(tài)化檢查Cppcheck自帶詞法與語法分析輕量、無需編譯數(shù)據(jù)庫、開箱即用深層分析較弱、自定義能力有限快速掃描、跨平臺(tái)小項(xiàng)目PVS-Studio數(shù)據(jù)流分析為核心bug檢出率高、誤報(bào)率低、報(bào)告可讀性好商業(yè)授權(quán)、對大型代碼庫資源占用高安全關(guān)鍵型項(xiàng)目、質(zhì)量要求嚴(yán)格的團(tuán)隊(duì)我知道很多團(tuán)隊(duì)是從Cppcheck入門的畢竟它在老舊的代碼庫上也能直接跑不需要生成編譯數(shù)據(jù)庫。但用久了你會(huì)發(fā)現(xiàn)Cppcheck對C11以后的新特性支持得總有點(diǎn)滯后而且它不基于Clang解析器的話模板、智能指針這類現(xiàn)代C語法在它的分析模型里比較粗糙。我最推薦的組合是用Clang-Tidy做主力用Cppcheck做快速補(bǔ)充掃描如果你有預(yù)算或者項(xiàng)目安全等級(jí)高再加一個(gè)商業(yè)工具做交叉驗(yàn)證。3.2 決定選型的核心因素編譯數(shù)據(jù)庫在實(shí)際評(píng)估工具的時(shí)候我建議大家先想清楚一個(gè)問題項(xiàng)目能不能方便地生成compile_commands.json這是Clang系列工具使用的前提它記錄了項(xiàng)目里每一個(gè)源文件編譯時(shí)的完整參數(shù)——頭文件路徑、宏定義、標(biāo)準(zhǔn)版本等等。用CMake的項(xiàng)目很容易只需要打開一個(gè)開關(guān)cmake -DCMAKE_EXPORT_COMPILE_COMMANDSON ..生成之后Clang-Tidy才能準(zhǔn)確地分析你的代碼。如果項(xiàng)目是用別的構(gòu)建系統(tǒng)比如老式Makefile你可能需要借助Bear這類工具來捕獲編譯命令bear -- make -j8這一步很多人嫌麻煩但其實(shí)它是靜態(tài)檢測能落到實(shí)處的關(guān)鍵。沒有編譯數(shù)據(jù)庫的Clang-Tidy面對一堆找不到頭文件的報(bào)錯(cuò)基本等于廢了。所以我的建議是決定選型之前先花一天時(shí)間把編譯數(shù)據(jù)庫跑通。跑通了Clang-Tidy就是你的主力跑不動(dòng)那就老老實(shí)實(shí)用Cppcheck它不依賴編譯數(shù)據(jù)庫直接分析源文件也能找出不少問題。3.3 工具的檢出能力差異實(shí)測印象沒有比較就沒有鑒別。我在某個(gè)舊項(xiàng)目上做過一次對比那個(gè)項(xiàng)目的代碼大概有20萬行C標(biāo)準(zhǔn)是C11歷史包袱很重。Cppcheck跑完報(bào)了600多個(gè)warning但我去翻了翻大量是style級(jí)別的問題真正能構(gòu)成缺陷風(fēng)險(xiǎn)的不到20%。同一份代碼Clang-Tidy開上它最有價(jià)值的幾個(gè)檢查報(bào)了80多個(gè)問題其中一半以上都是實(shí)打?qū)嵉目罩羔樈庖?、資源泄漏、邏輯錯(cuò)誤。這是因?yàn)镃lang-Tidy能真正理解代碼的語義和生命周期而Cppcheck很多時(shí)候還是在做語法模式上的淺層推斷。商業(yè)工具的檢出率和誤報(bào)率確實(shí)控制得好但價(jià)格擺在那里。我在實(shí)踐里發(fā)現(xiàn)一個(gè)比較平衡的做法常規(guī)開發(fā)用Clang-Tidy做持續(xù)集成每個(gè)季度或者每次大版本發(fā)布前用商業(yè)工具做一次全面審計(jì)復(fù)查。這樣既能把日常質(zhì)量線托住又不會(huì)讓團(tuán)隊(duì)在工具上投入過高的成本。4. 把靜態(tài)檢測接進(jìn)真實(shí)項(xiàng)目從編譯數(shù)據(jù)庫到CI流水線的完整鏈路4.1 第一步先讓你的項(xiàng)目能被檢測很多人裝了工具第一步就卡住了因?yàn)樗麄兊捻?xiàng)目根本沒生成編譯數(shù)據(jù)庫。我見過太多項(xiàng)目代碼庫能編譯但一跑Clang-Tidy就報(bào)幾百個(gè)file not found絕大多數(shù)都是頭文件路徑解析不了。所以第一步不是急著開檢查項(xiàng)而是把可重復(fù)的編譯信息導(dǎo)出流程建立起來。拿CMake項(xiàng)目舉例最穩(wěn)妥的方式是單獨(dú)建一個(gè)構(gòu)建目錄專門用來導(dǎo)出編譯命令cmake -S . -B build-analysis -DCMAKE_EXPORT_COMPILE_COMMANDSON -DCMAKE_BUILD_TYPERelease ln -s build-analysis/compile_commands.json .compile_commands.json生成之后隨便挑一個(gè)源文件試試clang-tidy -p . src/core/network.cpp這個(gè)命令的意思是告訴工具編譯數(shù)據(jù)庫在當(dāng)前目錄然后分析src/core/network.cpp。如果一切正常你會(huì)第一次看到工具對單個(gè)文件的檢測結(jié)果。這里有個(gè)小技巧不要急著對全項(xiàng)目掃描先玩轉(zhuǎn)單個(gè)文件這樣能快速感受到工具的輸出格式、開啟規(guī)則的方式也不會(huì)被海量結(jié)果淹沒。4.2 配置文件怎么寫從全部禁用到按需開啟Clang-Tidy的默認(rèn)配置其實(shí)是規(guī)則全關(guān)你需要明確告訴它開哪些檢查。我用過的項(xiàng)目中最常用的配置文件.clang-tidy長這樣放在項(xiàng)目根目錄--- Checks: clang-analyzer-*, bugprone-*, performance-*, modernize-*, readability-* WarningsAsErrors: HeaderFilterRegex: AnalyzeTemporaryDtors: false FormatStyle: none CheckOptions: - key: readability-identifier-naming.ClassCase value: CamelCase - key: bugprone-sizeof-expression.WarnOnSizeOfConstant value: true ---配置文件的意義在于把規(guī)則沉淀下來讓所有成員用同一套標(biāo)準(zhǔn)。注意這里我把modernize-*和readability-*也開了但如果你在存量項(xiàng)目上第一次引入靜態(tài)檢測最好不要全開——不然第一次掃描那上萬條告警會(huì)把整個(gè)團(tuán)隊(duì)嚇退。我建議第一次先只開clang-analyzer-*和bugprone-*這兩組它們抓的是真正的bug和隱患風(fēng)格類和現(xiàn)代化重構(gòu)類的規(guī)則等團(tuán)隊(duì)適應(yīng)之后再分階段開啟。4.3 增量掃描策略讓CI在幾分鐘內(nèi)給出反饋靜態(tài)檢測有一個(gè)很現(xiàn)實(shí)的問題掃描速度快不了。一個(gè)10萬行的項(xiàng)目全量跑Clang-Tidy輕松就要半小時(shí)以上。如果每次提交代碼都全量掃描開發(fā)和CI流程都會(huì)被拖垮。我在實(shí)踐中采用的方案是提交時(shí)增量掃描 夜間全量掃描。增量掃描只針對本次改動(dòng)涉及的文件可以在CI流水線里實(shí)現(xiàn)先用git diff --name-only origin/master...HEAD拿到改動(dòng)文件列表再過濾出.cpp和.h文件然后逐個(gè)交給Clang-Tidy分析。git diff --name-only origin/master...HEAD | grep -E \.(cpp|cc|cxx|hpp|h)$ | xargs clang-tidy -p build-analysis -quiet再加上一個(gè)限制規(guī)則新增的警告一律視為錯(cuò)誤已有的存量警告放進(jìn)基線里單獨(dú)跟蹤。這樣新提交就不會(huì)引入新的問題團(tuán)隊(duì)不用一下子處理歷史欠賬。夜間的全量掃描則負(fù)責(zé)找出那些跨文件的、依賴全局?jǐn)?shù)據(jù)流的問題第二天早上大家看報(bào)告改就行。4.4 存量代碼的治理節(jié)奏從不許新增到逐步清零我見過兩種極端做法。一種是從不引入項(xiàng)目爛到?jīng)]法看另一種是一上來就要求存量代碼清零結(jié)果團(tuán)隊(duì)花了兩周改了一堆跟業(yè)務(wù)無關(guān)的warning核心需求倒沒排期了。兩種都是錯(cuò)的。正確的方式是分三個(gè)階段走。第一階段引入工具設(shè)立基線規(guī)則上只做不許新增這個(gè)階段的核心目標(biāo)是讓流水線跑起來讓大家接受工具的存在。第二階段選擇高收益規(guī)則比如空指針、內(nèi)存泄漏、并發(fā)相關(guān)的檢查項(xiàng)定期挑一批存量告警修掉這個(gè)節(jié)奏可以跟著迭代走每次修個(gè)幾十條。第三階段當(dāng)存量告警數(shù)量降到可控水平后再逐步開放風(fēng)格類和現(xiàn)代化重構(gòu)類規(guī)則把門禁從不許新增收緊到一個(gè)都不能有。這個(gè)節(jié)奏看起來很慢但其實(shí)是最穩(wěn)的。我經(jīng)手的一個(gè)項(xiàng)目20萬行存量代碼用這個(gè)節(jié)奏跑了三個(gè)季度存量告警從三千多條降到了兩百條以內(nèi)而且過程中沒有發(fā)生過一次工具導(dǎo)致的發(fā)布延期。5. 誤報(bào)處理不是妥協(xié)工程如何讓檢測器學(xué)會(huì)閉嘴5.1 誤報(bào)的典型來源與抑制手段用了靜態(tài)檢測之后你一定會(huì)遇到這種場景工具報(bào)了一個(gè)問題你看了一眼覺得這代碼明明沒問題啊。恭喜你遇到了誤報(bào)。誤報(bào)處理得好不好直接決定工具是團(tuán)隊(duì)的質(zhì)量護(hù)法還是狼來了小孩——天天瞎報(bào)警最后沒人認(rèn)真對待。誤報(bào)的常見來源有三個(gè)。第一是宏展開帶來的誤判C的宏是文本替換展開之后很多信息丟失了工具可能把看似獨(dú)立的兩段代碼當(dāng)成有邏輯關(guān)聯(lián)。第二是外部接口的約定比如你的模塊和底層平臺(tái)約定這個(gè)回調(diào)永遠(yuǎn)在特定條件下觸發(fā)工具不知道這個(gè)約定自然判斷不出你的代碼是安全的。第三是模板實(shí)例化的復(fù)雜性工具在做數(shù)據(jù)流分析時(shí)對某些模板參數(shù)的推導(dǎo)不夠準(zhǔn)確就得出了過于悲觀的結(jié)論。處理方式上我建議按嚴(yán)重程度分級(jí)。對于那種安全但工具不理解的代碼用行內(nèi)注釋告訴工具這里是有意為之a(chǎn)uto result unsafe_call(); // NOLINT(clang-analyzer-core.uninitialized.UndefReturn)對于這一類檢查項(xiàng)在你的項(xiàng)目里普遍不適用的情況直接在.clang-tidy配置里關(guān)掉它千萬別逐行注釋否則代碼里到處是NOLINT也夠煩的。對于偶爾出現(xiàn)但確認(rèn)是誤報(bào)的問題可以建一個(gè)清單集中記錄這些誤報(bào)的性質(zhì)和理由讓后續(xù)審閱代碼的人不用每次重新爭論一遍。5.2 怎么判斷一條告警是真bug還是誤報(bào)我經(jīng)常被問怎么區(qū)分真bug和誤報(bào)這個(gè)問題沒有銀彈但我有一套自己的判斷流程準(zhǔn)確率還挺高。第一步看告警說的是哪一類問題。如果是空指針解引用、數(shù)組越界、使用未初始化內(nèi)存這類問題的實(shí)錘率非常高基本可以直接認(rèn)定為真bug只是觸發(fā)路徑可能很隱蔽。第二步看告警處代碼的上下文。如果變量在之前的代碼里明明被賦值過那有可能是數(shù)據(jù)流分析遺漏了某種情況屬于誤報(bào)如果賦值條件和當(dāng)前路徑確實(shí)互斥那要仔細(xì)想想是不是真的有一條路徑漏了。第三步實(shí)在判斷不了就本地跑動(dòng)態(tài)檢測寫一個(gè)能觸發(fā)該路徑的最小復(fù)現(xiàn)樣例用ASan跑一遍。動(dòng)態(tài)檢測在這個(gè)場景下是靜態(tài)檢測的仲裁者。我記得有一次Clang-Tidy在一個(gè)網(wǎng)絡(luò)模塊里報(bào)了一條取消引用了空指針的告警代碼大概長這樣void handlePacket(Packet* p) { if (p ! nullptr) { process(payload); } sendToWire(p-id); // 這里p可能為空 }你一眼看過去好像有保護(hù)但函數(shù)最后的p-id確實(shí)沒在保護(hù)范圍內(nèi)。這是典型的開發(fā)者加了防御但漏了一條路徑的問題——工具的分析是精確的反而是寫代碼的人想當(dāng)然了。像這種情況靜態(tài)檢測的價(jià)值就表現(xiàn)得非常明顯。5.3 自定義規(guī)則把團(tuán)隊(duì)自己的規(guī)范寫進(jìn)檢測器真正用好Clang-Tidy就要學(xué)會(huì)寫自定義檢查。它提供了完整的API你可以注冊一個(gè)ClangTidyCheck在registerMatchers里聲明你想匹配的代碼模式在check回調(diào)里拿到匹配到的節(jié)點(diǎn)、檢查上下文、輸出診斷信息。舉個(gè)例子。假設(shè)團(tuán)隊(duì)里規(guī)定所有自定義類型都要用shared_ptr管理不允許裸new出現(xiàn)在A和B模塊中。你可以寫一個(gè)最簡規(guī)則匹配new表達(dá)式節(jié)點(diǎn)class NoNakedNewCheck : public ClangTidyCheck { public: void registerMatchers(ast_matchers::MatchFinder* Finder) override { Finder-addMatcher( ast_matchers::newExpr().bind(newExp), this); } void check(const ast_matchers::MatchFinder::MatchResult Result) override { const auto* E Result.Nodes.getNodeAsCXXNewExpr(newExp); if (E) { diag(E-getBeginLoc(), 禁止使用裸new請使用shared_ptr); } } };真實(shí)的規(guī)則會(huì)比這復(fù)雜要考慮排除頭文件、排除已經(jīng)授權(quán)的代碼、處理模板代碼里的new。但思路就是這樣的——把團(tuán)隊(duì)規(guī)范變成機(jī)器可執(zhí)行的檢查這個(gè)價(jià)值遠(yuǎn)遠(yuǎn)超過工具自帶的幾百條通用規(guī)則因?yàn)樗菫槟銏F(tuán)隊(duì)量身定做的紀(jì)律守門員。寫這類插件的門檻沒有想象中高懂基本的C和AST概念就能上手而且社區(qū)里有大量現(xiàn)成的AST matcher例子可以參考。6. 靜態(tài)檢測抓到的真實(shí)bug每個(gè)都值得認(rèn)真對待6.1 從真實(shí)項(xiàng)目里摘出的幾類典型缺陷光說理論和工具不如看些實(shí)際案例。這些是我在不同項(xiàng)目里通過靜態(tài)檢測抓到過的既有bug已做了脫敏簡化每一類都很有代表性。第一類是未初始化變量。有個(gè)模塊的日志打印偶爾會(huì)輸出亂碼排查了很久。后來Clang-Tidy直接在代碼里指出來某個(gè)結(jié)構(gòu)體的int status;字段只有部分分支里賦了值另外幾個(gè)分支直接用了未初始化的內(nèi)存。這類問題編譯器通常只會(huì)給個(gè)可能未初始化的warning容易被忽略但實(shí)際后果很隨機(jī)。第二類是生命周期懸空。有一個(gè)函數(shù)里返回了局部容器的迭代器容器銷毀之后迭代器變成了懸空指針程序跑了一段時(shí)間之后在完全無關(guān)的模塊里崩潰。Cppcheck和Clang-Tidy都能識(shí)別這種return引用局部變量或容器成員迭代器的模式。第三類是并發(fā)場景下的數(shù)據(jù)競爭。工具從代碼路徑上發(fā)現(xiàn)某個(gè)成員變量在一個(gè)線程里被執(zhí)行寫操作在另一個(gè)線程里被無鎖讀取沒有同步機(jī)制。這種問題在單測和動(dòng)態(tài)檢測中很難穩(wěn)定復(fù)現(xiàn)但靜態(tài)分析可以從路徑上直接指出來。下面是這類問題的對比總結(jié)問題類型靜態(tài)檢測的表現(xiàn)動(dòng)態(tài)檢測的表現(xiàn)嚴(yán)重度未初始化變量直接定位到變量聲明處僅當(dāng)路徑被觸發(fā)時(shí)偶爾崩潰高內(nèi)存泄漏與懸垂分析生命周期可發(fā)現(xiàn)Valgrind可穩(wěn)定發(fā)現(xiàn)高空指針解引用沿所有路徑分析需要特定輸入觸發(fā)高并發(fā)數(shù)據(jù)競爭路徑分析可發(fā)現(xiàn)TSan可發(fā)現(xiàn)但依賴運(yùn)行覆蓋中高邏輯邊界錯(cuò)誤部分可發(fā)現(xiàn)很難通過動(dòng)態(tài)檢測接到中性能隱患識(shí)別復(fù)制、低效容器使用需性能測試工具輔助低6.2 靜態(tài)檢測覆蓋不到的邊界靜態(tài)檢測不是萬能的它抓不到規(guī)范實(shí)現(xiàn)但需求理解錯(cuò)了的邏輯錯(cuò)誤也抓不到兩個(gè)模塊接口設(shè)計(jì)合理但業(yè)務(wù)語義上不可行的問題。比如你的訂單狀態(tài)機(jī)狀態(tài)轉(zhuǎn)移邏輯寫反了工具只會(huì)檢查狀態(tài)變量初始化和使用是否安全不會(huì)判斷你的狀態(tài)流轉(zhuǎn)語義是否正確。算法復(fù)雜度和架構(gòu)合理性它也幫不上忙。一個(gè)O(n^2)的循環(huán)在代碼層面完全合法但性能就是慢得離譜靜態(tài)檢測給你報(bào)不了這段應(yīng)該換哈希表。此外一些在運(yùn)行時(shí)注入的依賴、插件式架構(gòu)里的動(dòng)態(tài)行為靜態(tài)檢測基本無能為力。所以我一直跟團(tuán)隊(duì)強(qiáng)調(diào)一個(gè)觀念靜態(tài)檢測是質(zhì)量體系里的一層網(wǎng)它負(fù)責(zé)攔截高頻、低級(jí)的錯(cuò)誤讓人的注意力能集中在那些工具攔不了的更高級(jí)的問題上。工具是輔助不是銀彈最終質(zhì)量責(zé)任還是在寫代碼的人手里。在我實(shí)際推動(dòng)靜態(tài)檢測落地的經(jīng)驗(yàn)里最大的挑戰(zhàn)其實(shí)不是工具本身而是團(tuán)隊(duì)習(xí)慣的變化——從編譯過了就提交到編譯過了、靜態(tài)檢測也干凈了才提交這個(gè)轉(zhuǎn)變需要一段時(shí)間的適應(yīng)。我個(gè)人用的一個(gè)行之有效的辦法是在所有g(shù)it提交前的鉤子里加上增量掃描讓反饋來得盡量早。這種前置攔截帶給人的體驗(yàn)是非常直接的幾次下來大家就會(huì)自覺地遵守規(guī)則?,F(xiàn)在每次我打開一個(gè)舊項(xiàng)目第一件事就是搭一層靜態(tài)檢測的門禁哪怕規(guī)則少一點(diǎn)也比完全沒有強(qiáng)。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
天天草夜夜草高潮片| 色婷婷丁香五月| 丁香五月天堂| 亚洲精品97| 操人妻丝袜高跟| 秋霞色色影院| 熟妇高潮精品一区二区三区下载| 翔田千里AV无码秘 三区| 日韩另类色图| 国产真实野战在线视频| 久久婷婷电影网| 在线视频一区二区传媒| 色99在线| 欧美色www亚洲国产阿娇要播| 骚熟女吞| 欧美1727免费观看视频| 性爱乱伦视频免费| 天久久久噜噜噜久久国产精品爽爽| 五月激情综合网| 2024年最新色情网站在线观看| 97超碰总站| 久久性爱视频| 自怕偷自怕亚洲精品| 久久精品女同亚洲女同13| A V少妇特黄三级| 人人看人人插| 精品国产91内射久久| 日韩精品一区,二区 九九...老司机| 水野优香在线观看| 国语国产操逼伊人AV网| 国产久久久久久| 中文字幕精品久久久久人妻红杏ⅰ| 91丨九色丨43老版熟女| 日韩中文字幕视频在线观看| 日本高清视频xxxx| 天天做天天爱| 天天综合欧美黑人| 国产精品亚洲日韩骚欢乐谷最新地址发布页huanieguty性屋娱乐妖精视频 | 欧美一级欧美三级在线观看| 长长久久曰曰夜夜成人网| 欧美激情性久久久久久| 成人午夜高潮av猛片| 亚洲色综网| 麻豆精品A片免费观看| 丁香五月性| 亚洲AV秘 精品久久老牛影视| 日韩天天综合| 日本高清视频在线观看黄已三辽| 狠狠干妹子| 久草热制服丝袜在线观看| 大胆91| 97人人模人人爽人人| 欧美αv.com| 91黑丝在线| 欧美激情 一区| 超碰97欧美在线| 在线国产探花| 99操视频| 啊啊啊不要好疼视频| 国语对白在线播放视频| 韩国三级理论在线| 另类在线| 九月婷婷| 区日韩亚洲乱码av电影| 国产夜夜操| 九九热九九热| 日本一区二区电影网站| 国产视频三区四区| 啊啊啊啊啊操我视频| 丁香六月婷婷| 香一区二区三区| 久久久蜜桃一区二区三区| 色综合色综合网| 1769精品一区二区三区| 俺去也婷婷| 丁香六月综合激情| 97超碰色五月| 久久草视频污视频| 午夜操一视频一区| 国产深夜福利| 国产欧美成人第一页在线观看| 国产亚洲精品无码三区| 日韩欧美俄罗斯A片| 思思热免费视频观看| 亚洲欧洲综合av在线| 人妻干天天| 黄色AAAAA欧美| 乳欲人妻办公室奶水| 免费观看的黄色的网站| 蜜桃久久综合视频| 青青草成人视频在线观看二区| 日韩少妇在线视频| 东北毛片| 操逼无码一区| 97超碰天天| 正在播放国产精品一区| 亚洲第二页| 久久神马影院| 男人a天堂手机在线版| 欧美嗯啊……在线观看视频免费| 中文字幕交换人妻| 91精品久久久久五月天精品| 欧美同性恋 的搜索结果 - 91n| 性爱免费视频成人| 久久精品国产Aⅴ| 久久久久97| 激情文学88| 激情网五月天| 亚洲国产丝袜在线观看| 99色在线视频| 96久久久精品| 日本精品加勒比海一区| 天天综合91| 999综合色| 九九九九88| 精精夜夜| 成人26uuu| 欧美在线视频99| 大香蕉日亚洲日本亚大| 久久婷婷精品| 五月丁香久久| 亚洲色入欧美| 久久精品日韩专区免费观看| 国产精品一区在线播放| oumeizonghese,www| 超碰偷拍| 久久免费少妇| 乱伦a片视频| 五月天黄色激情视频| 国产超碰AV在线精品| 91 手机在线播放 绯色| 久久久91福利姬| 国产91会所女技师在线观看| 思思热在线| 亚洲国产一区二区三区在线| 九九碰九九爱97超| 日韩激情视频| 碰人碰碰人人开房人肉| 超碰97综合| 静品嫩模一区二区| 午夜精品探花| 超碰午夜在线| 香一区二区三区| 亚乱色| 老色69| 狠狠中文字幕| 99re视频这里只有精品| 久久久久大香青草精品综合| 人妻精品一区二区在线| 欧美 亚洲 在线| 国产精品网站免费| baisiav| 亚洲中字慕不卡| 久久黄色视频一区二区三区 | 333kkkk·亚洲com久久| 91性感网站| 91看黄片| 蜜桃一区二区三区| 亚洲强奸乱伦影视网| 91热情品| 欧美视频一区二区在线| 久久国产精品一区二区| 婷婷色婷婷| 亚洲九九视频| 96久久科窝| 97爱综合| 久久999久| 精品国产人成在线| 欧美综合亚洲| 高潮嗯啊性感美女久久久| 啪啪性爱免费视频| 色网在线| 鲁鲁色综合网| 人人干黄色| 加勒比少妇AV婷婷六月天超碰超碰| 久久久久久久久久久免费精品| 青青草视频久久久久| 国产精品免费视频人成| 97伊人超碰| 伊人色综合网| 国产无吗在线播放| 后入福利视频| 日韩在线视频1234| 人妻一区视频| 中国91AV| 久久久久久波多野吉衣高潮| 天美麻花大全视频| 人人操我人人干| se,,,亚洲欧美| 日人妻视频91| 三久久久四久久久久| 91碰碰碰| 午夜福利1区2区3区| 久久婷婷欧美| 农村妇女一级二级三级视频| 在线欧美69V免费观看视频| 久久精品一区二区三区蜜桃臀| 久久五月丁香| 黄色视频60分钟| 伊人久久亚洲色欲综合网站 | caopeng97人妻| 人妻日日干| 男人天堂网站| 欧美亚洲国产日本在线,久久精品国产| 免费综合亚洲中文| 秋霞免费无码视频日韩A片| 天天综合麻豆视频| 97一区二区蜜臀| 日本一区二区成人在线| 亚洲精品一二牛牛| 伊香蕉综合久久久久久久噜噜噜| 91日日夜夜| 五十路熟女工口 | 天天干夜夜肏| 99热日| 青草青青久久久久久国产| 久久精品久久久久久久久| 香蕉大久久久| 亚洲的天堂网| 毛片17S| 五月天婷婷色色| Av手机版天堂网| 99rre在线精品99re8| 欧美婷婷久久| 中文字幕丝袜人妻| 日韩97视频!在线| 无码国产精品久久久久| 激情抓乳插进去啪啪啪日韩| 中文字幕精品免费一区二区| av亚欧| 东京热毛片177b2viP| 91美女高潮| a人欧美综合天堂麻豆| 五月天婷婷激情| 中文字幕成人理论在线| 美国aaaaa一级黄片| 69国产对白刺激| 欧美美女视频| 日韩啊V| 欧美色图亚洲色| 色九九久九九| 国产免费内射视频| 亚洲色人阁| 久9爱精品| 中文字幕午夜精品久久久| 久久一二三四不卡| 久久精品99久久久久久| 白嫩妹子国产骚| 天天操美美| 伊蕉97蜜桃97狠狠综合干 | 久日91在线| 午夜性| 大香蕉中文aV在线| 国产少妇高潮| 成人开心网在线视频| 亚欧操逼片在线观看 | 欧美黑人猛交春色影视大全| JULIA人妻风俗店中出电影| 97超碰国产亚洲精品资源| 国产玖玖| 粉嫩少妇自慰在线| 少好三P| 东北老熟女| 91精品久久久久久| 伊人久大| 日本一区不卡| 日小BB小视频| 久热九九| 黄色成品网站| 中亚黄色三级大片| 色香AV| 大香蕉黄色一级片免费看| 大香蕉黄色一级片免费看| 手机在线中文字幕国产| 五月丁香色色网| 人妻日日夜夜精品| 亚洲男人的天堂在线看| 少妇久久久久| 隔壁邻居波多野结衣中文字幕| 国产 日韩 欧美高清| 免费操逼视频下载| 综精品久久久aaaa| 一区超碰一区| 粉嫩av在线| 日韩欧美tv一区二区在线观看| 欧美日韩操逼嗦吊| 2025亚洲男人天堂| 亚洲深夜福利| 无码高清专| 国产做?爰片久久毛片?片美国| 日韩AV一区二区三区四四| 麻豆精品天美| 91精品人妻一区二区三区蜜桃| 亚洲麻豆av一区二区| 免费作爱一级视频| 第45页一区二区| 日韩本不卡视频在线观看 | 超碰国产在线| 成人熟女区| 国产免费小视频| 免费一级黄色录像影片| 中文字幕日韩国产传媒欧美精品| 少妇内射视频| 青青青青青手机视频| 欧亚性爱在线视频| 91久久精品国产| 好爽免费视频,| 超碰在线一区二区| 国产又色又爽又舒服的三级视频| 亚州久久9| 久久色网| 亚州色图第三区| 亚洲脚交| 一级AV性爱| 免费一级性爱久久| 久久久久久69国产一区二区| 国产97在线视频| 操操逼操操逼操操逼逼| 亚洲第91页 | 五月丁香综合激情| 大香蕉2017| 国产无码精品成人| 亚洲不卡不卡中文字幕不卡| 51一区二区三区| www.亚洲成人一区| 啊啊啊 在线观看| 欧美性五月| 18禁无码永久免费无限制| 九色97| 久久精品日韩专区免费观看| 亚洲人妻在线一区| 美国久久一二三四| 黄片国产精品一区二区| 国产精品色哟哟| 青春草莓视频在线观看网址| 中文字幕亚洲欧美在线不卡| 国产成人欧美精品在线| 九九久久久九九| 欧美激情内射| 91爱综合| 欧美精品久久久久久久丰满| 你草精品在线视频| 精品一区二区啪啪啪| 欧美日韩亚洲国产中文永久天天看| 日韩无码精品综合久久| 国产女人9999| 九九综合久久| 亚洲综合首页| 久久久久久久久久久97| 青娱乐老司机视频| 成人久久精品| 综合色啪| 2020久久免费视频| 亚洲情色在线| 国产树林里野战在线看| 夜夜爽夜夜操| 国产专区路线| 无码日韩网站| 少好三P| 夜夜肏2021| 欧美性爱第一页久久| 精品一久久久| 九九热视频在线观看| 黄色视频高清无码网站| 国产久久一区二区| 国产精品色色| 在线免费观看日韩一区| 欧美性夜| 夜夜国自区| 99这里只有精品| 中国AAAAAA黄色片| 亚洲。天堂。日本在线观看| 激情文学 国产一二三aV| 狠狠中文字幕| 欧美综合亚洲综合| 亚洲精品97中文字幕| 免费视频无码| 丁香五月综合| A片大香蕉在线| 久久久久久久久久久久久女过产乱-少妇高潮一区二区三区喷水-成人AV | 猛猛干| 男人的天堂色偷偷青青草视频婷婷网| 强奸a片网| 国产精品久久久亚洲一区| 伊人伊人LD| 免看60秒涩涩视频| 亚洲和欧美裸体美女双飞视频| 国产毛片毛片4p懂色| 一区二区视频你懂的| julia高潮后不停追击中出| 少妇人妻好深太紧了vr91| 九九草| 一区二三区四区视频大全套| 天天综合有色网| 色婷婷丁香| 亚洲精美粉嫩嫩泬在线观看| 凸凹视频在线观看| 九九热精品| 伊人操操| 亚洲狼狼干综合1| 五月丁香狠狠爱| 日日噜噜夜夜狠狠视频无| 精品久久久久久久| 208天天久久九九九| 国产传媒美日韩av| 成人精品电影| 青娱乐亚洲热| 婷婷国产精品九区| 日韩有码免费视频| 五月丁香久久| 一起草av| 天天做天天爱天天高潮| 在线啊v一区| 国产成人无码高清| 粉嫩av在线一区二区| 伊人网青青| 亚洲1区2区三区高清中文字幕| 国产福利夜| www.狠狠干.coom| 99热精品在线播放| 亚洲色啪| 亚洲欧洲日韩国产自在线| 人妻一二三区| 亚洲av综合色| 夜间福利片1000无码| 亚洲欧洲综合成人av一区| 中国农村熟妇毛片视频| 五十路六十路七十路熟婆| 韩国手机不卡无码三级视频| 国产理论视频在线播放| 九九九影院| 白丝一区| 久久中日麻豆| 极品白嫩福利在线| 青青草在线视频欧美| 色婷婷在线视频精品导航| 97激情97激情| 亚洲欧美精品久| 99国内熟女露脸视频| 啊啊啊啊啊好舒服视频| 欧成人在线| 久久线上视频免费看| 91精品人妻一品二品三品| juliaann丝袜| 欧美性爱无码一区二区三区| 91爆操视频| 97av在线视频| 国产专区路线| 亚洲熟女乱综合一区二区三区 | 麻豆黄色五月天| 97视频7| 小明看看网址| 久久在肏| 国产野战露脸在线播放| 天堂种子在线www网资源| 日韩性爱播放| 97色综合中文网| 国产精品诱惑| 日韩人妻一区二区精品| 香一区二区三区| 综合视频91| 91操熟女视频| 亚洲精品毛片在线观看| 丁香五月色| 日本一片一区| 精品国产乱码久久久久久久| 日韩视频精品在线观看| 久久婷婷五月综合| 亚洲自拍欧美国产首页网曝| 高清不卡 中文 人妻| 青娱乐 青青青操 日逼| 6080YYY午夜理论片在线观看| 亚洲经典啪啪| 精品无码一二三四区| 欧美色图20P| 污污汅18禁网站在线永久免费观看 | 亚洲九区| 超碰久久精品| 日韩AV无码中文一区二区| 欧美精品三区| 91黑人狂躁丰满熟妇| 亚洲图片 91| 久久少妇人妻| 日日干夜夜欢| 天堂v无码免费视频| 成人av免费观看| 91 丝袜在线观看| 91东京热男人的天堂| 三级三级三级日本99| 久久爽爽精品| 人人摸人人入| 不卡超碰护士AV在线免费播放| 国产中午字一暮区| 亚洲精品天堂久久A∨51成人漫| 久久精品免费| 精品久| 国产AV超爽| 四虎在线免费视频| 日韩色欲久久一二三四区| 亚洲三级网址久久最新| 午夜国产综合视频在线观看 | 国产一区二区a毛片| 91在线限制级| 51国产午夜精品视频| 国产精品情侣啪啪| 91精品无码久久久久久久| 亚洲精品视频二区| 蜜臀99久久精品久久久懂爱| 亚洲综合97中文网| 久艹日日日| 亚洲性爱高潮影院| 国产精品久久泡妞网站| 加勒比大香蕉视频在线| 中文字幕在线免费观看 | 人人操人人摸人人看人人插| 久久6热精品99视频| 一区二区影院| 麻豆区久久久久亚| 人妻精品视频一区二区| 99草精| 亚州国产精品乱| 丰满人妻-区二区三区| 色激情五月天| 一级毛片电影免费看| 97色妞| 天天日天天干天天整| 婷婷10月天青娱乐| 欧州色图区| 激情小说日韩无码| 欧美草草| 日韩AV片| av网站在线观看了| 午夜福利一区二区三区四区五区色婷婷| 日韩黄色一区二区三区| 国产久久久久久| 国产精品色哟哟| 超97在线精品视频| 揉揉日日日日| 96国产污污污丝袜| 亚洲超碰在线| 91性高朝久久久久久久久| 亚洲熟女乱综合一区二区三区| 午夜精品久久久久久久99蜜桃一| 2019天天干| 精品无码久久久久| 黑丝少妇在线观看| gogogo免费高清看中国国语| 女生看匆91网站| 熟妇一区二区三区| 亚洲色欲天天人妻无码系列专区| 欧美天天性| 人妻人妻天天碰| 久久激情网| 影音先锋日本一区二区| 外国免费性情大片| 亚洲情色一区二区三区| 丁香色色网| 一级做a爰片性色毛片久久| 欧洲一区二区| www.AV有限公司一区| 日韩三级一区| 婷婷色播婷婷| 无码WWW免费视频网站| 欧美激情一| 色大师网站www永久网站视频| 日韩三级一区 | 3p国产欧美99热| 91啦人妻| 日韩天天综合| 91插B网站| 欧美国产有色电影| 亚洲精品国产AV天美传媒| 中文字幕在线观看视频www| 欧美顶级黄色大片免费| 久久久精品91八戒| 欧美性爱日韩高清| 日韩免费中文字幕视频| 91在线视频国产网站| www欧美91| 精品人妻一区二区蜜桃视频| 久久人体一区二区| 国产青青美女玩逼视频| 亚洲 图片 欧美 色图| 视频分类 国内精品| 思思热在线视频免费| 日韩无码极品| 999久久久免费精品国产牛牛| 久久少妇| 91天堂网| 国产精品白领在线观看 | 伊人天天久久动态图| 欧美日韩在线小说| 欧美亚洲| 色欲三区| 人人操,操人人| 国产精品高清2021在线| www.91人妻.com| 亚洲精品国产专区在线观看| 国产乱色国产精品免费视| 99re热有精品视频国产| 欧美日韩一区二区三区四区蜜桃| 人人贴人人摸| 日本操大逼| 国产尤物AV尤物在线观看不卡| 日韩一区二区高清在线观看的| 视频黄色国产一级| 日韩婷婷| 中文字幕一区日韩精| 91蜜臀熟女| 色婷婷综合久久久久中文一区二区 | 国产传媒操逼视频| AA级电影三区| 日韩在线观看字幕精品| 五月丁香综合网| 69AV女优男人的天堂| 国产乱人妻精品入口| 欧美日韩人妻少妇 一区二区三区| 久热99999| 成人小电影网站tex| 尤物av网站免费在线播放| 黄色视频60分钟| 午夜AV人气不卡| 日本午夜久久电影| 国产精品久久久蜜臀| 一区二区三区日韩欧美| 亚洲交换| 美女天天干| 操逼片中文| 另类综合另类| 全国男人天堂网| 人人艹亚洲| 久久久久久久 九九九九九九九| 人妻另类| 国产中文字幕曰本毛片| 亚洲天天影视综合网| 国产无码成人无码| 五月综合视频| 午夜精品人妻二区三区| 一本色道久久天天射天天干| 久久精品亚洲婷婷| 日韩在线电影| 开心五月婷婷| 青草精品视频一日本久久久久网站| 久久成人午夜精品影院| 婷婷激情一区二区三区俺也去| 人人妻人人澡人人爽久久av| 人人扣人人操| 91亚洲欧美综合高清在线| 国产精品蜜臀久久久久无码AV| 亚洲欧洲美腿丝袜| 国产 三级自拍| 九九无码视频| 亚洲欧美色图片| 玖玖爱免费观看视频| 嫩草伊人久久精品| 色欲三区| 欧美日韩性感| 精品久久97| 色色色色综合网| 伊人9| 乱伦日本色图AⅤ| 亚洲熟久久| 波多野结衣被操50分钟免费视频| 国模不卡一本二本三电影| 夜夜草天天| 亚洲成人精品久久久| 日韩av在线精品观看| 日韩少妇丰满亚洲| 成全在线观看免费观看| 久久99精品九九久久久婷婷| 亚洲第2页| 国产精品久久久午夜夜伦鲁鲁| 日韩人妻一区二区精品| 2017天天插| 高潮内射在线| 亚洲一级性爱视频免费看| 色在线69堂| 插欧洲美女欧美精品| 97色欧洲| 97久久久久久久精| 嫩呦国产一区二区三区AV| 欧洲自拍色图gif在线| 99久久精品国产高潮| 高清视频一区| 欧美亚洲一区二区久久久婷精品大包诱| 嫩草美女久久| 后入福利| 久久色激情一区二区三区| 日韩人妻制服丝袜av| 一本大道久| 91在线免费观看处女| 欧美一区二区三区另类精品| 欧美在线大香999| 99re这里只有精品中心播放 | 网站A V在线| 国产妇女精品视频青青草| 色官网在线| 欧美v日韩v亚洲v最新在线| 91美女在线看| 五月丁香啪啪啪| 久久久久久久九九九九九九| 久久久久幕乱码| 18精品一区| 欧美人妻精品一区二区| 丝袜美腿亚洲| 夜夜做夜夜爽精品视频| 国产夫妻一区二区| 超碰精品在线| 国产宅男宅女在线观看| 日本女人久久久| 国产精品不卡一区二区三区| 亚洲影视综合网| 屁屁影院一区二区三区国产| 天天影视色香欲综合网小说| 深爱伊人影院| 亚洲色悠悠久久88| Av色五月| 九九九久千久久激情蜜桃在线看 | 国产日韩精品人妻久久久久色欲网站| 久九九九九九九九热| 97视频620| 天天综合~91入口| 蜜乳AV网址| 亚洲色系另类精品国产| 秋霞色色影院| 91网站18禁| 亚洲AV不卡在线观看| 国产丰满熟夫69mpp| 69精品少妇一区二区三区蜜桃| 久久精视频美日韩在线视频| 琪琪精品免费一区二区三区 | 中文字幕成人理论在线| 国产精品久久久久久久AV大片| 欧美亚洲高清| 猛猛干| AV色女综合| 激情婷婷丁香网| 99re6国产精品99re| 国产精品第二页| 日日夜夜国产综合| 免費人妻夜夜爽天天爽爽一区| 在线 制服丝袜中出 人妻| 国产精品三级视频网站| 尤物一级在线免费观看| 在线人人人人人人精品超| 久久久久久久国产视频| 日韩 欧美 视频 在线 一区| 亚洲性爱免费电影| 国产 日韩 欧美高清| 亚欧免费| 日韩欧美国产一区二区三区四区| 波多野42部无码喷潮在线观看 | 欧美亚洲厕所精品偷拍91| 午夜操一操| 国产久久天堂资源| 国产精品农村妇女| 日本一线产区和二线产区伦理片| 麻豆尤物视频网| 国产sv美女内射| 青娱乐啪啪视频| 亚洲欧美综合| 国产第12页| 精品亚洲国产成人精品| 蜜臀AV网站| 69精品人人人人| 91婷婷伊人狠人| 精品视频日日夜夜| 78久久久| 久久夜精品一区二区三区| 大屁股熟女一区二区三区| 欧美偷偷网| 久久高潮妇女视频| a片自拍直播视频| AV和黑人在线播放| 亚洲一区二区性爱电影| 五月天激情小说网| 亚洲综合影片| 精品人妻伦一区二区三区久久| 蜜臀va69| 婷婷超| 手机在线视频国内精品| 激情婷婷五月天| 人妻精品综合中文字幕在线 | 日本久久99| 2025亚洲男人天堂| 久久人体一区二区| 中文字幕第2页| 日本1区2区不卡视频| 99热只有这里有精品| 亚洲色图久久成人| 97视频新免费| 极品销魂美女一区二区 | 色综合20p| 超碰九区| 亚洲一卡2卡3卡4卡乱码网站 | 国产91精品久久久久久久网曝门| 日韩无码服务区| 中文操逼字幕| 5278欧美一区二区三区| 久久夜色一区二区| 九九九不卡| 欧美激情性爱视频网站| 久久久久免费少妇| 亚洲色图 综合| 亚洲精品久久久久久久蜜桃臀| 国产乱伦亚洲| 鲁鲁色综合网| 人妻美腿丝袜日韩| 天天视频网站黄| 99精品视频在线观看| 免费97视频| 中国操逼无码| 992这里有精品| 久久视频,这里只有精品| 亚洲国产一级黄色视频| 99热| 日产精品久久久一区二区| 嫩呦国产一区二区三区AV| 最新加勒比丝袜在线| 国产suv精品一区| 大香蕉强奸乱伦| 青春草A| 免费成人自拍视频在线| 囯产精品一区二区三区线|亚洲人成无码网WWW动漫|国产精品免费一级... | 久久天堂婷婷网| 人澡逼| 手机在线A片| 和协无码影院| 97国产精品| 久热超碰| 天躁夜夜躁2021| 亚洲高清无码AAA久久久精品| 亚洲自拍欧美国产首页网曝| 一级毛片电影免费看| 欧美亚洲玖玖玖| 97欧美综合网| 九九香蕉网| 97国产精品在线观看| 欧美激情中文字幕另类小说| 人人摸人人舔一区二区| 亚洲国产精品成人无码久久久| 伊人久久久日韩一区| 永久免费av无码网站国产app | 蜜臀久久久99久久久久| 激情综合五月| 久操免费观看| 丁香五月激情综合| 99re超碰| 色九九九| 日韩性爱1级片视频| 好看的久久不射无码影视影院| 强奸乱伦亚洲第一页| 久久久久久久六六| A片 AV一级在线播放观看免费| 久久久久久裸体| 久久久久国产精品片区无码直播| 91美女国产在线| 久久精品性| 青草一区二区| 99久久无色码| 成人无码电影在线观看网| 日本久久999| 日本国产成人亚洲精品无码| 男人天堂新在线| 国产四虎在线| 国产亚洲性生活视频播放| 岛国999| www色色色com| 国产精品人妻无码久久久老鸭窝| 青青草啪啪网| 国产精品岛国片在线观看| 亚洲色性| 亚洲精品蜜桃久久久一区二区三区| 国产无码三级视频在线观看| 日韩美女高潮喷水视频| 插欧洲美女欧美精品| 伊人骚琪琪亚洲天堂网站| 欧美综合色站| 丝袜美腿制服人妻二区中文字幕 | 亚洲激情欧美色图| 国产人妻精品久久久一区二区三区 | 无码直播久久久| 九9热伊人| 99久在线精品99re8热| 日本孕妇一区二区视频操逼免费看 | 欧美日本国产日韩激情视频| sewuyueav| 操人妻逼91| 秋霞一级视频在线观看免费| 亚洲av性爱电影| 天堂综合| 日韩成人色图| 日本一区二区不卡精品| 亚洲欧美首页| 丝袜色综合| 91九久| 蜜乳AV色欲AVAV无码| 美日韩男女操屄视频| 亚春色色| 日韩情色AV| renqi久久久久久久久久久久| 亚洲熟女精品| 91五十路| 精品二区三四区五电影| 亚洲精品欧洲精品| 五月婷视频| 一级黄色性爱A级片| 九九九久久久| 偷偷人人精品女女久久| 天天操人人操骚逼网站| 国产极品999| 色五月激情网| 26uuu国产成人综合| 91P0RNY大屁股人妻| 日本韩国五十路六十路七十路老熟女作爱视频网站| 欧美在线色图| 黑丝内射一区二区三区| 美国日韩黄色片| 91东京热男人的天堂| 久操免费在线| 欧美中日韩XXXX| 啊啊啊久久久视频| 人人噜夜夜操| 欧美97日韩| 精品人妻1237| 精品精品精品| 色综合天天| 国产成人网址| 91超碰人人操| 噜噜吧,噜噜色,噜噜| 人妻日日干| 成人性爱视频在线看| 日韩av电影成人在线| 91骚熟女| 91视频综合网| 亚洲加勒比久久日本道| 啊v在线观看视频| 麻豆一区二区三区在线看| 九九九九九九九| 亚洲国产蜜臀系列在线观看| 久久一本大香蕉 | 免费看污网站| 色诱中文字幕| 天天天肏屄欧美| 国产美脚女优尤物在线观看| 日日夜夜骚| 中文字幕乱碼在线| 日日AV加勒比| 国产精品suv一区| 成人五月天色网| 亚爽爽爽爽爽爽爽爽| www.99热在线只有精品| 九九九九日本 | 色图四区| 97干在线| 免费国产电影一区二区| 国产极品精品美女视频| 精品人体无圣光凹凸| 久久久久久国产手机AV| 强免费黄色网址| 国产成人+综合亚洲+天堂| 男人的天堂2010| 久久精品视频久久久| 99www.bibizy香蕉资源国产一区二区三区高清| 青青青青草av在线观看| 夜夜骑操视频| 夜夜精品视频一区二区| 999精品乱码| 日本不卡高清免v欧美日韩在线观看| 综合干干干av久久久综合网| 啊…啊…操我用力操我| 婷婷中文字幕| 极品丝袜无码| 神马久久久久久久久久| 性交一区二区在线播放| 国产精品禁久久久精品| 青青草福利视频| 极品欧美一区二区三区| 亚洲成人久久一区二区| 91超级碰碰| 欧美天堂日韩三级国产传媒| 综合激情一一91| 91爱剪切久久| 欧美偷拍区| 亚洲最大无码中文字幕网站| 97舔舔| 伊人久久亚洲中文字幕不卡| 欧美亚洲在线| 日韩无码视频黄色| 俺去俺来也在线www| 九九热免费国产视频婷婷伊人| 国产成人主播| 91国产丝袜白虎| 91被操| 亚洲成人免费在线| 国产一级久久久| 一二三四区操操Av| 视频国产成人精品日本亚洲18| 日韩欧美中文| 午夜天天碰综合视频| 啊啊啊啊好疼视频| 操一操摸一摸| 国产一区二区三区精品观看啪| 欧美亚男人的天堂| 99在线精品观看视频中文 | 超碰九7| 国产操逼逼网| 男人天堂站| 国产乱码久久久| 曰韩操B| 无码人妻一区二区一牛影视| 在线电影亚洲色图| 懂色中文一区二区三区| 性爱综合网| 欧美综合色综合| 秋霞一级鲁丝片A片| 色情综合网| 99精品丰满人妻无码| 91搞逼视频| 东京太热久久久| 青女偷拍网| 成人八戒网站| 日韩激情视频| 男女无套 免费网站| 99热免费| 欧美三四五区| 99久久久er直播网址| 美美91成人国产精品欧美精品久久久久久久 | 久久人| 九九九精品色乱九九九| 亚洲第一页第二页激情| 日日狠狠久久偷偷色综合免费| 夜夜嗨免费视频| 国产成人亚洲精品无码古代早漏男 | 992这里有精品| 我要色综合网站| 亚洲精品乱码久久久久久蜜桃麻豆| 蜜臀AV成人精品蜜臀| av三级电影在线播放| 夜夜嗨一区二区| 亚洲av资源| 婷婷综合五月| 久久精品国产99久久,亚洲日韩久久日本一区一区三区 | WWW啪啪的com| 又摸又舔在线观看网站| 黄色香蕉视频网站一区| 欧美美女在线高潮999| 黄片视频观看| 欧美色997| 天天爽夜夜爽夜夜爽精| 97色视频在线| 欧美日韩国产三级黄色| 日韩 欧美 国产 麻豆| 操逼操逼逼操操逼91| 亚洲图片 激情小说| 深夜国产一区二区三区在线看| 久久国语| 亚洲精品a人片在线观看视| 久久久九| 91校园春色长篇| 中文字幕熟女人妻丝袜| 国产精品久久发布| 日韩操逼性鲍| 偷拍片久久| 性爱1区| 久久精品国产亚洲av水密被窝| 色五月婷婷麻豆在| 亚洲网站一区二区在线| 男人的天堂欧美| 亚洲中文日韩欧美大香蕉视频| Julia Annxxxxx| 亚洲精品精品一区二区| 啊啊啊好大好深| 久操B网| 亚洲伊人a线观看视频| 超碰 国产熟女精品一区| 伊人婷婷五月天| 大学生美女口爆| 爱爱久久| www久| 搡老熟女免费视频 | 97超碰久久色| 久久艹逼视频| 日本色色色网站免费看不卡| 综合色拍| 成人电影一区| 自拍偷拍草一草| 97久久国产精品| 日韩一级二级| 日韩性爱毛片操骚逼| 九九九成人| 亚91亚洲网| 久久性爱大全| 亚洲国产丝袜熟女av| 久久人妇| 女优免费一区二区永久| 看大黄色大片原件| 超碰精品97| 日韩av色图综合| 91精品黄在线观看| 欧美性生活男人的天堂| 91模特在线观看| 亚州乱码中文字幕综合久久久| 日韩中文字幕视频在线观看| 国产在线综合福利网站| 亚洲天堂一区二区| 嫩草伊人久久精品| 婷婷久草| 亚洲精品性爱片| 一起草视频在线| 日韩不卡一二三四| 精品人妻一区二区三区-国产精品 一个人在线看的黄色电影网站 | 国产吞精a级片激情电影| 奇米狠999| 九九九九久久久| 欧美性爱日韩性爱| av中亚| 麻豆区久久久久亚| 黑丝日韩av丝袜av| 狠狠久久亚洲欧美专区| 综合欧美激情网| 日本孕妇一区二区视频操逼免费看 | 特级丰满少妇一级AAAA爱毛片| 免费观看成人www精品视频| 九九九九精品视频| 日韩97视频| 天天天乱色综合全| 国产欧美日韩女同性恋ww喷水精品 | 国产男女边吃边摸视频网站| 97超碰欧美手机| 福利五区| 欧美成人国产精品| 午夜福利区| 蜜臀亚洲中文| 95精品在线| 人妻熟女午夜精品在线| 国内毛片无码一级毛片| 岛国大片在线观看网站入口| 国产精品视频91久久| 天天日天天干天天操| 亚洲色交| 国产熟女无套内射| 超碰欧美COM| 曰本特级特黄特色黄色A级网站高清在线免费看 | 伊人久久艹| 欧美顶级黄片AAAAA在线免费看| 久久成人国产| 日本三级一区二区 在线| 99久久精品无码一区二区毛片免费 | 精品国产肉丝袜在线拍国语| 丝袜熟女一区二区三区| 无码日韩人妻av一| 成人激情无码在线视频| 天天做日日做| 奇米四色影视777久久久| 国产女人高潮嗷嗷嗷叫小说 | 99综合视频| 亚洲色电影在线| 超碰碰97资源站| 久久精品无码专区|