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

c++初學(xué)者

專注技術(shù)開發(fā)

[轉(zhuǎn)]如何手工抓取dump文件

在生產(chǎn)環(huán)境下進(jìn)行故障診斷時(shí),為了不終止正在運(yùn)行的服務(wù)或應(yīng)用程序,有兩種方式可以對(duì)正在運(yùn)行的服務(wù)或應(yīng)用程序的進(jìn)程進(jìn)行分析和調(diào)試。

首先一種比較直觀簡潔的方式就是用WinDbg等調(diào)試器直接attach到需要調(diào)試的進(jìn)程,調(diào)試完畢之后再detach即可。但是這種方式有個(gè)缺點(diǎn)就是執(zhí)行debugger命令時(shí)必須先break這個(gè)進(jìn)程,執(zhí)行完debug命令之后又得趕緊F5讓他繼續(xù)運(yùn)行,因?yàn)楸荒鉨reak住的時(shí)候意味著整個(gè)進(jìn)程也已經(jīng)被你掛起。另外也經(jīng)常會(huì)由于First Chance Excetpion而自動(dòng)break,你得時(shí)刻留意避免長時(shí)間break整個(gè)進(jìn)程。所以這樣的調(diào)試方式對(duì)時(shí)間是個(gè)很大的考驗(yàn),往往沒有充裕的時(shí)間來做仔細(xì)分析。

另一種方式則是在出現(xiàn)問題的時(shí)候,比如CPU持續(xù)長時(shí)間100%,內(nèi)存突然暴漲等非正常情況下,通過對(duì)服務(wù)進(jìn)程snapshot抓取一個(gè)dump文件,完成dump之后先deatch,讓進(jìn)程繼續(xù)運(yùn)行。然后用windbg等工具來分析這個(gè)抓取到的dump文件。

那么如何在不終止進(jìn)程的情況下抓取dump文件呢?Debugging Tools for Windows里提供了一個(gè)非常好的工具,adplus.vbs。從名字可以看出,實(shí)際上是一個(gè)vb腳本,只是對(duì)cdb調(diào)試器作的一個(gè)包裝腳本。

其路徑與Debugging Tools for Windows的安裝路徑相同,使用的方法也很簡單,如下所示:

adplus.vbs -hang -p 1234 -o d:\dump

其中-hang指明使用hang模式,亦即在進(jìn)程運(yùn)行過程中附加上去snapshot抓取一個(gè)dump文件,完成之后detach。與之對(duì)應(yīng)的是-crash崩潰模式,用戶先啟動(dòng)adplus,然后由它啟動(dòng)要監(jiān)控的程序,在出現(xiàn)異常崩潰時(shí)自動(dòng)生成dump文件,或者通過Ctrl-C人為發(fā)出抓取指令。但是-crash模式在抓取完成之后,被監(jiān)控的進(jìn)程就必須終止。因此我們在這里只選用-hang模式。

-p是要調(diào)試的進(jìn)程ID,比如ASP.NET應(yīng)用線程池,在Win2003下就是w3wp.exe

-o 指定要output的dump文件路徑。

另外,與adplus類似的,有個(gè)UserDump工具,但是抓取用戶模式的進(jìn)程,而adplus則是內(nèi)核模式和用戶模式兩者皆可。

而總所周至的Dr. Waston,則會(huì)在進(jìn)程崩潰之后的自動(dòng)時(shí)候抓取dump文件,一樣可以用于windbg等調(diào)試器來事后分析程序崩潰時(shí)的狀態(tài)。

====================
0:000> !dumpheap -stat
No export dumpheap found
======解決方法:
.load clr20\sos.dll,你要先執(zhí)行的。sos.dll在默認(rèn)的c:\windows\microsoft.net\framework\v2.....下面,你復(fù)制到c:\program files\debugging tools for windows下面的clr20目錄下面(clr20是你手工創(chuàng)建的)
 =======================
    
  在.NET下開發(fā)時(shí),最基本的調(diào)試方法就是使用Visual Studio的單步調(diào)試。但是對(duì)于一些特殊情況,特別是涉及到CLR內(nèi)部的時(shí)候使用這種方式就達(dá)不到目的了。
  如果要查看運(yùn)行時(shí)內(nèi)存使用情況,IL代碼,CLR信息等可以使用以下兩種方式:
  1、使用VS2005 + sos.dll
  2、使用Windbg + sos.dll
  第二種方式功能更加強(qiáng)大,下面我就通過實(shí)際操作展示一下怎么使用這種方法得到運(yùn)行時(shí)ArrayList內(nèi)部的值。
  有人可能會(huì)說:我直接用Visual Studio的單步調(diào)試豈不是更快?當(dāng)然,這個(gè)只是一個(gè)演示,通過這個(gè)演示是為以后的高級(jí)調(diào)試打下基礎(chǔ)
  
  在操作之前,先熟悉一下基本知識(shí):
  A、使用VS2005 + sos.dll調(diào)試
  1、需要在項(xiàng)目->屬性->調(diào)試-〉啟用非托管代碼調(diào)試
  2、打開調(diào)試-〉窗口-〉即時(shí)
  3、在即時(shí)窗口中輸入 !load sos 加載調(diào)試模塊
  4、輸入其它調(diào)試語句
  
  B、使用Windbg + sos.dll
  1、去微軟的網(wǎng)站下載最新的Windbg
  2、打開Windbg在File-〉Symbol File Path ...窗口中輸入 srv*c:\symbols*http://msdl.microsoft.com/download/symbols
  3、運(yùn)行需要調(diào)試的程序,然后在Windbg中File-〉A(chǔ)ttach to Process中選擇剛才運(yùn)行的程序
  4、在出現(xiàn)的Command窗口中就可以輸入調(diào)試語句
  5、常用調(diào)試語句:
   lm //查看加載了哪些模塊
   .load C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\sos.dll //加載調(diào)試模塊
   ld TestClass //加載調(diào)試符號(hào)
   !name2ee TestClass.exe TestClass.Program.test //顯示test方法相關(guān)的地址
   !dumpmt -md 00976d48 //得到類的成員函數(shù)詳細(xì)信息
   !dumpil 00973028 // 顯示這個(gè)方法被編譯器編譯之后的IL代碼
   !dumpheap -stat //該命令顯示程序中所有對(duì)象的統(tǒng)計(jì)信息,顯示的大小是對(duì)象本身的大小,不包括對(duì)象里面值的大小
   !dumpheap -mt 790fcb30 //該命令顯示MethodTable 790fcb30的詳細(xì)信息
   !gcroot 012919b8 //來顯示一個(gè)實(shí)例的所屬關(guān)系
   !dumpobj(do) 012a3904 //顯示一個(gè)對(duì)象的具體內(nèi)容,看對(duì)象里面有什么,值是什么
   !ObjSize 012a1ba4 //對(duì)象實(shí)際在內(nèi)存中的大小
   !eeheap -gc //查看托管堆的情況(包括大小)
   !DumpArray //查看數(shù)組信息
   下面就來看看具體的調(diào)試步驟:
  1、我們的測試代碼
  
  
  namespace TestClass
  {
   class Program
   {
   [STAThread]
   static void Main(string[] args)
   {
   ArrayList list = new ArrayList();
   list.Add("aaaa");
   list.Add("bbbb");
   Console.ReadLine();
   }
   }
  }很簡單,就是一個(gè)ArrayList
  
  運(yùn)行這個(gè)程序(開始執(zhí)行,不調(diào)試),然后進(jìn)入Windbg,Attach到這個(gè)進(jìn)程
  
  2、查看所有堆棧信息
  0:004> !dumpheap -stat
   MT Count TotalSize Class Name
  7910062c 1 12 System.Security.Permissions.SecurityPermission
  7918e284 1 16 System.IO.TextReader+SyncTextReader
  79102d10 1 20 Microsoft.Win32.SafeHandles.SafeFileMappingHandle
  79102cb4 1 20 Microsoft.Win32.SafeHandles.SafeViewOfFileHandle
  79101d30 1 20 System.Text.InternalEncoderBestFitFallback
  79100a7c 1 20 Microsoft.Win32.SafeHandles.SafeFileHandle
  79105cd4 1 24 System.Collections.ArrayList
  ......
  7912ad90 11 9036 System.Object[]
  790fcb30 2083 131492 System.String
  Total 2202 objects
  除了我們的ArrayList外,還有很多其它的系統(tǒng)信息,先不用管它
  
  3、查看我們的ArrayList的信息
  0:004> !dumpheap -mt 79105cd4
   Address MT Size
  012a1b88 79105cd4 24
  total 1 objects
  Statistics:
   MT Count TotalSize Class Name
  79105cd4 1 24 System.Collections.ArrayList
  Total 1 objects
  
  4、查看對(duì)應(yīng)地址內(nèi)部實(shí)際的值
  0:004> !do 012a1b88
  Name: System.Collections.ArrayList
  MethodTable: 79105cd4
  EEClass: 79105c28
  Size: 24(0x18) bytes
   (C:\WINDOWS\assembly\GAC_32\mscorlib\2.0.0.0__b77a5c561934e089\mscorlib.dll)
  Fields:
   MT Field Offset Type VT Attr Value Name
  7912ad90 40008df 4 System.Object[] 0 instance 012a1bb0 _items
  791018e0 40008e0 c System.Int32 1 instance 2 _size
  791018e0 40008e1 10 System.Int32 1 instance 2 _version
  790fc35c 40008e2 8 System.Object 0 instance 00000000 _syncRoot
  7912ad90 40008e3 1c0 System.Object[] 0 shared static emptyArray
   >> Domain:Value 00149c58:012a1ba0 <<
  可以看到ArrayList的大小為2,具體的值保存在地址012a1bb0中,是一個(gè)System.Object[]類型的數(shù)組
  
  5、查看數(shù)組信息
  0:004> !DumpArray 012a1bb0
  Name: System.Object[]
  MethodTable: 7912ad90
  EEClass: 7912b304
  Size: 32(0x20) bytes
  Array: Rank 1, Number of elements 4, Type CLASS
  Element Methodtable: 790fc35c
  [0] 012a1b50
  [1] 012a1b6c
  [2] null
  [3] null
  
  6、查看數(shù)組內(nèi)對(duì)象的值
  0:004> !do 012a1b50
  Name: System.String
  MethodTable: 790fcb30
  EEClass: 790fca90
  Size: 26(0x1a) bytes
   (C:\WINDOWS\assembly\GAC_32\mscorlib\2.0.0.0__b77a5c561934e089\mscorlib.dll)
  String: aaaa
  Fields:
   MT Field Offset Type VT Attr Value Name
  791018e0 4000096 4 System.Int32 1 instance 5 m_arrayLength
  791018e0 4000097 8 System.Int32 1 instance 4 m_stringLength
  790fe534 4000098 c System.Char 1 instance 61 m_firstChar
  790fcb30 4000099 10 System.String 0 shared static Empty
   >> Domain:Value 00149c58:790d81bc <<
  7912b1d8 400009a 14 System.Char[] 0 shared static WhitespaceChars
   >> Domain:Value 00149c58:012a16f0 << 
====================

windbg使用小總結(jié)
【抓dump】
1、一般抓法
adplus -hang -p 3230 -quiet 抓3230 pid進(jìn)程,hang模式,相當(dāng)于把那個(gè)進(jìn)程暫停住,取內(nèi)存快照
adplus -crash -pn w3wp -quiet 抓w3wp進(jìn)程,crash模式,當(dāng)那個(gè)進(jìn)程崩潰結(jié)束的時(shí)候自動(dòng)抓取當(dāng)時(shí)的內(nèi)存
adplus -hang -iis -quiet 抓IIS相關(guān)進(jìn)程,包括其上host的web應(yīng)用,以及iis自身
2、抓window服務(wù)
http://support.microsoft.com/kb/824344/zh-cn
3、遠(yuǎn)程抓
http://blog.joycode.com/tingwang/archive/2006/08/11/79763.aspx
4、抓藍(lán)屏和死機(jī)的dump
電腦無故重啟或者藍(lán)屏?xí)贑:\WINDOWS\Minidump\下保存一個(gè)minidump,但是這個(gè)minidump可用的命令很少,一般只打!analyze –v看到是哪個(gè)進(jìn)程引起的,還有相關(guān)的驅(qū)動(dòng)模塊就基本定位問題了。
5、IIS回收的時(shí)候抓
http://blog.yesky.com/blog/omakey/archive/2006/12/17/1618015.html
6、計(jì)劃任務(wù)抓
比如一個(gè)進(jìn)程起來后不知道它什么時(shí)候會(huì)意外崩潰,可以在計(jì)劃任務(wù)里用crash里抓,當(dāng)那個(gè)進(jìn)程意外終止的時(shí)候,cdb可以直接附加上去,抓取當(dāng)時(shí)的dump,如果要抓一些會(huì)自動(dòng)重啟的進(jìn)程,而且要抓每次重啟前的dump,可以參考附錄里一節(jié)。

【常用命令】
1、先path C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727,把.net路徑設(shè)置為path環(huán)境變量,一遍在windbg里可以直接.load sos,而不必.load C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\sos.dll
2、ld demo,加載你程序的pdb文件,調(diào)試.net程序一般要把kernel32和mscorwks的符號(hào)加載上,關(guān)于這兩個(gè)東西大家可以查資料,尤其是后者有哪些函數(shù)可以多了解一些。
3、在windbg的file/symbol file path對(duì)話框里輸入以下文字,以便自動(dòng)加載和下載符號(hào)
C:\WINDOWS\Symbols;d:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\symbols;.sympath SRV*d:\localsymbols*http://msdl.microsoft.com/download/symbols
其中有windows、.net2.0和自動(dòng)從網(wǎng)上下載的調(diào)試符號(hào),注意根據(jù)自己的情況適當(dāng)修改目錄

【調(diào)試死鎖】
1、!syncblk,查看哪些線程拿到了鎖
2、~67e!clrstack 跳到某個(gè)拿到鎖的線程看它正在干什么操作,遲遲不肯釋放鎖
3、!runaway 查看這個(gè)占有鎖的線程運(yùn)行了多長時(shí)間。
4、~*e!clrstack查看所有線程的托管堆棧,看看哪些是正在等待鎖的,比如hang在System.Threading.Monitor.Enter(System.Object)
5、~136s選擇該線程,顯示如下
0:000> ~136s eax=00005763 ebx=08deeb5c ecx=03eff0d4 edx=5570ab69 esi=08deeb5c edi=7ffd6000 eip=7c95ed54 esp=08deeb10 ebp=08deebb8 iopl=0 nv up ei pl zr na pe nc cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000246 ntdll!KiFastSystemCallRet: 7c95ed54 c3 ret
找到ecx寄存器的值,復(fù)制后ctrl+f,向上查找,會(huì)找到!syncblk的地方,如下
0:000> !syncblk Index SyncBlock MonitorHeld Recursion Owning Thread Info SyncBlock Owner 1906 03ee4be4 5 1 03ee8f88 22c8 67 185e2ef0 System.Object 5390 052ca39c 3 1 05292b30 1dd4 49 1060d3ac System.Object 9372 0530702c 15 1 0012d3a8 1aa8 80 185e7704 System.Object 11428 03eff0d4 35 1 053b8fa8 169c 120 166acd98 System.Object 15278 0531c6b4 61 1 06bc1430 26d8 86 1a5bea88 System.Object
可以看到136線程等待的鎖被120號(hào)線程占著不放(格式有點(diǎn)亂,湊合看),
6、有時(shí)候通過ecx寄存器找鎖不是很確定,可以用~* kb來把所有線程堆棧打出來,然后根據(jù)!syncblk出來的同步快的值去搜索大概有多少個(gè)線程在等那個(gè)鎖。因?yàn)橥瑯邮堑却i,可等的狀態(tài)不一樣,有的在Q里,有的鎖已經(jīng)升級(jí),有的去嘗試去拿鎖了,所以不一定當(dāng)時(shí)ecx寄存器指向那塊內(nèi)存,具體如何找到某個(gè)正在等待鎖的線程等待的鎖的內(nèi)存地址,以及它正等待的這個(gè)鎖被哪個(gè)線程拿著,我還沒琢磨出規(guī)律來,但一般情況下,如果有其它同步對(duì)象的話,更難查。.net里用我上面說的幾步就能查出鎖的問題了。


【內(nèi)存泄漏】
1、!dumpheap -stat看看哪些對(duì)象個(gè)數(shù)最多,占內(nèi)存最大,
2、找到某個(gè)格式比較多的對(duì)象,可以看它的方法表,然后用!dumpheap -mt 66398fa4去隨機(jī)找?guī)讉€(gè)對(duì)象的地址
3、用!do 1e5a22bc命令去查看幾個(gè)對(duì)象的狀態(tài),屬性的值等,看看正常不正常
4、用!gcroot -nostacks 1e5a22bc去查看幾個(gè)對(duì)象的根正常不正常,如果有些對(duì)象的根不是自己預(yù)先設(shè)計(jì)的那樣,很可能被自己沒想到的對(duì)象強(qiáng)引用了,所以GC無法回收它,就泄漏了。
【CPU百分百】
主要用幾個(gè)計(jì)數(shù)器和!runaway命令,具體見以下鏈接
http://www.cnblogs.com/onlytianc ... 7/06/03/769307.html
【線程池耗盡】
!threadpool 能看到完成端口,線程池工作線程和timer回調(diào)各占線程池的情況。
【其它】
1、!eestack -short -ee查看所有重要(獲取鎖的,托管的,停止并允許回收的)線程的dumpstack,差不多相當(dāng)于~*e!dumpstack
2、.time 可以看到進(jìn)程跑了多少時(shí)間
3、!dso 查看當(dāng)前線程里有哪些對(duì)象,分析內(nèi)存泄漏問題也許會(huì)用到
【小結(jié)】
要想很好的用windbg排查.net問題,首先要了解一些clr宿主的基礎(chǔ)知識(shí),以及IL的一些基礎(chǔ),還有簡單的寄存器和匯編嘗試,再就是有個(gè)好的思路,最后就是經(jīng)驗(yàn)和對(duì)代碼邏輯的理解。


【附錄:寫了一個(gè)自動(dòng)抓dump的工具,可在程序異常退出的時(shí)候抓dump】
【使用方法】
1、先在cmd下運(yùn)行以下命令確保計(jì)劃任務(wù)開著
net start "task scheduler"
2、執(zhí)行以下命令安排自動(dòng)抓包
at 13:27 d:\myapp\autodump\processmon.exe
其中計(jì)劃啟動(dòng)的時(shí)間和自動(dòng)抓包的程序路徑要根據(jù)情況設(shè)置,計(jì)劃啟動(dòng)之前當(dāng)前用戶一定要注銷。
【相關(guān)配置】
<appSettings>
  <add key="adplusPath" value="D:\MyApp\Debugging\adplus.vbs"/><!--adplus的路徑-->
  <add key="ProcessName" value="w3wp"/><!--要抓dump的進(jìn)程的名字,可用部分名字,不用完整的-->
</appSettings>


【源碼】


using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Threading;

namespace ProcessMon
{
    class Program
    {
        static readonly List<int> _dumpPIDs = new List<int>();
        private static readonly string _processName = System.Configuration.ConfigurationManager.AppSettings["ProcessName"];
        private static readonly string _adplusPath = System.Configuration.ConfigurationManager.AppSettings["adplusPath"];
        static void Main(string[] args)
        {
            while(true)
            {
                Console.WriteLine("..");
                ThreadProc();
                Thread.Sleep(10000);
            }
        }

        private static void ThreadProc()
        {
            foreach(Process vProcess in Process.GetProcesses())
            {
                try
                {             
                    string  processName  =  vProcess.ProcessName.ToLower();
                    if (processName.IndexOf(_processName) >= 0)
                    {
                        Console.WriteLine("{0}-{1}", vProcess.ProcessName, vProcess.Id);

                        if (_dumpPIDs.Contains(vProcess.Id))
                            continue;
                        _dumpPIDs.Add(vProcess.Id);
     
                        DumpProcessDeg d = DumpProcess;
                        d.BeginInvoke(vProcess.Id, null, null);
                        DumpProcess(vProcess.Id);
                    }
                }
                catch(Exception ex)
                {
                    Console.WriteLine(ex);
                }
            }
        }

        private delegate void DumpProcessDeg(int pid);
        static  void  DumpProcess(int pid)
        {
            ProcessStartInfo  Info  =  new  System.Diagnostics.ProcessStartInfo();
            Info.FileName = _adplusPath;
            Info.Arguments = string.Format("-crash -p {0} -quiet",pid);
            Info.WorkingDirectory  =  "C:\\";
            Process  Proc  ;
            try
            {
                Proc  =  Process.Start(Info);
            }
            catch(System.ComponentModel.Win32Exception  e)
            {
                Console.WriteLine("系統(tǒng)找不到指定的程序文件。\r{0}",  e);
                return;
            }
            Proc.EnableRaisingEvents = true;
            Console.WriteLine("外部程序的開始執(zhí)行時(shí)間:{0}",  Proc.StartTime);
            Proc.WaitForExit(60000);
            if(Proc.HasExited  ==  false){
                Console.WriteLine("由主程序強(qiáng)行終止外部程序的運(yùn)行!");
                Proc.Kill();
            }
            else{
                Console.WriteLine("由外部程序正常退出!");
            }
            Console.WriteLine("外部程序的結(jié)束運(yùn)行時(shí)間:{0}",  Proc.ExitTime);
            Console.WriteLine("外部程序在結(jié)束運(yùn)行時(shí)的返回值:{0}",  Proc.ExitCode);
        }
    }
}

===============
補(bǔ)充幾個(gè)命令:

1、!analyze -v :用于分析掛掉線程的詳細(xì)情形,錯(cuò)誤原因。

2、!locks :列出全部資源使用情況。

3、!locks -v 0x???????? :特定地址的死鎖分析。

4、!thread 0x????????:特定線程詳情。

5、.thread 0x????????:轉(zhuǎn)到某個(gè)線程堆棧。
 

posted on 2010-10-27 17:38 大海 閱讀(3240) 評(píng)論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            99国产精品99久久久久久| 久久国产婷婷国产香蕉| 欧美福利小视频| 一区二区在线视频| 欧美成va人片在线观看| 欧美不卡一卡二卡免费版| 亚洲天堂网在线观看| 国产精品成人在线| 欧美一区二区三区播放老司机| 亚洲欧美日韩国产一区二区| 国产日韩欧美二区| 欧美日韩国产成人精品| 久久久精品一品道一区| 伊人久久婷婷| 亚洲人www| 欧美日本中文| 久久精品国产综合| 免费久久99精品国产| 亚洲图片在线观看| 久久国产天堂福利天堂| 一本久道久久久| 香蕉乱码成人久久天堂爱免费| 一区在线观看视频| 亚洲久久一区| 韩国女主播一区二区三区| 亚洲国产精品成人综合色在线婷婷 | 在线电影国产精品| 亚洲精选大片| 韩国一区二区三区在线观看| 91久久精品国产| 国产午夜亚洲精品不卡| 91久久久一线二线三线品牌| 国产欧美日韩一区二区三区在线 | 一区二区日韩精品| 亚洲风情亚aⅴ在线发布| 一本色道综合亚洲| 亚洲激情啪啪| 欧美专区日韩专区| 午夜久久久久久| 欧美激情一区二区三区成人| 久久综合色8888| 欧美性大战久久久久久久蜜臀| 香蕉久久一区二区不卡无毒影院| 欧美在线一区二区| 国产综合香蕉五月婷在线| 一本色道久久综合亚洲精品不卡 | 午夜精品久久久久久久99水蜜桃 | 在线日韩欧美| 亚洲综合色网站| 亚洲免费大片| 久久久久久网址| 亚洲伊人观看| 欧美精品电影| 免费日韩视频| 国产亚洲欧美aaaa| 亚洲欧洲一区二区在线播放 | 亚洲欧美日韩一区二区在线 | 欧美日韩午夜在线| 在线综合亚洲| 亚洲午夜视频在线观看| 依依成人综合视频| 香蕉成人久久| 亚洲欧美国产va在线影院| 另类综合日韩欧美亚洲| 久久久人成影片一区二区三区 | 亚洲国产成人精品久久| 国产日韩精品一区二区三区| 欧美成人精品不卡视频在线观看 | 日韩一级片网址| 亚洲精品在线电影| 久久久噜噜噜久久| 欧美成人嫩草网站| 亚洲二区视频| 久久综合导航| 欧美高清视频一二三区| 激情综合色综合久久| 亚洲欧美日韩天堂| 欧美一区二区免费视频| 国产精品久久久久久久久免费樱桃| 亚洲国产精品久久久久秋霞影院 | 国产一区高清视频| 欧美综合国产| 午夜精品久久久| 国产亚洲一本大道中文在线| 午夜精品久久久久久久久久久久久| 性久久久久久久久久久久| 国产精品视频内| 午夜精品久久久久影视| 欧美在线免费| 国产一区二区欧美日韩| 久久国产精品久久久久久| 麻豆精品国产91久久久久久| 在线日韩欧美视频| 欧美aa在线视频| 亚洲麻豆国产自偷在线| 亚洲一区二区三区午夜| 国产欧美日韩精品专区| 久久精品国产亚洲精品| 欧美高清视频一区二区三区在线观看| 激情六月综合| 欧美日韩p片| 欧美伊久线香蕉线新在线| 欧美一区二区福利在线| 国产裸体写真av一区二区| 亚洲女人天堂av| 欧美国产日本| 亚洲素人一区二区| 国产日韩欧美电影在线观看| 美女国产精品| 亚洲天堂黄色| 欧美国产欧美亚洲国产日韩mv天天看完整| 亚洲九九九在线观看| 国产精品网站视频| 欧美成人a视频| 亚洲一区久久| 欧美成人亚洲成人| 亚洲欧美一区二区三区久久| 国内精品福利| 麻豆精品一区二区av白丝在线| 美日韩精品免费| 9人人澡人人爽人人精品| 国产精品第2页| 老司机午夜精品| 久久精品一本久久99精品| 伊人久久大香线蕉av超碰演员| 久久久99精品免费观看不卡| 99re66热这里只有精品4| 麻豆freexxxx性91精品| 欧美亚洲视频| 亚洲午夜精品久久久久久浪潮| 国外视频精品毛片| 国产精品外国| 欧美日韩一区二| 另类专区欧美制服同性| 久久av二区| 亚洲午夜精品在线| 亚洲免费不卡| 亚洲激情视频在线| 午夜精品久久久久久久久久久久| 国内成+人亚洲+欧美+综合在线| 欧美国产先锋| 羞羞视频在线观看欧美| 亚洲欧洲视频在线| 最近看过的日韩成人| 久久综合伊人77777| 久久精品99国产精品日本 | 欧美日韩亚洲网| 麻豆精品视频在线观看视频| 久久久久国产成人精品亚洲午夜| 亚洲视频综合| 在线视频欧美日韩精品| 亚洲人成啪啪网站| 亚洲国产成人在线| 欧美aⅴ99久久黑人专区| 久久综合狠狠综合久久综合88 | 国产日韩欧美精品在线| 国产精品户外野外| 国产精品大全| 国产伦精品一区二区三区高清| 欧美三级特黄| 国产精品久久久久7777婷婷| 卡一卡二国产精品| 久久爱另类一区二区小说| 亚洲综合第一| 久久精品人人做人人爽| 久久久久久久欧美精品| 久久资源在线| 欧美极品影院| 欧美日韩专区| 国产精品自在线| 国模精品一区二区三区| 亚洲国产精品日韩| 一本久道久久综合狠狠爱| 亚洲欧美日韩国产| 久久精品国产69国产精品亚洲 | 亚洲精选大片| 亚洲中字黄色| 久久尤物视频| 亚洲国产精品日韩| 正在播放亚洲一区| 性欧美长视频| 欧美成人国产| 国产精品久久久久久av下载红粉 | 欧美**人妖| 国产精品theporn88| 国产一区视频在线看| 日韩午夜免费| 久久高清免费观看| 久久香蕉国产线看观看av| 久久综合狠狠综合久久综合88| 欧美大学生性色视频| 99精品欧美| 久久久天天操| 亚洲性视频h| 久久精品日韩| 欧美特黄一区| 亚洲电影免费观看高清完整版| 宅男在线国产精品| 久久综合久久88| 一区二区三区免费网站|