青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆 - 505  文章 - 1034  trackbacks - 0
<2009年8月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
303112345


子曾經曰過:編程無他,唯手熟爾!

常用鏈接

留言簿(94)

隨筆分類(649)

隨筆檔案(505)

相冊

BCB

Crytek

  • crymod
  • Crytek's Offical Modding Portal

Game Industry

OGRE

other

Programmers

Qt

WOW Stuff

搜索

  •  

積分與排名

  • 積分 - 918837
  • 排名 - 14

最新隨筆

最新評論

閱讀排行榜

評論排行榜

好不容易復現的宕機bug,結果不產生dump文件,讓俺情何以堪啊!坑爹嘛!
大部分情況還好,就是彈出這種“Runtime Error”框的時候,不產生dump文件,解決它!!!


VS2005中SetUnhandledExceptionFilter函數應用


很多軟件通過設置自己的異常捕獲函數,捕獲未處理的異常,生成報告或者日志(例如生成mini-dump文件),達到Release版本下追蹤Bug的目的。但是,到了VS2005(即VC8),Microsoft對CRT(C運行時庫)的一些與安全相關的代碼做了些改動,典型的,例如增加了對緩沖溢出的檢查。新CRT版本在出現錯誤時強制把異常拋給默認的調試器(如果沒有配置的話,默認是Dr.Watson),而不再通知應用程序設置的異常捕獲函數,這種行為主要在以下三種情況出現。

(1)       調用abort函數,并且設置了_CALL_REPORTFAULT選項(這個選項在Release版本是默認設置的)。

(2)       啟用了運行時安全檢查選項,并且在軟件運行時檢查出安全性錯誤,例如出現緩存溢出。(安全檢查選項 /GS 默認也是打開的)

(3)       遇到_invalid_parameter錯誤,而應用程序又沒有主動調用

_set_invalid_parameter_handler設置錯誤捕獲函數。

所以結論是,使用VS2005(VC8)編譯的程序,許多錯誤都不能在SetUnhandledExceptionFilter捕獲到。這是CRT相對于前面版本的一個比較大的改變,但是很遺憾,Microsoft卻沒有在相應的文檔明確指出。

解決方法

       之所以應用程序捕獲不到那些異常,原因是因為新版本的CRT實現在異常處理中強制刪除所有應用程序先前設置的捕獲函數,如下所示:

 /* Make sure any filter already in place is deleted. */

 SetUnhandledExceptionFilter(NULL);

 UnhandledExceptionFilter(&ExceptionPointers);

解決方法是攔截CRT調用SetUnhandledExceptionFilter函數,使之無效。在X86平臺下,可以使用以下代碼。

#ifndef _M_IX86

       #error "The following code only works for x86!"

#endif

 

void DisableSetUnhandledExceptionFilter()

{

    void *addr = (void*)GetProcAddress(LoadLibrary(_T("kernel32.dll")),

                                                         "SetUnhandledExceptionFilter");

    if (addr)

    {

              unsigned char code[16];

              int size = 0;

              code[size++] = 0x33;

              code[size++] = 0xC0;

              code[size++] = 0xC2;

              code[size++] = 0x04;

              code[size++] = 0x00;

 

               DWORD dwOldFlag, dwTempFlag;

              VirtualProtect(addr, size, PAGE_READWRITE, &dwOldFlag);

              WriteProcessMemory(GetCurrentProcess(), addr, code, size, NULL);

              VirtualProtect(addr, size, dwOldFlag, &dwTempFlag);

       }

}

在設置自己的異常處理函數后,調用DisableSetUnhandledExceptionFilter禁止CRT設置即可。

其它討論

       上面通過設置api hook,解決了在VS2005上的異常捕獲問題,這種雖然不是那么“干凈”的解決方案,確是目前唯一簡單有效的方式。

       雖然也可以通過_set_abort_behavior(0, _WRITE_ABORT_MSG | _CALL_REPORTFAULT), signal(SIGABRT, ...), 和_set_invalid_parameter_handler(...) 解決(1)(3),但是對于(2),設置api hook是唯一的方式。


http://blog.csdn.net/WinGeek/article/details/3942995
[Windows編程] 如何捕捉程序異常/crash 并生成 dump 文件

前面介紹如如何用WinDBG 生成crash dump 《WinDBG 技巧:如何生成Dump 文件(.dump 命令) 》,但是用戶機器上通常不安裝WinDBG, 而且多數用戶也不知道怎么使用WinDBG。 所以最好是自己程序里面能夠捕捉exception/crash,并且生成crash dump,然后通過網絡傳回到自己服務器。

 

捕捉exception 可以用API 函數 SetUnhandledExceptionFilter 。生成crash dump 可以用DbgHelp.dll 里面的MiniDumpWriteDump 函數。

 

LPTOP_LEVEL_EXCEPTION_FILTER WINAPI SetUnhandledExceptionFilter( __in LPTOP_LEVEL_EXCEPTION_FILTER lpTopLevelExceptionFilter );

 

BOOL WINAPI MiniDumpWriteDump( __in HANDLE hProcess, __in DWORD ProcessId, __in HANDLE hFile, __in MINIDUMP_TYPE DumpType, __in PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam, __in PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam, __in PMINIDUMP_CALLBACK_INFORMATION CallbackParam );

 

 

代碼示例:

 

 

  1. #include <dbghelp.h>  
  2. #include <shellapi.h>  
  3. #include <shlobj.h>  
  4.   
  5.   
  6. // 自定義的exectpion filter  
  7. LONG WINAPI MyUnhandledExceptionFilter(struct _EXCEPTION_POINTERS *pExceptionPointers)  
  8. {  
  9.   
  10.     SetErrorMode( SEM_NOGPFAULTERRORBOX );  
  11.   
  12.     //收集信息  
  13.      CStringW strBuild;  
  14.     strBuild.Format(L"Build: %s %s", __DATE__, __TIME__);  
  15.     CStringW strError;  
  16.     HMODULE hModule;  
  17.     WCHAR szModuleName[MAX_PATH] = L"";  
  18.     GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, (LPCWSTR)pExceptionPointers->ExceptionRecord->ExceptionAddress, &hModule);  
  19.     GetModuleFileName(hModule, szModuleName, ARRAYSIZE(szModuleName));  
  20.     strError.AppenedFormat(L"%s %d , %d ,%d.", szModuleName,pExceptionPointers->ExceptionRecord->ExceptionCode, pExceptionPointers->ExceptionRecord->ExceptionFlags, pExceptionPointers->ExceptionRecord->ExceptionAddress);  
  21.   
  22.     //生成 mini crash dump  
  23.     BOOL bMiniDumpSuccessful;  
  24.     WCHAR szPath[MAX_PATH];   
  25.     WCHAR szFileName[MAX_PATH];   
  26.     WCHAR* szAppName = L"AppName";  
  27.     WCHAR* szVersion = L"v1.0";  
  28.     DWORD dwBufferSize = MAX_PATH;  
  29.     HANDLE hDumpFile;  
  30.     SYSTEMTIME stLocalTime;  
  31.     MINIDUMP_EXCEPTION_INFORMATION ExpParam;  
  32.     GetLocalTime( &stLocalTime );  
  33.     GetTempPath( dwBufferSize, szPath );  
  34.     StringCchPrintf( szFileName, MAX_PATH, L"%s%s", szPath, szAppName );  
  35.     CreateDirectory( szFileName, NULL );  
  36.     StringCchPrintf( szFileName, MAX_PATH, L"%s%s//%s-%04d%02d%02d-%02d%02d%02d-%ld-%ld.dmp",   
  37.                szPath, szAppName, szVersion,   
  38.                stLocalTime.wYear, stLocalTime.wMonth, stLocalTime.wDay,   
  39.                stLocalTime.wHour, stLocalTime.wMinute, stLocalTime.wSecond,   
  40.                GetCurrentProcessId(), GetCurrentThreadId());  
  41.     hDumpFile = CreateFile(szFileName, GENERIC_READ|GENERIC_WRITE,   
  42.                 FILE_SHARE_WRITE|FILE_SHARE_READ, 0, CREATE_ALWAYS, 0, 0);  
  43.   
  44.     MINIDUMP_USER_STREAM UserStream[2];  
  45.     MINIDUMP_USER_STREAM_INFORMATION UserInfo;  
  46.     UserInfo.UserStreamCount = 1;  
  47.     UserInfo.UserStreamArray = UserStream;  
  48.     UserStream[0].Type = CommentStreamW;  
  49.     UserStream[0].BufferSize = strBuild.GetLength()*sizeof(WCHAR);  
  50.     UserStream[0].Buffer = strBuild.GetBuffer();  
  51.     UserStream[1].Type = CommentStreamW;  
  52.     UserStream[1].BufferSize = strError.GetLength()*sizeof(WCHAR);  
  53.     UserStream[1].Buffer = strError.GetBuffer();  
  54.   
  55.     ExpParam.ThreadId = GetCurrentThreadId();  
  56.     ExpParam.ExceptionPointers = pExceptionPointers;  
  57.     ExpParam.ClientPointers = TRUE;  
  58.       
  59.     MINIDUMP_TYPE MiniDumpWithDataSegs = MiniDumpNormal   
  60.             | MiniDumpWithHandleData   
  61.             | MiniDumpWithUnloadedModules   
  62.             | MiniDumpWithIndirectlyReferencedMemory   
  63.             | MiniDumpScanMemory   
  64.             | MiniDumpWithProcessThreadData   
  65.             | MiniDumpWithThreadInfo;  
  66.     bMiniDumpSuccessful = MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(),   
  67.                     hDumpFile, MiniDumpWithDataSegs, &ExpParam, NULL, NULL);  
  68.   // 上傳mini dump 到自己服務器(略)  
  69.   ...  
  70.   
  71.   return EXCEPTION_CONTINUE_SEARCH; //或者 EXCEPTION_EXECUTE_HANDLER 關閉程序  
  72. }  
  73.    
  74. int _tmain()  
  75. {  
  76.   // 設置 execption filter  
  77.   SetUnhandledExceptionFilter(MyUnhandledExceptionFilter);  
  78.   ....  
  79.   return 0;  
  80. }  


http://blog.csdn.net/mergerly/article/details/6662797
 VC++ Runtime Error 異常捕獲之不掛的程序

  VC++ Runtime Error,  對不少朋友來說, 這是一個十分討厭的錯誤提示,  您可能不知道如何著手調試: 產生這個錯誤的原因是什么? 確實只有知道了產生這個錯誤的直接原因, 才能去調試這個錯誤.

     剛碰到這個錯誤的時候, 是發生在視頻解碼的時候,  由于解碼一直在工作狀態,  所以我也不知道如何去調試, 當出現這個錯誤之后, 我們大多數時候就忽略了, 想從其他地方解決, 提高穩定性, 甚至懷疑解碼器的穩定性;  后來, 我接觸解碼庫之后,  開始調試這樣的錯誤, 剛開始這樣的錯誤并不容易重現, 往往要幾個小時,  當這個錯誤重現之后,  程序還是在運行的, 只是其中的某一個線程中斷了執行,  其中的這個線程彈出了 "VC++ Runtime Error" 這樣的對話框, 如果你點擊它, 則整個應用程序會直接退出. 為了調試, 我就不能點擊這個對話框, 而是使用VC2005附件到進程, 然后再直接中斷進程, 這個時候, 會有一個線程中斷點就在對話框的消息循環中, 仔細查看堆棧, 發現了一個函數: msvcrt.dll!_abort() ,  到這里是時候查看MSDN了:

     

      函數名: abort

  功 能: 異常終止一個進程

  用 法: void abort(void);

      In a single or multithreaded Windows-based application, abort calls the Windows MessageBox function to create a message box to display the message with anOK button. When the user clicks OK, the program aborts immediately. 

    

    我們的程序就是基于WINDOS窗口的多線程應用程序,  調用了abort就會彈出對話框, 在release版本中, 就是一個確認對話框, 點擊后程序就提示出錯并退出.

    在正常的程序里, 我們是不會調用abort的, 除非是遇到了嚴重的, 不能恢復的錯誤.  那么到底這個abort是怎么被調用的呢, 我們自己寫的代碼顯然是沒有這個函數, 再仔細查看堆棧,  發現是在一個C語言版本的開源庫中.  我們的程序是需要7*24小時運行的, 出現了解碼異常應該要被我們忽略, 而不是應用程序崩潰. 開源的跨平臺解碼庫是C語言寫的,  在出現了嚴重錯誤時, 就直接abort這也是可以理解的, 不過, 這樣的程序在我們的代碼中顯然要避免.  大哥, 現在都是什么年代了, 很多程序都是需要一直跑的, 我只好改的庫的源代碼來重新編譯程序才能解決這個問題了, 該怎么改了, 如果去分析解碼的邏輯, 我們沒有專業的人才.  我想就干脆從abort函數這里入手, 直接返回成功值, 但是這樣對解碼邏輯影響更大, 可能導致更大的錯誤,  我想到了操作系統的異常機制, 由于我們是在WINDOWS平臺上工作, 所以可以利用WINDOWS結構化異常,  我們可取消abort調用, 在這里我們使用代碼產生一個結構化異常(SEH), 結構化異常分為硬件異常和軟件異常, CPU可以檢查到內存非法訪問和除零錯誤等異常, 那么我們就將abort替換成除零語句, 比如 int i = 10/0;

     當程序執行到這里的時候,  CPU會捕捉這個異常, 并提示用戶, 我們可以在調用解碼函數的地方, 增加SEH捕捉代碼, 來捕捉這個錯誤, 那么程序就能忽略這個錯誤并繼續執行了. 后來的事實也證明了這個錯誤的忽略對程序并沒有什么明顯的影響.  怎么寫這個捕捉代碼呢, 操作系統支持的SEH捕捉代碼塊為 __try - __finally 塊和 __try - __except 塊, 而__try - __finnaly塊就可以實現我們的功能.  寫到這里, 可能有朋友要說了, 我們平時見的最多的是try-catch語句,  那么我要解釋一下了, try-catch 是C++異常的處理方式,  而__try-__finnaly是操作系統SEH異常處理方式.  在C++語言的try-catch并不能捕捉操作系統結構化異常(比如CPU異常, 內存訪問沖突, 除零錯誤等). C++異常只能捕獲軟件異常, 通常是調用throw而產生的異常, 比如MFC異常中常見的CException.  

    SEH異常和C++異常有本質的區別, SEH是操作系統提供的異常處理技術, 在任何支持該操作系統的編程語言中, 都可以使用, 而C++異常處理只能在編寫C++代碼時使用。然而, 應當知道WINDOWS的VC++編譯器是使用操作系統結構化異常來實現C++異常的.  也就是說, C++的try塊在VC++下編譯時, 會變成__try塊,  C++的catch塊會變成SEH的 __except塊: catch測試則變成SEH異常過濾器, catch中的代碼則變為__except中的代碼. 事實上, C++的throw塊, 在編譯的時候也會變成SEH的RaiseException函數調用, 由c++異常變為SEH異常.

    __finnally的好處在于, 有時更詳細的異常信息對我們沒有更大幫助, 我們只需要捕獲到異常并忽略它。上面提到C++異常在VC++里被轉換成SEH異常, 那么在VC下使用try-catch是否能捕獲硬件異常呢? 比如我們常見的 0x0000000C 不可讀或寫.  VC++編譯器已經提供了支持:

      try {;}  catch(...){;}   這樣的語句就能夠捕獲所有異常:包括CPU異常, 以及C++異常;  不過需要注意的是, 在VC6.0中, 是默認支持的. 但是在VC2005中,  是默認不捕獲CPU異常的. 區別在于一個C++編譯選項/Eha , 只有這個選項打開才能用上面的try-catch()捕捉SEH異常.

 

程序偶爾會出現:
Microsoft Visual C++ Runtime Library Runtime Error! 
Program: [APPPATH] Abnormal program termination
同時帶有紅色叉叉的對話框。

打開VC,附加對應的進程,在線程選項卡里查找類似MessageBox的字樣,找到的那個就是彈出對話框的線程,右鍵,轉到線程,查看調用堆棧,一般就能找到問題了

根據剛才的函數調用堆棧,可以發現,這個框框是由abort間接產生的,根據查看abort的源碼,可以發現,產生結果是有選項_WRITE_ABORT_MSG和_CALL_REPORTFAULT這兩個標志決定的,這兩個標志一個是產生如上所述的對話框,一個是產生那個常見的錯誤報告對話框。在msdn里,和abort相關的還有個函數_set_abort_behavior,可通過此函數,改變abort的行為。

還有個常見的錯誤框與此類似,是pure virtual function 就是純虛函數的調用,它的過程與abort相類似。

測試例子:

//SEH的異常處理過濾器
static LONG __stdcall MyUnhandledExceptionFilter(PEXCEPTION_POINTERS pExPtrs)
{
    AfxMessageBox("glllll");
    return EXCEPTION_EXECUTE_HANDLER;
}
void SignalHandler(int signal)
{
    AfxMessageBox("Application aborting...\n");
}
HANDLE handle;
DWORD WINAPI ThreadProc(LPVOID lp)
{
    // TODO: Add your control notification handler code here
    //int a = 0;
    //int b = 6 / a;
    char* pBuffer = (char*) (int)(rand());
    char szBuff[10];
    //StrCpy(pBuffer, "Hello, Crash!");
    //MessageBox(pBuffer);
    //strcpy(pBuffer, szBuff);
    //CloseHandle((HANDLE)handle);
    //abort();
    //throw bad_alloc("aaaaa");
    //terminate();
    RaiseException(0, 0, 0, NULL);
    AfxMessageBox("good");
    return 0;
}
char ppp;
static char pppp;
const char p5 = 'a';
const static char p6 = 'b';
void CCrashTestDlg::OnBnClickedButton1()
{
    _set_abort_behavior( 0, _WRITE_ABORT_MSG);
    _set_abort_behavior(0,  _CALL_REPORTFAULT);
    SetUnhandledExceptionFilter(MyUnhandledExceptionFilter);
    typedef void (*SignalHandlerPointer)(int);
    SignalHandlerPointer previousHandler;
    //previousHandler = signal(SIGABRT, SignalHandler);
    //MessageBox("ddd", NULL);
    //abort();
    DWORD dwID = 0;
    handle = CreateThread(NULL, 0, ThreadProc, handle, 0, &dwID);
    CloseHandle(handle);
    //WaitForSingleObject(handle, INFINITE);
  
}





posted on 2011-08-25 19:39 七星重劍 閱讀(4612) 評論(1)  編輯 收藏 引用 所屬分類: PL--c/c++IDE -- visual c++

FeedBack:
# re: 網游客戶端彈出個“Runtime Error”不產生dump文件的解決辦法[未登錄] 2011-08-26 01:02 楊粼波
很好,我也正在為這個問題犯愁。  回復  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              日韩视频精品在线观看| 国产精品美女久久久| 亚洲第一精品在线| 亚洲第一毛片| 欧美国产欧美亚洲国产日韩mv天天看完整 | 久久视频免费观看| 亚洲第一精品福利| 91久久精品国产91久久| 欧美三级免费| 久久久久国产精品人| 毛片一区二区三区| 一区二区三区蜜桃网| 亚洲欧美日韩成人高清在线一区| 国产一区二区黄色| 欧美激情久久久久| 国产精品xvideos88| 久久亚洲精品一区| 欧美精品一区二区三| 欧美亚洲一区二区三区| 久久日韩粉嫩一区二区三区 | 欧美视频精品在线| 玖玖国产精品视频| 欧美少妇一区二区| 欧美成人免费在线视频| 国产精品盗摄久久久| 蜜桃av一区二区| 国产精品xnxxcom| 免费在线观看成人av| 国产精品第2页| 欧美激情国产高清| 国产欧美日韩麻豆91| 亚洲人成网站777色婷婷| 国产亚洲精品成人av久久ww| 亚洲人成网站在线观看播放| 狠狠操狠狠色综合网| 亚洲网站视频| 99精品免费| 蜜桃久久av| 麻豆精品一区二区综合av| 欧美性天天影院| 亚洲人成欧美中文字幕| 在线播放不卡| 欧美一区二区三区另类| 亚洲一区二区三区高清不卡| 久久综合色播五月| 久久夜色精品国产| 国产一级揄自揄精品视频| 日韩亚洲一区二区| 艳女tv在线观看国产一区| 久久亚洲私人国产精品va| 久久久久91| 国产亚洲成av人片在线观看桃| 日韩一区二区久久| 这里只有精品视频在线| 欧美国产先锋| 欧美激情一区三区| 91久久夜色精品国产九色| 久热精品视频| 欧美电影在线观看完整版| 亚洲第一区中文99精品| 久久亚洲风情| 亚洲电影av| 一本久久综合| 欧美特黄一级| 亚洲一级免费视频| 小辣椒精品导航| 国产色产综合色产在线视频 | 欧美二区在线观看| 亚洲剧情一区二区| 99视频国产精品免费观看| 一区二区高清视频| 欧美午夜剧场| 亚洲专区欧美专区| 久久黄金**| 伊人夜夜躁av伊人久久| 美女尤物久久精品| 91久久国产综合久久蜜月精品| 一区二区三区欧美视频| 欧美视频亚洲视频| 欧美一区二区在线观看| 久久综合电影| 日韩视频在线一区二区三区| 欧美午夜不卡影院在线观看完整版免费| 99精品视频免费观看| 香蕉久久一区二区不卡无毒影院| 国产亚洲精品bt天堂精选| 另类成人小视频在线| 最新国产乱人伦偷精品免费网站| 亚洲图中文字幕| 国内精品国产成人| 欧美国产成人精品| 亚洲综合国产| 亚洲国产99精品国自产| 亚洲一区二区3| 国产一区二区三区免费观看| 蜜臀久久久99精品久久久久久| 亚洲精品自在久久| 久久九九精品| 一区二区三区久久网| 狠狠狠色丁香婷婷综合久久五月 | 亚洲欧美国产精品桃花| 亚洲成人中文| 久久精品女人的天堂av| 日韩午夜在线观看视频| 国产亚洲视频在线| 欧美日韩一区免费| 久久一二三区| 亚洲特级片在线| 亚洲高清在线播放| 久久久久一区二区三区四区| 一区二区三区精品| 亚洲激情视频网站| 国产在线播精品第三| 欧美色123| 欧美精品乱码久久久久久按摩| 欧美一区二区三区在线观看视频| 亚洲国产一区二区三区在线播| 久久精品国产综合精品| 亚洲视频网在线直播| 亚洲日本aⅴ片在线观看香蕉| 国产主播一区二区三区| 国产精品女同互慰在线看| 欧美国产视频一区二区| 久久综合国产精品| 久久久www成人免费精品| 亚洲欧美日韩国产一区二区| 99国产成+人+综合+亚洲欧美| 亚洲风情亚aⅴ在线发布| 美女亚洲精品| 蜜臀a∨国产成人精品| 久久精品国产77777蜜臀 | 亚洲丰满在线| 黄色亚洲精品| 国产有码在线一区二区视频| 国产精品午夜视频| 国产精品日韩欧美一区二区| 欧美午夜精品久久久久免费视 | 免费在线国产精品| 欧美暴力喷水在线| 欧美国产精品日韩| 欧美国产日韩一区二区在线观看| 亚洲狼人精品一区二区三区| 欧美黄色免费网站| 亚洲国内高清视频| 亚洲精品国产精品久久清纯直播| 亚洲黄网站在线观看| 91久久久一线二线三线品牌| 亚洲精品国产精品乱码不99| 亚洲免费观看高清在线观看 | 国产欧美午夜| 国产有码一区二区| 亚洲第一精品在线| 亚洲精品乱码久久久久久日本蜜臀 | 久久精品官网| 久久久在线视频| 欧美+日本+国产+在线a∨观看| 欧美波霸影院| 国产精品第一页第二页第三页| 国产精品丝袜白浆摸在线| 国产亚洲一区在线| 亚洲黄色尤物视频| 中文久久乱码一区二区| 欧美一级视频| 欧美成人激情视频免费观看| 亚洲国产精品成人久久综合一区| 日韩午夜免费| 欧美一区二区观看视频| 久久综合免费视频影院| 欧美日韩在线免费观看| 国产欧美日韩综合一区在线播放| 狠狠操狠狠色综合网| 亚洲最新在线| 久久免费黄色| 99视频热这里只有精品免费| 欧美一区影院| 欧美精品www| 国内外成人免费激情在线视频网站 | 亚洲国产成人午夜在线一区 | 亚洲国产视频一区二区| 亚洲免费在线视频一区 二区| 久久久蜜桃一区二区人| 亚洲精选在线观看| 久久国产婷婷国产香蕉| 欧美日韩不卡| 亚洲成人资源| 久久国产精品99国产| 亚洲人成人99网站| 久久久www成人免费毛片麻豆| 欧美视频二区| 亚洲欧洲在线免费| 久久久福利视频| 一本色道久久综合亚洲二区三区 | 久久久久久久精| 国产精品嫩草99av在线| 亚洲精品欧美日韩| 久久综合狠狠综合久久综合88| 亚洲图片欧洲图片av| 欧美日韩不卡| 亚洲精品国产精品国产自| 久久综合中文|