亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 網(wǎng)管 > 服務(wù)器 > 正文

VC內(nèi)存泄露檢查工具:VisualLeakDetector

2020-05-27 13:49:42
字體:
供稿:網(wǎng)友

  初識(shí)VisualLeakDetector靈活自由是C/C++語言的一大特色,而這也為C/C++程序員出了一個(gè)難題。當(dāng)程序越來越復(fù)雜時(shí),內(nèi)存的管理也會(huì)變得越加復(fù)雜,稍有不慎就會(huì)出現(xiàn)內(nèi)存問題。內(nèi)存泄漏是最常見的內(nèi)存問題之一。內(nèi)存泄漏如果不是很嚴(yán)重,在短時(shí)間內(nèi)對(duì)程序不會(huì)有太大的影響,這也使得內(nèi)存泄漏問題有很強(qiáng)的隱蔽性,不容易被發(fā)現(xiàn)。然而不管內(nèi)存泄漏多么輕微,當(dāng)程序長(zhǎng)時(shí)間運(yùn)行時(shí),其破壞力是驚人的,從性能下降到內(nèi)存耗盡,甚至?xí)绊懙狡渌绦虻恼_\(yùn)行。另外內(nèi)存問題的一個(gè)共同特點(diǎn)是,內(nèi)存問題本身并不會(huì)有很明顯的現(xiàn)象,當(dāng)有異?,F(xiàn)象出現(xiàn)時(shí)已時(shí)過境遷,其現(xiàn)場(chǎng)已非出現(xiàn)問題時(shí)的現(xiàn)場(chǎng)了,這給調(diào)試內(nèi)存問題帶來了很大的難度。

VC內(nèi)存泄露檢查工具:VisualLeakDetector 武林網(wǎng)教程

  VisualLeakDetector是一款用于VisualC++的免費(fèi)的內(nèi)存泄露檢測(cè)工具??梢栽赩isualLeakDetector1.9-VC內(nèi)存泄露檢查工具下載到。相比較其它的內(nèi)存泄露檢測(cè)工具,它在檢測(cè)到內(nèi)存泄漏的同時(shí),還具有如下特點(diǎn):

  1、可以得到內(nèi)存泄漏點(diǎn)的調(diào)用堆棧,如果可以的話,還可以得到其所在文件及行號(hào);

  2、可以得到泄露內(nèi)存的完整數(shù)據(jù);

  3、可以設(shè)置內(nèi)存泄露報(bào)告的級(jí)別;

  4、它是一個(gè)已經(jīng)打包的lib,使用時(shí)無須編譯它的源代碼。而對(duì)于使用者自己的代碼,也只需要做很小的改動(dòng);

  5、他的源代碼使用GNU許可發(fā)布,并有詳盡的文檔及注釋。對(duì)于想深入了解堆內(nèi)存管理的讀者,是一個(gè)不錯(cuò)的選擇。可見,從使用角度來講,VisualLeakDetector簡(jiǎn)單易用,對(duì)于使用者自己的代碼,唯一的修改是#includeVisualLeakDetector的頭文件后正常運(yùn)行自己的程序,就可以發(fā)現(xiàn)內(nèi)存問題。從研究的角度來講,如果深入VisualLeakDetector源代碼,可以學(xué)習(xí)到堆內(nèi)存分配與釋放的原理、內(nèi)存泄漏檢測(cè)的原理及內(nèi)存操作的常用技巧等。本文首先將介紹VisualLeakDetector的使用方法與步驟,然后再和讀者一起初步的研究 VisualLeakDetector的源代碼,去了解VisualLeakDetector的工作原理。使用 VisualLeakDetector(1.0)下面讓我們來介紹如何使用這個(gè)小巧的工具。首先從網(wǎng)站上下載zip包,解壓之后得到 vld.h,vldapi.h,vld.lib,vldmt.lib,vldmtdll.lib,dbghelp.dll等文件。將.h文件拷貝到 VisualC++的默認(rèn)include目錄下,將.lib文件拷貝到VisualC++的默認(rèn)lib目錄下,便安裝完成了。因?yàn)榘姹締栴},如果使用 windows2000或者以前的版本,需要將dbghelp.dll拷貝到你的程序的運(yùn)行目錄下,或其他可以引用到的目錄。

  接下來需要將其加入到自己的代碼中。方法很簡(jiǎn)單,只要在包含入口函數(shù)的.cpp文件中包含vld.h就可以。如果這個(gè)cpp文件包含了 stdafx.h,則將包含vld.h的語句放在stdafx.h的包含語句之后,否則放在最前面。如下是一個(gè)示例程序:#includevoidmain(){…}接下來讓我們來演示如何使用VisualLeakDetector檢測(cè)內(nèi)存泄漏。下面是一個(gè)簡(jiǎn)單的程序,用new分配了一個(gè)int大小的堆內(nèi)存,并沒有釋放。其申請(qǐng)的內(nèi)存地址用printf輸出到屏幕上。#include#include#includevoidf() {int*p=newint(0x12345678);printf("p=%08x,",p);}voidmain(){f();}編譯運(yùn)行后,在標(biāo)準(zhǔn)輸出窗口得到:p=003a89c0在VisualC++的Output窗口得到:WARNING:VisualLeakDetectordetectedmemoryleaks!----------Block57at0x003A89C0:4bytes------------ 57號(hào)塊0x003A89C0地址泄漏了4個(gè)字節(jié)CallStack:--下面是調(diào)用堆棧d:testtestvldconsole testvldconsolemain.cpp(7):f--表示在main.cpp第7行的f()函數(shù)d:test testvldconsoletestvldconsolemain.cpp(14):main–雙擊以引導(dǎo)至對(duì)應(yīng)代碼處f:rtm vctoolscrt_bldself_x86crtsrccrtexe.c(586):__tmainCRTStartupf:rtm vctoolscrt_bldself_x86crtsrc crtexe.c(403):mainCRTStartup0x7C816D4F(Fileandlinenumbernotavailable):RegisterWaitForInputIdleData:-- 這是泄漏內(nèi)存的內(nèi)容,0x1234567878563412xV4.............VisualLeakDetectordetected1memoryleak. 第二行表示57號(hào)塊有4字節(jié)的內(nèi)存泄漏,地址為0x003A89C0,根據(jù)程序控制臺(tái)的輸出,可以知道,該地址為指針p。程序的第7行,f()函數(shù)里,在該地址處分配了4字節(jié)的堆內(nèi)存空間,并賦值為0x12345678,這樣在報(bào)告中,我們看到了這4字節(jié)同樣的內(nèi)容。

  可以看出,對(duì)于每一個(gè)內(nèi)存泄漏,這個(gè)報(bào)告列出了它的泄漏點(diǎn)、長(zhǎng)度、分配該內(nèi)存時(shí)的調(diào)用堆棧、和泄露內(nèi)存的內(nèi)容(分別以16進(jìn)制和文本格式列出)。雙擊該堆棧報(bào)告的某一行,會(huì)自動(dòng)在代碼編輯器中跳到其所指文件的對(duì)應(yīng)行。這些信息對(duì)于我們查找內(nèi)存泄露將有很大的幫助。這是一個(gè)很方便易用的工具,安裝后每次使用時(shí),僅僅需要將它頭文件包含進(jìn)來重新build就可以。而且,該工具僅在buildDebug版的時(shí)候會(huì)連接到你的程序中,如果 buildRelease版,該工具不會(huì)對(duì)你的程序產(chǎn)生任何性能等方面影響。所以盡可以將其頭文件一直包含在你的源代碼中。 VisualLeakDetector工作原理下面讓我們來看一下該工具的工作原理。在這之前,我們先來看一下VisualC++內(nèi)置的內(nèi)存泄漏檢測(cè)工具是如何工作的。VisualC++內(nèi)置的工具CRTDebugHeap工作原來很簡(jiǎn)單。在使用Debug版的malloc分配內(nèi)存時(shí),malloc會(huì)在內(nèi)存塊的頭中記錄分配該內(nèi)存的文件名及行號(hào)。當(dāng)程序退出時(shí)CRT會(huì)在main()函數(shù)返回之后做一些清理工作,這個(gè)時(shí)候來檢查調(diào)試堆內(nèi)存,如果仍然有內(nèi)存沒有被釋放,則一定是存在內(nèi)存泄漏。從這些沒有被釋放的內(nèi)存塊的頭中,就可以獲得文件名及行號(hào)。

  這種靜態(tài)的方法可以檢測(cè)出內(nèi)存泄漏及其泄漏點(diǎn)的文件名和行號(hào),但是并不知道泄漏究竟是如何發(fā)生的,并不知道該內(nèi)存分配語句是如何被執(zhí)行到的。要想了解這些,就必須要對(duì)程序的內(nèi)存分配過程進(jìn)行動(dòng)態(tài)跟蹤。VisualLeakDetector就是這樣做的。它在每次內(nèi)存分配時(shí)將其上下文記錄下來,當(dāng)程序退出時(shí),對(duì)于檢測(cè)到的內(nèi)存泄漏,查找其記錄下來的上下文信息,并將其轉(zhuǎn)換成報(bào)告輸出。初始化VisualLeakDetector要記錄每一次的內(nèi)存分配,而它是如何監(jiān)視內(nèi)存分配的呢?Windows提供了分配鉤子(allocationhooks)來監(jiān)視調(diào)試堆內(nèi)存的分配。它是一個(gè)用戶定義的回調(diào)函數(shù),在每次從調(diào)試堆分配內(nèi)存之前被調(diào)用。在初始化時(shí),VisualLeakDetector使用_CrtSetAllocHook注冊(cè)這個(gè)鉤子函數(shù),這樣就可以監(jiān)視從此之后所有的堆內(nèi)存分配了。如何保證在VisualLeakDetector初始化之前沒有堆內(nèi)存分配呢?全局變量是在程序啟動(dòng)時(shí)就初始化的,如果將 VisualLeakDetector作為一個(gè)全局變量,就可以隨程序一起啟動(dòng)。但是C/C++并沒有約定全局變量之間的初始化順序,如果其它全局變量的構(gòu)造函數(shù)中有堆內(nèi)存分配,則可能無法檢測(cè)到。

  VisualLeakDetector使用了C/C++提供的#pragmainit_seg來在某種程度上減少其它全局變量在其之前初始化的概率。根據(jù)#pragmainit_seg的定義,全局變量的初始化分三個(gè)階段:首先是compiler段,一般c語言的運(yùn)行時(shí)庫在這個(gè)時(shí)候初始化;然后是lib 段,一般用于第三方的類庫的初始化等;最后是user段,大部分的初始化都在這個(gè)階段進(jìn)行。VisualLeakDetector將其初始化設(shè)置在 compiler段,從而使得它在絕大多數(shù)全局變量和幾乎所有的用戶定義的全局變量之前初始化。記錄內(nèi)存分配一個(gè)分配鉤子函數(shù)需要具有如下的形式:intYourAllocHook(intallocType,void*userData,size_tsize,intblockType,longrequestNumber,constunsignedchar*filename,intlineNumber); 就像前面說的,它在VisualLeakDetector初始化時(shí)被注冊(cè),每次從調(diào)試堆分配內(nèi)存之前被調(diào)用。這個(gè)函數(shù)需要處理的事情是記錄下此時(shí)的調(diào)用堆棧和此次堆內(nèi)存分配的唯一標(biāo)識(shí)——requestNumber。得到當(dāng)前的堆棧的二進(jìn)制表示并不是一件很復(fù)雜的事情,但是因?yàn)椴煌w系結(jié)構(gòu)、不同編譯器、不同的函數(shù)調(diào)用約定所產(chǎn)生的堆棧內(nèi)容略有不同,要解釋堆棧并得到整個(gè)函數(shù)調(diào)用過程略顯復(fù)雜。不過windows提供一個(gè)StackWalk64函數(shù),可以獲得堆棧的內(nèi)容。StackWalk64的聲明如下:BOOLStackWalk64(DWORDMachineType,HANDLEhProcess,HANDLEhThread,LPSTACKFRAME64StackFrame,PVOIDContextRecord,

PREAD_PROCESS_MEMORY_ROUTINE64ReadMemoryRoutine,PFUNCTION_TABLE_ACCESS_ROUTINE64FunctionTableAccessRoutine,

PGET_MODULE_BASE_ROUTINE64GetModuleBaseRoutine,PTRANSLATE_ADDRESS_ROUTINE64TranslateAddress);STACKFRAME64 結(jié)構(gòu)表示了堆棧中的一個(gè)frame。給出初始的STACKFRAME64,反復(fù)調(diào)用該函數(shù),便可以得到內(nèi)存分配點(diǎn)的調(diào)用堆棧了。 //Walkthestack.while(count<_VLD_maxtraceframes){count++;if(!pStackWalk64(architecture,m_process,m_thread,&frame,&context,NULL,pSymFunctionTableAccess64,

pSymGetModuleBase64,NULL)){//Couldnttracebackthroughanymoreframes.break;}if(frame.AddrFrame.Offset==0){//Endofstack.break;}//PushthisframesprogramcounterontotheprovidedCallStack.callstack->push_back((DWORD_PTR)frame.AddrPC.Offset);}

  那么,如何得到初始的STACKFRAME64結(jié)構(gòu)呢?在STACKFRAME64結(jié)構(gòu)中,其他的信息都比較容易獲得,而當(dāng)前的程序計(jì)數(shù)器(EIP)在 x86體系結(jié)構(gòu)中無法通過軟件的方法直接讀取。VisualLeakDetector使用了一種方法來獲得當(dāng)前的程序計(jì)數(shù)器。首先,它調(diào)用一個(gè)函數(shù),則這個(gè)函數(shù)的返回地址就是當(dāng)前的程序計(jì)數(shù)器,而函數(shù)的返回地址可以很容易的從堆棧中拿到。下面是VisualLeakDetector獲得當(dāng)前程序計(jì)數(shù)器的程序:#ifdefined(_M_IX86)||defined(_M_X64)#pragmaauto_inline(off)DWORD_PTRVisualLeakDetector::getprogramcounterx86x64() {DWORD_PTRprogramcounter;__asmmovAXREG, [BPREG+SIZEOFPTR]//Getthereturnaddressoutofthecurrentstackframe__asmmov[programcounter],AXREG //Putthereturnaddressintothevariablewellreturnreturnprogramcounter;}#pragmaauto_inline(on)#endif //defined(_M_IX86)||defined(_M_X64)得到了調(diào)用堆棧,自然要記錄下來。VisualLeakDetector使用一個(gè)類似map的數(shù)據(jù)結(jié)構(gòu)來記錄該信息。這樣可以方便的從requestNumber查找到其調(diào)用堆棧。分配鉤子函數(shù)的allocType參數(shù)表示此次堆內(nèi)存分配的類型,包括_HOOK_ALLOC,_HOOK_REALLOC,和_HOOK_FREE,下面代碼是VisualLeakDetector對(duì)各種情況的處理。switch(type) {case_HOOK_ALLOC:visualleakdetector.hookmalloc(request);break;case_HOOK_FREE:visualleakdetector.hookfree(pdata);break;

case_HOOK_REALLOC:visualleakdetector.hookrealloc(pdata,request);break;default:visualleakdetector.report("WARNING:

VisualLeakDetector:

inallochook():Unhandledallocationtype(%d).n",type);break;} 這里,hookmalloc()函數(shù)得到當(dāng)前堆棧,并將當(dāng)前堆棧與requestNumber加入到類似map的數(shù)據(jù)結(jié)構(gòu)中。hookfree()函數(shù)從類似map的數(shù)據(jù)結(jié)構(gòu)中刪除該信息。hookrealloc()函數(shù)依次調(diào)用了hookfree()和hookmalloc()。

  檢測(cè)內(nèi)存泄露前面提到了VisualC++內(nèi)置的內(nèi)存泄漏檢測(cè)工具的工作原理。與該原理相同,因?yàn)槿肿兞恳詷?gòu)造的相反順序析構(gòu),在 VisualLeakDetector析構(gòu)時(shí),幾乎所有的其他變量都已經(jīng)析構(gòu),此時(shí)如果仍然有未釋放之堆內(nèi)存,則必為內(nèi)存泄漏。分配的堆內(nèi)存是通過一個(gè)鏈表來組織的,檢查內(nèi)存泄漏則是檢查此鏈表。但是windows沒有提供方法來訪問這個(gè)鏈表。VisualLeakDetector使用了一個(gè)小技巧來得到它。首先在堆上申請(qǐng)一塊臨時(shí)內(nèi)存,則該內(nèi)存的地址可以轉(zhuǎn)換成指向一個(gè)_CrtMemBlockHeader結(jié)構(gòu),在此結(jié)構(gòu)中就可以獲得這個(gè)鏈表。代碼如下:char*pheap=newchar;_CrtMemBlockHeader*pheader=pHdr(pheap)-> pBlockHeaderNext;deletepheap;其中pheader則為鏈表首指針。報(bào)告生成前面講了VisualLeakDetector 如何檢測(cè)、記錄內(nèi)存泄漏及其其調(diào)用堆棧。但是如果要這個(gè)信息對(duì)程序員有用的話,必須轉(zhuǎn)換成可讀的形式。VisualLeakDetector使用 SymGetLineFromAddr64()及SymFromAddr()生成可讀的報(bào)告。 //Iteratethrougheachframeinthecallstack.for(frame=0;frame

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
欧美爱爱小视频| 色偷偷网站视频| 一本色道久久99精品综合| 亚洲乱妇老熟女爽到高潮的片| 99热在线只有精品| 一区二区在线免费看| 亚洲成av人片在线观看无| 伊人成人开心激情综合网| 久久精品国产亚洲av久| 欧美一卡二卡在线观看| 久久艹这里只有精品| 中文字幕欧美视频| 亚洲欧美日韩国产成人精品影院| 国产伦精品一区二区三区免费视频| 人人爽人人爽av| aaa在线播放视频| 久热精品视频在线| 免费观看久久久4p| 日韩av一区二| 女生裸体免费视频| 欧美日韩免费一区| 黄色一级视频免费| 精品无码一区二区三区的天堂| 欧美一级本道电影免费专区| 成人性生交大免费看| 成人综合视频在线| 精品88久久久久88久久久| 精品一区不卡| 日本美女一区二区| 欧美日韩一区国产| 91超薄丝袜肉丝一区二区| 国产女女做受ⅹxx高潮| 亚洲视频一区二区在线| 你懂的视频在线免费| 久久国产精品久久久久久久久久| 日韩欧美视频在线免费观看| 午夜精彩视频在线观看不卡| 亚洲高清不卡在线观看| 日本少妇激情视频| c++连点器| 亚洲综合偷拍欧美一区色| 美国毛片一区二区三区| 波多野结衣加勒比| 午夜久久久久久电影| 精品视频一区在线| 欧美久久一区| 欧美亚一区二区三区| 欧美日韩精品免费观看视频完整| 国产网站在线看| 欧美成人免费大片| a∨色狠狠一区二区三区| 国产精品suv一区二区69| 精品国产一区二区三区忘忧草| 一个人看的www一区| 亚洲色图清纯唯美| 久久人人爽人人爽人人片av高请| 亚洲欧洲av一区二区三区久久| 亚洲天堂色网站| 日本丰满大乳奶| 成人午夜激情| jizz性欧美2| 日韩免费在线看| 欧美一区二区在线播放| 一二三区高清| 免费日本黄色网址| 香蕉视频999| 色婷婷在线影院| 欧美三级特黄| 91久久久久久久久久| 高h调教冰块play男男双性文| 欧美成熟毛茸茸| 久草手机在线观看| 在线观看免费av网址| 男女毛片免费视频看| 精品动漫3d一区二区三区免费| 久久这里只精品| 精品国产午夜肉伦伦影院| 国产精品久久久久久久久久久免费看| 国产精品久久久久久影视| 久久久久久一区| 亚洲成人网在线观看| 亚洲精品亚洲人成在线观看| 日韩精品视频在线| 视频免费一区二区| 人人精品视频| 亚洲黄色小说网站| 亚洲永久av| 亚洲一区二区三区精品在线| 日韩在线欧美在线国产在线| 天堂а在线中文在线无限看推荐| 久久久久久日本一区99| 日韩av在线电影| 美女露胸视频在线观看| 国产性xxxx| 亚洲一区尤物| 久久久久久在线观看| 蜜桃久久久久久久| 亚洲靠逼com| 国产一区二区成人| 成人免费视频国产| 91九色在线观看| 日本不卡免费新一二三区| 在线视频日韩欧美| 欧美国产国产综合| caoporn97在线视频| 四虎国产精品永久在线| 欧美丰满美乳xxⅹ高潮www| 波多野结衣在线电影| 一本色道无码道dvd在线观看| 日韩午夜小视频| 欧美日韩精品二区| 国产精品日日做人人爱| 精品国产三级电影在线观看| 99久久综合狠狠综合久久止| 在线电影欧美成精品| 午夜一区在线| 精品国产一区二区三区久久久| 欧美日韩中字| 精品视频在线观看免费| 国产午夜福利片| 欧美粗暴jizz性欧美20| 精品美女视频在线观看免费软件| 91精品国产91久久综合| 日本视频免费高清一本18| 黄色成人av在线| 高清日韩欧美| 午夜视黄欧洲亚洲| 精品999视频| 精品日本12videosex| 亚洲乱码国产乱码精品精大量| 91精品xxx在线观看| 日韩在线视频线视频免费网站| 久久精品亚洲94久久精品| av一二三不卡影片| 四虎影院中文字幕| 蜜桃精品在线| 亚洲精选av| 日本电影在线观看| 国产精品第8页| 国产午夜精品全部视频播放| 国产成人精品一区二区三区视频| 丁香视频免费观看| 黄色精品一二区| 羞羞污视频在线观看| 亚洲男女自偷自拍图片另类| 欧美一级日韩不卡播放免费| 三年中国中文在线观看免费播放| 日本视频一区二区在线观看| 亚洲欧美一区二区三区孕妇| 中文字幕日韩久久| 91麻豆精品成人一区二区| 久久久久噜噜噜亚洲熟女综合| 国产成人av电影免费在线观看| 久久av一区二区三区亚洲| 911国产网站尤物在线观看| 韩日成人影院| 久久久久久国产精品美女| 色素色在线综合| 国产精品在线看| 欧美在线一二三区| 色综合久久影院| 成人看片视频| 美女网站免费观看视频| 精品人在线二区三区| 人人狠狠综合久久亚洲婷婷| 高清福利在线观看| 老牛影视一区二区三区| 国产精品极品| 成人中文字幕在线| h短视频大全在线观看| 成人免费视频在线观看超级碰| 中文字幕人妻一区二区在线视频| 人成网站在线观看| 毛片基地黄久久久久久天堂| 玖玖精品视频| 亚洲福利视频网| 久久精品夜夜夜夜夜久久| 国产精品日韩精品中文字幕| 一区二区在线电影| 丰满岳乱妇一区二区| 狼人精品一区二区三区在线| 亚洲码欧美码一区二区三区| 任你操这里只有精品| 五月婷婷亚洲| 青草久久视频| av亚洲免费| 性久久久久久久| 欧美成年人视频网站| 看黄的a网站| 宅男宅女性影片资源在线1| 日本黄网免费一区二区精品| 一本到12不卡视频在线dvd| 国产欧美综合精品一区二区| www.黄色com| 秋霞国产午夜精品免费视频| 在线一区亚洲| 欧美性色aⅴ视频一区日韩精品| 亚洲人的天堂男人爽爽爽| 国产精品天干天干在线综合| 国产视频一区二区三区在线观看| 久久99精品国产91久久来源| 欧美粗暴性video| 97人人模人人爽人人喊38tv| 天堂在线视频中文网| 国产亚洲人成网站在线观看| 日韩精品在在线一区二区中文| 欧美高清在线视频观看不卡| 国偷自产av一区二区三区| 蜜桃视频成人在线观看| 国产一区二区三区四区五区加勒比| 日韩欧美亚洲一区二区三区| 亚洲精品一线二线三线| 影视先锋av在线| 久久免费视频网站| 久久综合桃花网| 不卡福利视频| 日韩电影免费网址| 国产精品夜色7777狼人| 国精一区二区| 懂色aⅴ精品一区二区三区蜜月| 黄色99视频| 精品女同一区二区三区在线播放| 国产午夜亚洲精品午夜鲁丝片| 视频在线观看一区| 男人的天堂色| 欧美性色综合网| 一本一本久久a久久综合精品| 涩涩涩视频在线观看| 日韩免费视频一区二区| 亚洲激情五月婷婷| 亚洲欧洲一区二区天堂久久| 成人免费视频毛片| 青草网在线观看| 美女网站一区二区| 高清福利在线观看| 草草影院在线| 在线免费看91| 三级做a全过程在线观看| 四虎国产精品永久| 高清不卡一区| 伊人久久大香线蕉综合75| bt7086福利一区国产| 一级特黄录像免费播放全99| 欧美日韩高清| ijzzijzzij亚洲大全| 污污动漫在线观看| 西西44rtwww国产精品| 日韩欧美在线综合网| 国产精品卡一卡二| 在线观看麻豆视频| 欧美色综合天天久久综合精品| 欧美亚洲三区| 亚洲日本va午夜在线电影| 亚洲欧美日韩成人网| www.激情五月.com| 亚洲夜晚福利在线观看| 性欧美18一19性猛交| 中文字幕在线播放av| 一区二区视频观看| 日韩午夜视频在线观看| 国产欧美日韩视频在线观看| 日本久久中文字幕| 国产精品成人观看视频国产奇米| 欧美涩涩视频| 亚洲第一在线视频| 国产二级片在线| 成人深夜视频在线观看| 日本理论中文字幕| 亚洲国产精品区| 亚洲国产成人porn| 91精品国产欧美一区二区成人| 偷拍视频一区二区| 亚洲图片欧洲图片日韩av| 欧美午夜精品| 国产精品你懂得| 久久久www成人免费精品| 欧美中文在线观看| 美国一级黄色录像| 免费观看黄一级视频| 亚洲一二三区视频| 91香蕉电影院| 欧美高清xxxxxkkkkk| 一级做a爱片久久| 欧美在线看片| 在线播放日韩精品| 午夜视频免费在线观看| 国产深夜精品福利| 日韩欧美美女一区二区三区| 麻豆久久久av免费| 亚洲一区二区三区四区五区午夜| 欧美一区二区色| 极品久久久久久久| 97福利网站在线观看视频| 国产精品v欧美精品v日本精品动漫| 国产福利微拍精品一区二区| 欧美videos另类齐全| 成人在线免费看视频| 激情亚洲色图| 欧洲一区二区av| 欧美日韩ab| 国产伦理吴梦梦伦理| 国产极品美女到高潮| 国产黄a三级三级看三级| 欧美黄色免费网站| 国产精品亚洲一区二区三区| 91久久精品网| 久久九九久久九九| 国产91绿帽单男绿奴| 水蜜桃在线视频| 日韩精品久久久久久免费| 欧美xxxx黑人又粗又长| 91午夜交换视频| 国产小视频在线观看| 欧美黄色一区二区三区| 希岛爱理av一区二区三区| 色视频欧美一区二区三区| 亚洲va久久久噜噜噜久久天堂| 国产精品日韩一区二区三区| 成人毛片免费在线观看| 台湾av在线二三区观看| 亚洲香蕉成人av网站在线观看| 国产一区二区在线影院| 亚洲高清视频的网址| 欧洲亚洲成人| 在线视频一二区| 日韩一区二区不卡视频| 天堂中文最新版在线中文| 久久综合久久综合这里只有精品|