3atv精品不卡视频,97人人超碰国产精品最新,中文字幕av一区二区三区人妻少妇,久久久精品波多野结衣,日韩一区二区三区精品

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Xcode高级调试技巧(1)

發(fā)布時(shí)間:2023/12/20 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Xcode高级调试技巧(1) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在蘋果的官方文檔中列出了我們?cè)谡{(diào)試中能用到的一些命令,我們?cè)谶@重點(diǎn)講一些常用的命令

調(diào)試本地文件方法(Mac OS X):(lldb) target create?"/Users/piaoyun/Desktop/xx.app/Contents/MacOS/xxxx"

遠(yuǎn)程調(diào)試方法:

設(shè)備端運(yùn)行:

附加進(jìn)程:

./debugserver *:1234 -a "YourAPPName"

直接啟動(dòng)進(jìn)程:

debugserver -x backboard *:1234 /path/to/app/executable

例:

debugserver -x backboard *:1234?/Applications/MobileNotes.app/MobileNotes

此命令會(huì)啟動(dòng)記事本,并斷在dyld的第一條指令上


在Mac終端運(yùn)行l(wèi)ldb命令后,輸入以下2條命令:
platform select remote-ios
process connect connect://你的設(shè)備IP地址:1234


用USB連接方法:

wget?http://cgit.sukimashita.com/usbmuxd.git/snapshot/usbmuxd-1.0.8.tar.bz2
tar xjfv usbmuxd-1.0.8.tar.bz2
cd usbmuxd-1.0.8/python-client/
python tcprelay.py -t 1234:1234

在Mac終端運(yùn)行l(wèi)ldb命令后,輸入以下2條命令:

platform select remote-ios

process connect connect://localhost:1234

?-(void)loginWithUserName:(NSString *)username password:(NSString *)password

{

? ? NSLog(@"login.... username:%@ ? password:%@", username, password); ?// 假設(shè)我們?cè)诖讼聰帱c(diǎn)

}



一、基本操作

1.1.視圖層次

打印視圖層次?po [self.contentView recursiveDescription]

1.2.改變某個(gè)取值

int a = 1; //Console expr a=2 NSLog(@"實(shí)際值: %d", a);

1.3.call 改變view的背景色

call [self.view setBackgroundColor:[UIColor redColor]]

1.4.聲明變量

expr int $b=2 或者 e int $b=2 //輸出 po $b

print (type)表達(dá)式

例子:

print (int)$r6

print username

1.5.打印堆棧

ios中打印堆棧方法是?NSThread callStackSymbols,這里調(diào)試的時(shí)候有個(gè)簡(jiǎn)單的方法如下

bt 或者 bt all

1.6.更改方法返回值

thread return NO/YES

-(BOOL) returnYES {//thread return NO ,可以更改函數(shù)返回值return YES; }//方法返回結(jié)果為NO

1.7.多線程異常后查看歷史對(duì)象的malloc分配歷史

先打開Enable Zombie Objects?和?Malloc Stack

(lldb) command script import lldb.macosx.heap (lldb) malloc_info -S 0x7ff7206c3a70

1.8.寄存器查找對(duì)象

曾經(jīng)遇到過(guò)一個(gè)問(wèn)題,[self.tableview reloadData]直接奔潰。這時(shí)候tableview其實(shí)沒(méi)有問(wèn)題,我們要怎么去找問(wèn)題呢?


如上圖所示,最后我們通過(guò)malloc_info -S 0x00007fe99a629560來(lái)查看對(duì)象分配在堆里面的具體的地址,隨后在左側(cè)打開table的所有變量,輸入這個(gè)地址即能夠看到這個(gè)是什么成員。

1.9. ?c


繼續(xù)執(zhí)行


7.s?

源碼級(jí)別單步執(zhí)行,遇到子函數(shù)則進(jìn)入


8.si

單步執(zhí)行,遇到子函數(shù)則進(jìn)入


9.n?

源碼級(jí)別單步執(zhí)行,遇到子函數(shù)不進(jìn)入,直接步過(guò)


10.ni

單步執(zhí)行,遇到子函數(shù)不進(jìn)入,直接步過(guò)


11.finish/f

退出子函數(shù)


12.thread list

?

打印線程列表

?

13.image lookup -a 表達(dá)式、image list

例子:

image lookup -a $pc

返回如下:

? ? ? Address: debug[0x0000b236] (debug.__TEXT.__text + 1254)

? ? ? Summary: debug`main + 58 at main.m:16

?

?

打印加載模塊列表

image list [-f -o 通常帶這兩個(gè)參數(shù)使用]

返回如下:

[? 0] 40E417A4-F966-3DB4-B028-B0272DC016A7 0x000a0000 /Users/piao/Library/Developer/Xcode/DerivedData/debug-bdkhskdqykkoqmhjedilckzvpuls/Build/Products/Debug-iphoneos/debug.app/debug?

? ? ? /Users/piao/Library/Developer/Xcode/DerivedData/debug-bdkhskdqykkoqmhjedilckzvpuls/Build/Products/Debug-iphoneos/debug.app.dSYM/Contents/Resources/DWARF/debug

[? 1] 011601C0-F561-3306-846B-94A7C8C841DA 0x2d9e6000 /Users/piao/Library/Developer/Xcode/iOS DeviceSupport/7.1.2 (11D257)/Symbols/System/Library/Frameworks/CoreGraphics.framework/CoreGraphics


查找某個(gè)函數(shù):


對(duì)于有調(diào)試符號(hào)的這樣使用

image lookup -r -n <FUNC_REGEX>

對(duì)于無(wú)調(diào)試符號(hào)的這樣使用:

image lookup -r -s <FUNC_REGEX>


?

14.disassemble -a 地址

例子:

dis -a $pc

debug`main at main.m:14:

?? 0xa71fc:? push ? {r7, lr}

?? 0xa71fe:? mov? ? r7, sp

?? 0xa7200:? sub? ? sp, #0x24

?? 0xa7202:? movs ? r2, #0x0

?? 0xa7204:? movt ? r2, #0x0

?? 0xa7208:? str? ? r2, [sp, #0x20]

?? 0xa720a:? str? ? r0, [sp, #0x1c]

?? 0xa720c:? str? ? r1, [sp, #0x18]

?? 0xa720e:? blx? ? 0xa7fe0 ? ? ? ? ? ? ? ? ? ; symbol stub for:?

.

.

.

2015-04-29 添加

disassemble -A thumb ? ?

可選:

thumbv4t

thumbv5

thumbv5e

thumbv6

thumbv6m

thumbv7

thumbv7f

thumbv7s

thumbv7k

thumbv7m

thumbv7em


///

?

15.memory read [起始地址 結(jié)束地址]/寄存器?-outfile 輸出路徑

例子:

memory read $pc

0x00035ebe: 0e 98 07 99 09 68 08 9a 90 47 0c 99 03 90 08 46? .....h...G.....F

0x00035ece: 03 99 01 f0 80 e8 02 22 c0 f2 00 02 41 f2 52 10? ......."....A.R.


memory read 0x35f1c 0x35f46 -outfile /tmp/test.txt ?// 將內(nèi)存區(qū)域保存到文件


2015-04-29添加:

默認(rèn)情況下,memory read 只能讀取 1024字節(jié)數(shù)據(jù)

例如:

memory read 0x1000 0x3000 -outfile /tmp/test.txt?就會(huì)報(bào)錯(cuò)

error: Normally, 'memory read' will not read over 1024 bytes of data.

解決方法:加-force參數(shù)


memory read 0x1000 0x3000 -outfile /tmp/test.txt -force

或者:

memory read 0x1000 -outfile /tmp/test.txt -count 0x2000 -force

memory read $x0(寄存器) -outfile /tmp/test.txt -count 0x2000 -force


--binary // 二進(jìn)制輸出

例:

memory read 0x1000 0x3000 -outfile /tmp/test.bin?--binary?-force


寫內(nèi)存:

memory write?$rip 0xc3

memory?write?$rip+1 0x90


16.register read/格式、register?write 寄存器名稱 數(shù)值

例子:

register read/x

返回如下:

General Purpose Registers:

? ? ? ? r0 = 0x1599e028

? ? ? ? r1 = 0x38131621? libobjc.A.dylib`objc_msgSend + 1

? ? ? ? r2 = 0x000a85cc? "class"

? ? ? ? r3 = 0x000a85d4? (void *)0x000a8618: AppDelegate

? ? ? ? r4 = 0x00000000

? ? ? ? r5 = 0x000a71fd? debug`main + 1 at main.m:14

? ? ? ? r6 = 0x00000000

? ? ? ? r7 = 0x27d63c80

? ? ? ? r8 = 0x27d63c98

? ? ? ? r9 = 0x00000002

?? ? ? r10 = 0x00000000

?? ? ? r11 = 0x00000000

?? ? ? r12 = 0x3a3ff1c8? (void *)0x3875cc19: _Unwind_SjLj_Unregister + 1

? ? ? ? sp = 0x27d63c5c

? ? ? ? lr = 0x38136eaf? libobjc.A.dylib`objc_autoreleasePoolPush + 311

? ? ? ? pc = 0x000a7236? debug`main + 58 at main.m:16

? ? ? cpsr = 0x20000030


// 改寫r9寄存器例子:

register write r9 2

?


17.display?表達(dá)式?????undisplay?序號(hào)
例子:

display $R0

undisplay?1

?

18 內(nèi)存斷點(diǎn)?watchpoint set expression 地址?? ?/ ?watchpoint set variable?變量名稱 -- (源碼調(diào)試用到,略過(guò))

例子:

watchpoint set expression?0x1457fa70

命中后得到結(jié)果:

Watchpoint 3 hit:

old value: 3

new value: 4


18.2 內(nèi)存訪問(wèn)斷點(diǎn)?watchpoint set?expression?-w read -- 內(nèi)存地址

watchpoint set expression -w read -- 0x16b9dd91


18.2 內(nèi)存寫入斷點(diǎn)?watchpoint set?expression?-w write -- 內(nèi)存地址

watchpoint set expression -w read -- 0x16b9dd91


18.3 條件斷點(diǎn)?watchpoint modify -c 表達(dá)式

例子:

watchpoint modify -c '*(int *)0x1457fa70 == 20'

命中后得到結(jié)果:

Watchpoint 3 hit:

old value: 15

new value: 20


19.找按鈕事件?po [按鈕名稱/內(nèi)存地址 allTargets]?

例子:

(lldb) po [[self btnTest] allTargets]
{(
??? <ViewController: 0x166af1f0>
)}

(lldb) po [[self btnTest] actionsForTarget:(id)0x166af1f0 forControlEvent:0]
<__NSArrayM 0x165b8950>(
testAction:
)

Bash // 在機(jī)器上實(shí)戰(zhàn)一下: (lldb) po [[[UIApplication sharedApplication] keyWindow] recursiveDescription] <UIWindow:0x15e771c0; frame = (0 0; 320 568); gestureRecognizers = <NSArray: 0x15e96210>; layer = <UIWindowLayer: 0x15e988e0>>| <UIView: 0x15eb4180; frame = (0 0; 320 568); autoresize = W+H; layer = <CALayer: 0x15eb4300>>| | <UIButton: 0x15eb32d0; frame = (277 285; 46 30); opaque = NO;autoresize = RM+BM; layer = <CALayer: 0x15eb2e30>>| | | <UIButtonLabel: 0x15db5220; frame = (0 6; 46 18); text = 'Button'; opaque = NO; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x15db5410>>| | <_UILayoutGuide: 0x15eb4360; frame = (0 0; 0 20); hidden = YES; layer = <CALayer: 0x15eb4540>>| | <_UILayoutGuide: 0x15eb4af0; frame = (0 568; 0 0); hidden = YES; layer = <CALayer: 0x15eb4b70>>(lldb) po [(UIButton *)0x15eb32d0 allTargets] {(<ViewController: 0x15e93250> )}(lldb) po [(UIButton *)0x15eb32d0 allTargets] {(<ViewController: 0x15e93250> )}(lldb) po [(UIButton *)0x15eb32d0 actionsForTarget:(id)0x15e93250 forControlEvent:0] <__NSArrayM 0x15dbfc50>( testAction: ) // 調(diào)用-- (lldb) po [0x15e93250 testAction:nil] 0x00210c18


// 再來(lái)一發(fā),對(duì)按鈕屬性操作

Bash (lldb) po [[[UIApplication sharedApplication] keyWindow] recursiveDescription] <UIWindow: 0x15e771c0; frame = (0 0; 320 568); gestureRecognizers = <NSArray: 0x15e96210>; layer = <UIWindowLayer: 0x15e988e0>>| <UIView: 0x15eb4180; frame = (0 0; 320 568); autoresize = W+H; layer = <CALayer: 0x15eb4300>>| | <UIButton: 0x15eb32d0; frame = (277 285; 46 30); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x15eb2e30>>| | | <UIButtonLabel: 0x15db5220; frame = (0 6; 46 18); text = 'Button'; opaque = NO; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x15db5410>>| | <_UILayoutGuide: 0x15eb4360; frame = (0 0; 0 20); hidden = YES; layer = <CALayer: 0x15eb4540>>| | <_UILayoutGuide: 0x15eb4af0; frame = (0 568; 0 0); hidden = YES; layer = <CALayer: 0x15eb4b70>>(lldb) expression UIButton *$btn = (UIButton *)0x15eb32d0 (lldb) expression [$btn setHidden:YES]



帶參數(shù)運(yùn)行:

Bash (lldb) target create "/bin/ls" Current executable set to '/bin/ls' (x86_64). (lldb) set set target.run-args $(python \-c 'print "a"*200') (lldb) run Process 40752 launched: '/bin/ls' (x86_64) ls: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa: No such file or directory Process 40752 exited with status = 1 (0x00000001) (lldb)


std::string 讀取方式:從內(nèi)存+8的地方開始? 64bit自行變通

例:

Bash (lldb) x $r0+8 0x02db9248: 20 82 e3 14 71 00 00 00 61 00 00 00 c0 82 d3 14 .惝q...a...喇贏 0x02db9258: 71 00 00 00 2b 00 00 00 20 f9 e6 14 61 00 00 00 q...+... .a... (lldb) x/s 0x14e38220 0x14e38220: "hello!piaoyun"

常見(jiàn)問(wèn)題-打印無(wú)效

上面我們簡(jiǎn)單的學(xué)習(xí)了如何使用LLDB命令。但有時(shí)我們?cè)谑褂眠@些LLDB命令的時(shí)候,依然可能會(huì)遇到一些問(wèn)題。不明類型或者類型不匹配

p (void)NSLog(@"%@",[self.view viewWithTag:1001]) //記住要加void p (CGRect)[self.view frame] //記住不能寫成 self.view.frame,lldb的bug

二、調(diào)試進(jìn)階

2.1.監(jiān)聽某個(gè)方法的調(diào)用

?
如果是自定義的view,比如QQView,想監(jiān)聽frame變化,直接[QQView setFrame:]即可 系統(tǒng)方法就要如圖所示,x86_64系統(tǒng)中,rdi表示第一個(gè)參數(shù),具體其他平臺(tái)可看inspecting-obj-c-parameters-in-gdb,里面有詳細(xì)的說(shuō)明

$rdi ? arg0 (self) $rsi ? arg1 (_cmd) $rdx ? arg2 $rcx ? arg3 $r8 ? arg4 $r9 ? arg5

2.2.image尋址,找到崩潰行

此時(shí)會(huì)調(diào)用如下代碼會(huì)崩潰

NSArray *arr=[[NSArray alloc] initWithObjects:@"1",@"2", nil]; NSLog(@"%@",arr[2]);2015-06-30 14:47:59.280 QQLLDB[6656:138560] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayI objectAtIndex:]: index 2 beyond bounds [0 .. 1]' *** First throw call stack: ( 0 CoreFoundation 0x000000010b2d8c65 __exceptionPreprocess + 165 1 libobjc.A.dylib 0x000000010af71bb7 objc_exception_throw + 45 2 CoreFoundation 0x000000010b1cf17e -[__NSArrayI objectAtIndex:] + 190 3 QQLLDB 0x000000010aa404f6 -[ViewController viewDidLoad] + 1030 4 UIKit 0x000000010ba75210 -[UIViewController loadViewIfRequired] + 738 5 UIKit 0x000000010ba7540e -[UIViewController view] + 27 6 UIKit 0x000000010b9902c9 -[UIWindow

此時(shí)我們要直接找到崩潰的行數(shù),很簡(jiǎn)單。先找到非系統(tǒng)bug的崩潰地址,如下圖所示,顯然是第三行QQLLDB,右邊對(duì)應(yīng)的地址是0x000000010aa404f6,然后輸入image lookup --address 0x000000010aa404f6,即可看到是60行出了bug

image lookup --address 0x000000010aa404f6 Address: QQLLDB[0x00000001000014f6] (QQLLDB.__TEXT.__text + 1030) Summary: QQLLDB`-[ViewController viewDidLoad] + 1030 at ViewController.m:60

2.3.crash日志分析,讀取符號(hào)表

1.要知道如何讀取符號(hào)表,我們得先偽造一份符號(hào)表的數(shù)據(jù)文件出來(lái),代碼如下

NSArray *arr=[[NSArray alloc] initWithObjects:@"1",@"2", nil]; NSLog(@"%@",arr[2]);

偽造步驟:
1.編譯到真機(jī)
2.然后進(jìn)入xcode將這個(gè)打開,找到QQLLDB.app.dSYM這個(gè)文件,偷偷拷貝一份到桌面
3.然后在product中clean一下工程
4.在真機(jī)上打開一個(gè)編譯進(jìn)去的程序,會(huì)出現(xiàn)圖

步驟如下圖所示:



?
?

之后在命令行操作

atos -o /Users/tomxiang/Desktop/符號(hào)表/QQLLDB.app.dSYM/Contents/Resources/DWARF/QQLLDB -l0x1000e8000 0x1000eebd4//此時(shí)得到結(jié)果,告訴我們是ViewController的viewDidLoad的第62行崩潰 -[ViewController viewDidLoad] (in QQLLDB) (ViewController.m:62)

2.4觀察實(shí)例變量的變化

假設(shè)你有一個(gè) UIView,不知道為什么它的 _layer 實(shí)例變量被重寫了 (糟糕)。因?yàn)橛锌赡懿⒉簧婕暗椒椒?#xff0c;我們不能使用符號(hào)斷點(diǎn)。相反的,我們想監(jiān)視什么時(shí)候這個(gè)地址被寫入。

首先,我們需要找到 _layer 這個(gè)變量在對(duì)象上的相對(duì)位置:

(lldb) p (ptrdiff_t)ivar_getOffset((struct Ivar*)class_getInstanceVariable([MyView class], "_layer")) (ptrdiff_t) $0 = 8

現(xiàn)在我們知道 ($myView + 8) 是被寫入的內(nèi)存地址:

(lldb) watchpoint set expression -- (int *)$myView + 8 Watchpoint created: Watchpoint 3: addr = 0x7fa554231340 size = 8 state = enabled type = w new value: 0x0000000000000000

這被以 wivar $myView _layer 加入到 Chisel 中。

三、Chisel-facebook開源插件

1.安裝方法:

git clone https://github.com/facebook/chisel.git ~/.chisel echo "command script import ~/.chisel/fblldb.py">>~/.lldbinit

安裝好后,打開xcode就可以運(yùn)行調(diào)試了

2.基本命令

2.1.預(yù)覽圖片
UIImage *image = [UIImage imageNamed:@"clear"]; UIImageView *imageView = [[UIImageView alloc] initWithImage:image]; [viewB addSubview:imageView];//此時(shí)執(zhí)行命令之后,圖片會(huì)被蘋果用自帶的預(yù)覽工具顯示出來(lái) visualize image
2.2.邊框/內(nèi)容著色

如下所示,打印得到imageView地址之后,然后用border命令將其邊框著色unborder取消著色

(lldb) p imageView (UIImageView *) $2 = 0x00007fb8c9b15910 (lldb) border 0x00007fb8c9b15910 -c green -w 2

同理,mask是給內(nèi)容著色?unmask

mask imageView -c green
2.3.關(guān)系鏈的繼承
(lldb) pclass image UIImage| NSObject
2.4.打印所有屬性
`pinternals`這個(gè)命令就是打印出來(lái)的一個(gè)控件(id)類型的內(nèi)部結(jié)構(gòu),詳細(xì)到令人發(fā)指!甚至是你自定義的控件中的類型,譬如這個(gè)styleView就是我自定義的,內(nèi)部有個(gè)iconView的屬性,其中的值它也會(huì)打印出來(lái)。 (lldb) pinternals image (UIImage) $8 = { NSObject = {isa = UIImage } _imageRef = 0x00007fc1f3330780 _scale = 2 _imageFlags = {named = 1imageOrientation = 0cached = 0hasPattern = 0isCIImage = 0renderingMode = 0suppressesAccessibilityHairlineThickening = 0hasDecompressionInfo = 0} }
2.5.bmessage

如果Chisel

ViewController沒(méi)有設(shè)置viewWillDisappear這個(gè)方法,此時(shí)我想用斷點(diǎn)斷下來(lái),可以這樣

(lldb) bmessage -[ChiselViewController viewWillDisappear:]Setting a breakpoint at -[UIViewController viewWillDisappear:] with condition (void*)object_getClass((id)$rdi) == 0x0000000100c47060 Breakpoint 2: where = UIKit`-[UIViewController viewWillDisappear:], address = 0x0000000101a0b566

Breakpoints

BreakPoint分類

breakpoint也是有分類的,我這里的文章內(nèi)大致按使用的方式分為了

  • Normal Breakpoint,
  • Exception Breakpoint,
  • OpenGL ES Error breakpoint,
  • Symbolic Breakpoint,
  • Test Failure Breakpoint,
  • WatchPoints。

?

可以按具體的情景使用不同類型的breakpoint,解決問(wèn)題為根本。

Normal Breakpoint

添加普通斷點(diǎn)就不多說(shuō)了,在源代碼的右側(cè)點(diǎn)擊一下即可。或者,使用快捷鍵:command + \ 來(lái)添加和刪除。這兩種方式添加的breakpoints在Xcode上面是可以通過(guò)UI看到的。

還有可以通過(guò)下面兩個(gè)LLDB命令直接在運(yùn)行時(shí)添加斷點(diǎn),但是這種方式需要注意的是一方面無(wú)法通過(guò)UI直接看到斷點(diǎn),另外一方面只存在于本次運(yùn)行,下一次啟動(dòng)模擬器重新運(yùn)行的時(shí)候,這些斷點(diǎn)就不生效了。

如上圖,通過(guò)“br li”命令打印所有的breakpoint,可以看到一共有3個(gè)breakpoint,第一個(gè)是通過(guò)Xcode的UI添加的,后面兩個(gè)分別是通過(guò)下面兩個(gè)命令添加的:

“breakpoint set -f XXX.m -l XX” 和 ?“b XXX.m:XX”。

breakpoint set -n write -c "(*(char**) ($esp + 8))[0]==0x17 && (*(char**) ($esp + 8))[1]==0x03 && (*(char**) ($esp + 8))[2]==0x03 && (*(char**) ($esp + 8))[3]==0x00&& (*(char**) ($esp + 8))[4]==0x28"

Exception Breakpoint

可以通過(guò)下圖中Xcode的UI添加Exception Breakpoint。有時(shí)候,比如數(shù)組越界或者設(shè)置一個(gè)空對(duì)象等問(wèn)題,都會(huì)拋出一個(gè)異常,但是這種類型的錯(cuò)誤非常難以定位,這個(gè)時(shí)候就可以使用Exception Breakpoint來(lái)進(jìn)行調(diào)試,在異常發(fā)生時(shí)可以捕捉到并停止程序的執(zhí)行。OC中的異常是一個(gè)常被忽略的地方,但實(shí)際上系統(tǒng)框架內(nèi)這個(gè)使用非常廣泛,大部分這種錯(cuò)誤信息,系統(tǒng)框架都會(huì)以異常的形式throw出來(lái),所以善用這種breakpoint的話,我們能大大減少查找錯(cuò)誤的時(shí)間。

例如,當(dāng)我們添加如下Exception Breakpoint之后(bt 命令后文中會(huì)講解,這個(gè)命令的作用是在斷點(diǎn)觸發(fā)時(shí),打印回調(diào)棧信息):

類似下面這樣的數(shù)組越界的問(wèn)題,我們可以很容易就定位到問(wèn)題所在,不用再毫無(wú)頭緒找來(lái)找去了:

當(dāng)斷點(diǎn)暫停執(zhí)行時(shí),我們可以通過(guò)Xcode的UI中查看調(diào)用棧信息:

或者查看bt命令打印的調(diào)用棧信息:

還有類似如下的錯(cuò)誤可以通過(guò)這種斷點(diǎn)很容易定位到:

,不過(guò)這種問(wèn)題,可以通過(guò)使用setValue:forKey:代替來(lái)避免。

OpenGL ES Error Breakpoint

同上圖中,在Xcode的breakpoint navigator的下部添加按鈕,選擇”Add OpenGL ES Error Breakpoint”即可。這個(gè)breakpoint主要是用來(lái)在OpenGL ES發(fā)生錯(cuò)誤時(shí)停止程序的運(yùn)行。

Symbolic Breakpoint

通過(guò)Xcode的UI添加symbolic breakpoint的方式同exception breakpoint,彈出框如下:

Symbolic breakpoints 在某個(gè)特定的函數(shù)或者方法開始執(zhí)行的時(shí)候,暫停程序的執(zhí)行,通過(guò)這種方式添加斷點(diǎn),我們就不需要知道在源文件中添加,也不需要知道斷點(diǎn)設(shè)置在文件的第幾行。

上圖中,最主要的設(shè)置是Symbol的內(nèi)容,可以有如下幾種:

  • 1. A method name,方法名稱,例如 pathsMatchingExtensions: 這樣的方法名稱,會(huì)對(duì)所有類的這個(gè)方法都起作用。
  • 2. A method of a particular class. 特定類的某個(gè)方法。例如 ,[SKLine drawHandlesInView],或者 people::Person::name()
  • 3. A function name。函數(shù)名稱。例如 ,_objc_msgForward 這樣C函數(shù)。

另外,也可以通過(guò)命令行的方式添加 Symbolic breakpoints。對(duì)C函數(shù)添加斷點(diǎn):

對(duì)OC的方法添加斷點(diǎn):

常用的這個(gè)類型的斷點(diǎn)有,objc_exception_throw可以用來(lái)代替 Exception Breakpoint,還有一個(gè)-[NSObject doesNotRecognizeSelector:] 也比較常用,用于檢測(cè)方法調(diào)用失敗。

下斷:

breakpoint set -a 函數(shù)地址 ? --常規(guī)斷點(diǎn)


breakpoint set --func-regex 函數(shù)關(guān)鍵字 ? --飄云提示:這個(gè)非常有用!我也是最近才研究發(fā)現(xiàn)的-雖然官方文檔一直有,但是沒(méi)重視

這樣下斷的優(yōu)勢(shì):


比如再某動(dòng)態(tài)庫(kù)中有 testA函數(shù),那么常規(guī)做法是先 image list -o -f 查看模塊基址 然后 image lookup -r -n 函數(shù)關(guān)鍵字找到偏移 ? 然后再 br s -a 基址+偏移!

用上面這個(gè)命令下端就簡(jiǎn)潔方便了!!!lldb會(huì)自動(dòng)幫你下斷所有匹配特征字的斷點(diǎn),可以模糊匹配哦


再來(lái)一個(gè)對(duì)動(dòng)態(tài)庫(kù)函數(shù)下斷的:

breakpoint set --shlib foo.dylib --name foo


這個(gè)也非常有用,可以進(jìn)行斷點(diǎn)過(guò)程中的一些自動(dòng)化處理:

breakpoint command add 斷點(diǎn)序號(hào)


這個(gè)也非常有用,對(duì)C函數(shù)下斷非常好 / 貌似是模糊匹配

breakpoint set -F isTest?? / 可以簡(jiǎn)寫為 b isTest



Test Failure Breakpoint

通過(guò)Xcode的UI添加方法同上。這個(gè)類型的break point 會(huì)在 test assertion 失敗的時(shí)候暫停程序的執(zhí)行。

Watchpoints

Watuchpoints是一個(gè)用來(lái)監(jiān)聽變量的值的變化或者內(nèi)存地址的變化的工具,發(fā)生變化時(shí)會(huì)在debugger中觸發(fā)一個(gè)暫停。對(duì)于那些不知道如何準(zhǔn)確跟蹤的狀態(tài)問(wèn)題,可以利用這個(gè)工具來(lái)解決。要設(shè)置watchpoint的話,在程序運(yùn)行到stack frame包含有你想觀察的變量時(shí),讓debugger暫停運(yùn)行,這個(gè)時(shí)候變量在當(dāng)前stack frame的scope內(nèi),這個(gè)時(shí)候才能對(duì)該變量設(shè)置watchpoint。

你可以在Xcode的GUI中設(shè)置watchpoint,在xcode的 Variables View中,把你想觀察的變量保留出來(lái),然后右鍵設(shè)置“Watch XXX”。例如下圖,觀察self的title變量,點(diǎn)擊 Watch “_button1ClickCount” 即可。

命令行

或者也可以通過(guò)命令行來(lái)設(shè)置watchpoint:watch set variable _button1ClickCount,詳細(xì)命令可以參考:http://lldb.llvm.org/lldb-gdb.html,有好幾種命令可以達(dá)到同樣的效果。

上面是對(duì)變量進(jìn)行觀察,實(shí)際上我們可以對(duì)任意內(nèi)存地址進(jìn)行觀察,命令如下:watchpoint set expression — 0x123456,參考:http://stackoverflow.com/questions/21063995/watch-points-on-memory-address

需要注意的是,watchpoint是分類型的,包括read,write或者read_write類型,這個(gè)非常容易理解,在讀,寫或者讀寫變量或內(nèi)存的時(shí)候,watchpoint是否被觸發(fā)。read,write或read_write跟著-w參數(shù)后面表示類型。另外,命令行中,watchpoint還有一些簡(jiǎn)寫,set簡(jiǎn)寫為s,watch簡(jiǎn)寫為wa,variable簡(jiǎn)寫為v。

下面的示例是來(lái)自?http://www.dreamingwish.com/article/lldb-usage-a.html?網(wǎng)站的幾個(gè)命令:

第一個(gè)命令是監(jiān)聽_abc4變量的內(nèi)存地址write的變化,第二個(gè)是監(jiān)聽_abc4變量read的變化,第三個(gè)是監(jiān)聽_abc3變量read_write的變化。

需要注意的是,通過(guò)Xcode的GUI添加的watchpoint為默認(rèn)類型,即write類型,如果想要添加讀寫都watch的watchpoint,則只能通過(guò)命令行工具進(jìn)行添加了。

使用watchpoint modify -c ‘(XXX==XX)’,則修改watchpoint之后在某個(gè)值的時(shí)候才會(huì)監(jiān)聽。

編輯選項(xiàng)

BreakPoint Condition

當(dāng)我們通過(guò)Xcode對(duì)breakpoint進(jìn)行編輯時(shí),可以發(fā)現(xiàn)normal breakpoint和symbolic breakpoint都有一個(gè)”Condition”輸入選項(xiàng),這個(gè)的作用很容易理解,只有在設(shè)置的condition表達(dá)式為YES的情況下這些斷點(diǎn)才會(huì)起作用。

例如,下圖中的breakpoint在判斷字符串相等的時(shí)候才會(huì)停止運(yùn)行:

可以注意到這里使用stringWithUTF8Stirng:方法,原因在于lldb的expression parser有一個(gè)bug,不兼容非ASCII字符,需要處理一下才行,否則會(huì)報(bào)錯(cuò)“An Objective-C constant string's string initializer is not an array”,參考:http://stackoverflow.com/questions/17192505/error-in-breakpoint-condition

更加簡(jiǎn)單一些的例子就不說(shuō)了,比如 i == 99之類的簡(jiǎn)單比較,只要表達(dá)式的結(jié)果為BOOL類型即可。

Breakpoint Actions

可以看到上面的每種breakpoint編輯選項(xiàng)中基本上都有“Add Action”選項(xiàng),當(dāng)breakpoint被觸發(fā)時(shí),都首先會(huì)執(zhí)行我們?cè)O(shè)置的這些action,然后我們才能得到控制權(quán),即Xcode上面才會(huì)顯示程序停止執(zhí)行的UI。這個(gè)Action通過(guò)例子比較好理解,我們通過(guò)上面那個(gè)setObject:forKey:的異常來(lái)說(shuō)明。代碼如下:

設(shè)置Breakpoint:

可以看到上圖中,我們一共設(shè)置了3個(gè)action。第一個(gè)action,用來(lái)打印exception的詳細(xì)信息,用法參考:http://stackoverflow.com/questions/17238673/xcode-exception-breakpoint-doesnt-print-details-of-the-exception-being-thrown。

第二個(gè)action,我們使用shell命令“say”,讓電腦發(fā)聲,把一段文字讀出來(lái)。

第三個(gè)action,我們使用“bt”命令來(lái)打印調(diào)用棧信息

設(shè)置完成之后,當(dāng)異常發(fā)生時(shí),我們會(huì)聽到電腦發(fā)聲念上圖中的英文,然后在log中可以看到如下信息,第一行是Exception的描述信息,下面是調(diào)用堆棧:

Continuing after Evaluation

看一下breakpoint的編輯彈窗,我們可以發(fā)現(xiàn)有一個(gè) “Automatically continue after evaluation actions” checkbox選項(xiàng)。當(dāng)我們勾選這個(gè)checkbox之后,debugger會(huì)執(zhí)行breakpoint中添加的所有的actions,然后繼續(xù)執(zhí)行程序。對(duì)于我們來(lái)說(shuō),除了觸發(fā)一大堆command并且執(zhí)行時(shí)間很長(zhǎng)的情況之外,程序會(huì)很快跳過(guò)這個(gè)breakpoint,所以我們可能根本不會(huì)注意到這個(gè)breakpoint的存在。所以,這個(gè)選項(xiàng)的功能相當(dāng)于在執(zhí)行的最后一個(gè)action之后,直接輸入continue命令繼續(xù)執(zhí)行。

有了這個(gè)很強(qiáng)大的功能,我們可以直接通過(guò)breakpoints來(lái)單獨(dú)對(duì)我們的程序進(jìn)行修改。在某行代碼時(shí)停止執(zhí)行,使用”expression”命令來(lái)直接修改程序的某個(gè)變量設(shè)置直接修改UI,然后繼續(xù)執(zhí)行。expression / call 配合這個(gè)選項(xiàng)的時(shí)候,會(huì)非常強(qiáng)大,可以很方便實(shí)現(xiàn)很多很強(qiáng)大的功能。

例如,我們實(shí)現(xiàn)一個(gè)如下的功能,把tableview的第一個(gè)cell的selectBackgroundView的背景色改為紅色:

action的內(nèi)容為“expression [[cell selectedBackgroundView] setBackgroundColor:[UIColor redColor]]”,這里的表達(dá)式先不用關(guān)心,我們后面LLDB章節(jié)會(huì)講到,修改之后,當(dāng)我們點(diǎn)擊cell的時(shí)候,cell的背景就會(huì)如下圖一樣變紅:

使用這種方式,我們?cè)诓恍枰薷囊恍写a的情況下,只需要通過(guò)修改breakpoint,就可以實(shí)現(xiàn)對(duì)UI的各種調(diào)試效果。

?

前言

你是否嘔心瀝血的嘗試去理解代碼和打印出來(lái)的變量?jī)?nèi)容?

NSLog(@"%@", whatIsInsideThisThing);

或是漏過(guò)函數(shù)調(diào)用來(lái)就簡(jiǎn)化工程行為?

NSNumber *n = @7; // theFunctionThatShouldReallyBeCalled();

或者短路的檢查邏輯?

if (1 || theBooleanAtStake) { ... }

亦或者是函數(shù)的偽實(shí)現(xiàn)?

int calculateTheTrickyValue {return 9;/*Figure this out later.... }

那是不是要不斷的重編譯,然后又開始新的輪回?

構(gòu)建軟件是復(fù)雜的而且BUG無(wú)處不藏。一個(gè)正常的修正過(guò)程是修改代碼,編譯,再次運(yùn)行,然后祈禱上帝。

似乎也不用墨守成規(guī)。你可以用調(diào)試器啊!假設(shè)你已經(jīng)知道怎么檢視變量值,這里有更多你需要掌握的東西。

這篇文章的目的是挑戰(zhàn)你的調(diào)試知識(shí),把你可能知道得基礎(chǔ)知識(shí)點(diǎn)解析的更透徹,然后向你展示了一系列有趣的栗子。開始吧!

LLDB

LLDB是個(gè)開源調(diào)試器,REPL特性,自帶C++以及Python插件。它與Xcode綁定并且駐在控制臺(tái)界面化于窗口的下端。

調(diào)試器允許你在一個(gè)特定執(zhí)行時(shí)刻暫停程序,檢視變量值,執(zhí)行自定義命令,以及按你認(rèn)為合適得步驟進(jìn)行程序步驟操控。(調(diào)試器主要功能戳這里)

你以前使用調(diào)試器的部分很可能僅限于Xcode的UI上打個(gè)斷點(diǎn)。但是這有些技巧,你可以做一些更酷比的事情。通過(guò)GDB與LLDB之間對(duì)比是針對(duì)所有支持的命令行的一個(gè)很好鳥瞰式的學(xué)習(xí)法,你還可能想要去安裝Chisel,一套開源的LLDB插件讓你的調(diào)試更加有趣。

與此同時(shí),讓我們開始如何使用調(diào)試器打印變量值的旅程吧。

基礎(chǔ)

這里有一個(gè)簡(jiǎn)單短小的程序來(lái)打印字符串。注意到斷點(diǎn)被添加到了第八行:

程序到此會(huì)停下來(lái)然后打開控制臺(tái),讓我們能與調(diào)試器進(jìn)行交互。此時(shí)我們應(yīng)該輸入什么呢?

幫助

最簡(jiǎn)單得命令是鍵入help,你可以獲取一個(gè)命令行列表。如果你忘記一個(gè)命令或者想知道該命令更細(xì)致的使用方法,那么你可以通過(guò)調(diào)用help <command>,比如help print或help thread。如果你甚至忘記了命令本身,你可以嘗試使用help help,但是如果你懂得足夠多,你可能已經(jīng)徹底不要這個(gè)命令了。

打印

打印值很容易,只要試著鍵入print命令:

LLDB實(shí)際上支持前綴命令判斷,所以你同樣可以使用prin,?pri或者p。但是你不能使用pr,因?yàn)長(zhǎng)LDB不能分辨出你是否是想執(zhí)行process命令。(吐槽幸好p沒(méi)有歧義,暴露屬性)

你同時(shí)也注意到了結(jié)果帶一個(gè)$0。實(shí)際上你可以用這個(gè)來(lái)引用變量!試著鍵入$0 + 7然后你會(huì)看到106。任何帶美元符號(hào)是LLDB的命名空間,其存在是為了為你提供幫助。

表達(dá)式

如果你想修改一個(gè)值?修改,你說(shuō)的算?好吧,修改!下面來(lái)一個(gè)簡(jiǎn)單得表達(dá)式命令行:

這并不修改調(diào)試器中的值。實(shí)際上修改的是程序中的值!如果你繼續(xù)程序,它很神奇地會(huì)打印出42紅氣球(上下文)。

從現(xiàn)在開始注意一點(diǎn),我們?yōu)榱朔奖阌胮與e代替print和expression。

什么是打印命令?

這里有一個(gè)有意思的表達(dá)式來(lái)考慮下:p count = 18。如果我們執(zhí)行命令然后打印count的內(nèi)容,我們會(huì)看到它確實(shí)相當(dāng)于執(zhí)行了表達(dá)式count = 18。

這兩者的區(qū)別是print命令不帶參數(shù),這點(diǎn)與expression不同。考慮e -h +17。在選擇是否要進(jìn)行輸入源為+17,帶-h標(biāo)志的操作,還是選擇是否要進(jìn)行計(jì)算區(qū)分17和h操作,在這兩個(gè)選擇上面是不明確的。調(diào)試器認(rèn)為連字符導(dǎo)致了混淆,你可能得不到想要的結(jié)果。

幸運(yùn)的是,這個(gè)解決方法十分簡(jiǎn)單。使用--來(lái)表示表示符號(hào)的結(jié)束以及輸入源的開始。此時(shí)如果你想要用-h標(biāo)志,你可以使用e -h -- +17,如果你想要進(jìn)行區(qū)分,則你可以執(zhí)行e -- -h +17。不帶標(biāo)志則是十分普通,它(e --)有一個(gè)別名print。

如果你鍵入help print并且往下拖拽,你會(huì)看到:

'print' is an abbreviation for 'expression --'.

打印對(duì)象

如果我們嘗試鍵入

p objects

那輸出會(huì)有點(diǎn)冗繁:

(NSString *) $7 = 0x0000000104da4040 @"red balloons"

當(dāng)嘗試打印一個(gè)更加復(fù)雜的數(shù)據(jù)結(jié)構(gòu)時(shí)候會(huì)情況會(huì)更糟:

(lldb) p @[ @"foo", @"bar" ](NSArray *) $8 = 0x00007fdb9b71b3e0 @"2 objects"

好吧,我們想看下對(duì)象的description方法。我們需要告訴expression命令作為對(duì)象來(lái)打印這個(gè)結(jié)果,使用-O標(biāo)志(這不是0):

(lldb) e -O -- $8 <__NSArrayI 0x7fdb9b71b3e0>( foo, bar )

很走運(yùn),e -O --也有別名,其別名為po,我們可以只要這樣使用:

(lldb) po $8 <__NSArrayI 0x7fdb9b71b3e0>( foo, bar ) (lldb) po @"lunar" lunar (lldb) p @"lunar" (NSString *) $13 = 0x00007fdb9d0003b0 @"lunar"

打印變量

print命令有許多種不同的格式可以由你來(lái)指定。它們以命令格式為print/<fmt>或者更簡(jiǎn)單p/<fmt>。接下來(lái)舉個(gè)栗子。

默認(rèn)的格式:

(lldb) p 16 16

16進(jìn)制格式:

(lldb) p/x 16 0x10

二進(jìn)制格式(t代表tow):

(lldb) p/t 16 0b00000000000000000000000000010000 (lldb) p/t (char)16 0b00010000

你還可以使用p/c打印字符,或者是p/s打印一個(gè)非終止類型的字符串char *。完整列表戳這里。

變量

至此你可以打印對(duì)象跟簡(jiǎn)單得類型,并可以在調(diào)試器中使用expression命令更改它們的值,讓我們使用一些變量來(lái)減少我們輸入工作。你可以聲明一個(gè)變量C來(lái)表示int a = 0,同樣你可以在LLDB中做同樣的事情。然后,變量必須以美元符號(hào)作為開頭:

(lldb) e int $a = 2 (lldb) p $a * 19 38 (lldb) e NSArray *$array = @[ @"Saturday", @"Sunday", @"Monday" ] (lldb) p [$array count] 2 (lldb) po [[$array objectAtIndex:0] uppercaseString] SATURDAY (lldb) p [[$array objectAtIndex:$a] characterAtIndex:0] error: no known method '-characterAtIndex:'; cast the message send to the method's return type error: 1 errors parsing expression

噢。LLDB不能識(shí)別出所牽扯的變量類型。不時(shí)會(huì)遇到,我們可以給一點(diǎn)提示:

(lldb) p (char)[[$array objectAtIndex:$a] characterAtIndex:0] 'M' (lldb) p/d (char)[[$array objectAtIndex:$a] characterAtIndex:0] 77

變量特性讓調(diào)試器更容易被使用,你這么認(rèn)為嗎?

流程控制

你的程序會(huì)在你打上斷點(diǎn)的位置停下來(lái)。

此時(shí)你看到在調(diào)試工具欄有四個(gè)按鈕,通過(guò)使用它們你可以控制程序的執(zhí)行流程:

這四個(gè)按鈕從左到右依次為:繼續(xù),單步,跳入,跳出。

首先,繼續(xù)按鈕將會(huì)讓你得程序繼續(xù)正常執(zhí)行(可能一直運(yùn)行或者遇到下一個(gè)斷點(diǎn))。在LLDB中,你可以使用process continue來(lái)繼續(xù)執(zhí)行,別名為c。

其次,單步執(zhí)行將會(huì)將單行代碼當(dāng)做黑盒一樣執(zhí)行。如果那行你調(diào)用了函數(shù),那將不會(huì)進(jìn)入這個(gè)函數(shù),而是直接執(zhí)行這個(gè)函數(shù)后繼續(xù)運(yùn)行。LLDB中相對(duì)應(yīng)的命令是thread step-over,next,或者?n。

如果你想進(jìn)入一個(gè)函數(shù)調(diào)用來(lái)檢查調(diào)試該函數(shù)的執(zhí)行,你可以使用第三個(gè)按鈕,跳入,LLDB同樣提供了thread step-in,step, 和s。注意到next與step在當(dāng)前行代碼不涉及函數(shù)調(diào)用的時(shí)候效果是一樣的。

大部分知道c,n,s。但是還有第四個(gè)按鈕,跳出。如果你不小心跳入了一個(gè)函數(shù)而你本意是想跳過(guò)它,一般反應(yīng)是不斷的按n知道函數(shù)返回。跳出幫你節(jié)省時(shí)間。它會(huì)執(zhí)行到return語(yǔ)句(知道執(zhí)行了出棧操作),然后會(huì)停下來(lái)。

舉個(gè)栗子

來(lái)看下如下的代碼片段:

代碼停在斷點(diǎn),然后我們執(zhí)行如下的命令行:

p i n s p i finish p i frame info

這里,frame info將會(huì)告訴你當(dāng)前行以及源文件是啥,可以通過(guò)鍵入help frame,help thread,以及help process獲取更多信息。那么輸出什么呢?先思考之前的描述想下答案!

(lldb) p i (int) $0 = 99 (lldb) n 2014-11-22 10:49:26.445 DebuggerDance[60182:4832768] 101 is odd! (lldb) s (lldb) p i (int) $2 = 110 (lldb) finish 2014-11-22 10:49:35.978 DebuggerDance[60182:4832768] 110 is even! (lldb) p i (int) $4 = 99 (lldb) frame info frame #0: 0x000000010a53bcd4 DebuggerDance`main + 68 at main.m:17

仍在17行的原因是finish命令會(huì)讓程序運(yùn)行直到isEven()函數(shù)返回,然后馬上停止。但是請(qǐng)注意,17行已經(jīng)執(zhí)行完了。

線程返回

還有一個(gè)特別幫的功能是你在調(diào)試的時(shí)候可以用thread return來(lái)控制程序流程。它使用可選參數(shù),將這個(gè)參數(shù)載入寄存器,單后馬上執(zhí)行返回命令,然后函數(shù)出棧。這意味著剩下函數(shù)沒(méi)有被執(zhí)行。這樣因?yàn)锳RC的引用計(jì)數(shù)/記錄出現(xiàn)問(wèn)題,或者遺漏一些清除操作。但在一個(gè)函數(shù)的開頭執(zhí)行這個(gè)命令是一個(gè)非常棒得函數(shù)打樁并且反悔了一個(gè)偽結(jié)果。

讓我們來(lái)對(duì)上述相同的代碼段跑如下的指令:

p i s thread return NO n p even0 frame info

在看答案之前鄉(xiāng)下結(jié)果,答案如下:

(lldb) p i (int) $0 = 99 (lldb) s (lldb) thread return NO (lldb) n (lldb) p even0 (BOOL) $2 = NO (lldb) frame info frame #0: 0x00000001009a5cc4 DebuggerDance`main + 52 at main.m:17

斷點(diǎn)

我們一直都使用斷點(diǎn)來(lái)讓程序停止,檢視當(dāng)前狀態(tài)從而捕獲BUG。但是如果我們轉(zhuǎn)變對(duì)斷點(diǎn)的理解,我們可以獲得更多可能。

A breakpoint allows you to instruct a program when to stop, and then allows the running of commands.

考慮在函數(shù)剛開始處打一個(gè)斷點(diǎn),使用thread return來(lái)重寫函數(shù)行為,然后繼續(xù)。現(xiàn)在想象下自動(dòng)實(shí)現(xiàn)這種處理。是不是聽起來(lái)很牛X,不是么?

斷點(diǎn)管理

Xcode提供了一套工具來(lái)創(chuàng)建和操作斷點(diǎn)。我們將會(huì)逐一過(guò)一遍并且進(jìn)行描述與之對(duì)應(yīng)的LLDB命令行。

在Xcode的左面板上,有一堆按鈕集合。有一個(gè)長(zhǎng)得很像斷點(diǎn)。點(diǎn)擊打開斷點(diǎn)導(dǎo)航欄,進(jìn)去之后你一眼看到你所操作的所有斷點(diǎn):

這里你可以看到所有的斷點(diǎn) - 對(duì)應(yīng)LLDB中的breakpoint list或者是br li。你可以點(diǎn)擊單個(gè)斷點(diǎn)進(jìn)行打開或者關(guān)閉 - 對(duì)應(yīng)LLDB中的breakpoint enable <breakpointID>和breakpoint disable <breakpointID>:

(lldb) br li Current breakpoints: 1: file = '/Users/arig/Desktop/DebuggerDance/DebuggerDance/main.m', line = 16, locations = 1, resolved = 1, hit count = 11.1: where = DebuggerDance`main + 27 at main.m:16, address = 0x000000010a3f6cab, resolved, hit count = 1(lldb) br dis 1 1 breakpoints disabled. (lldb) br li Current breakpoints: 1: file = '/Users/arig/Desktop/DebuggerDance/DebuggerDance/main.m', line = 16, locations = 1 Options: disabled 1.1: where = DebuggerDance`main + 27 at main.m:16, address = 0x000000010a3f6cab, unresolved, hit count = 1(lldb) br del 1 1 breakpoints deleted; 0 breakpoint locations disabled. (lldb) br li No breakpoints currently set.

創(chuàng)建斷點(diǎn)

(UI創(chuàng)建略了。。。是人都會(huì)吧。。)

在調(diào)試器中打斷點(diǎn),使用breakpoint set命令:

(lldb) breakpoint set -f main.m -l 16 Breakpoint 1: where = DebuggerDance`main + 27 at main.m:16, address = 0x

縮寫可以用br。b是另外一個(gè)完全不同的命令,是_regexp-break的別名,但是它足夠健壯來(lái)進(jìn)行創(chuàng)建上述命令一樣效果的斷點(diǎn):

(lldb) b main.m:17 Breakpoint 2: where = DebuggerDance`main + 52 at main.m:17, address = 0x

你也可以防止一個(gè)斷點(diǎn)在一個(gè)符號(hào)(C語(yǔ)言函數(shù)),而不用指定行數(shù):

(lldb) b isEven Breakpoint 3: where = DebuggerDance`isEven + 16 at main.m:4, address = 0x000000010a3f6d00 (lldb) br s -F isEven Breakpoint 4: where = DebuggerDance`isEven + 16 at main.m:4, address

現(xiàn)在這些斷點(diǎn)會(huì)停止正在將要執(zhí)行的函數(shù),同樣適用與OC方法:

(lldb) breakpoint set -F "-[NSArray objectAtIndex:]" Breakpoint 5: where = CoreFoundation`-[NSArray objectAtIndex:], address = 0x000000010ac7a950 (lldb) b -[NSArray objectAtIndex:] Breakpoint 6: where = CoreFoundation`-[NSArray objectAtIndex:], address = 0x000000010ac7a950 (lldb) breakpoint set -F "+[NSSet setWithObject:]" Breakpoint 7: where = CoreFoundation`+[NSSet setWithObject:], address = 0x000000010abd3820 (lldb) b +[NSSet setWithObject:] Breakpoint 8: where = CoreFoundation`+[NSSet setWithObject:], address = 0x000000010abd3820

如果你想通過(guò)UI來(lái)創(chuàng)建象征性斷點(diǎn),你可以點(diǎn)擊左下端斷點(diǎn)導(dǎo)航欄的+號(hào):

然后選擇第三個(gè)選項(xiàng):

此時(shí)出現(xiàn)彈出框讓你輸入比如-[NSArray objectAtIndex:]的符號(hào),然后程序在這個(gè)函數(shù)調(diào)用的時(shí)候便可以停止下來(lái),不管是你的代碼或者還是大蘋果的代碼!

如果我們看下其他選項(xiàng),我們可以發(fā)現(xiàn)一些有意思的選項(xiàng),同樣提供了各種條件觸發(fā)的鍛煉只要你點(diǎn)擊了Xcode的UI并且選擇了“Edit Breakpoint”選項(xiàng):

如上圖,斷點(diǎn)只有在i為99的時(shí)候才會(huì)停止程序。你可以同樣設(shè)置“ ignore”選項(xiàng)來(lái)告訴斷點(diǎn)在前n次調(diào)用的時(shí)候不用停止程序(條件為真)。

這里還有一個(gè)“Add Action”按鈕。。。

斷點(diǎn)動(dòng)作

可能上面斷點(diǎn)的栗子中,你想知道每次斷點(diǎn)時(shí)候i值是多少。我們可以使用動(dòng)作p i,然后當(dāng)斷點(diǎn)觸發(fā)的時(shí)候我們進(jìn)入調(diào)試器,它會(huì)預(yù)先執(zhí)行這個(gè)命令在將控制流程交給你之前:

你也可以加多重動(dòng)作,可以是調(diào)試器指令,shell指令或者更健壯的打印信息:

如上你可以看到打印出i值,還有強(qiáng)調(diào)語(yǔ)句,打印出自定義的表達(dá)式。

下面是上述功能用純LLDB命令代替Xcode的UI:

(lldb) breakpoint set -F isEven Breakpoint 1: where = DebuggerDance`isEven + 16 at main.m:4, address = 0x00000001083b5d00 (lldb) breakpoint modify -c 'i == 99' 1 (lldb) breakpoint command add 1 Enter your debugger command(s). Type 'DONE' to end. > p i > DONE (lldb) br li 1 1: name = 'isEven', locations = 1, resolved = 1, hit count = 0Breakpoint commands:p i Condition: i == 991.1: where = DebuggerDance`isEven + 16 at main.m:4, address = 0x00000001083b5d00, resolved, hit count = 0

自動(dòng)化,我們來(lái)了!

計(jì)算值之后繼續(xù)

如果視線停留在斷點(diǎn)彈出框的底端,你會(huì)額外看到一個(gè)選項(xiàng):“Automatically continue after evaluation actions(計(jì)算動(dòng)作后自動(dòng)執(zhí)行)。”它只是一個(gè)勾選框,但是它卻有強(qiáng)大的能力。如果你勾選上了,調(diào)試器將會(huì)蘋果你所有的命令然后繼續(xù)執(zhí)行程序。表面上看上跟斷點(diǎn)沒(méi)有打住一樣(除非你斷點(diǎn)太多了,拖慢了程序進(jìn)度)。

這個(gè)勾選框功能與最后一個(gè)動(dòng)作斷點(diǎn)繼續(xù)執(zhí)行效果一樣,但是有勾選框更加容易點(diǎn)。對(duì)應(yīng)調(diào)試器的指令如下:

(lldb) breakpoint set -F isEven Breakpoint 1: where = DebuggerDance`isEven + 16 at main.m:4, address = 0x00000001083b5d00 (lldb) breakpoint command add 1 Enter your debugger command(s). Type 'DONE' to end. > continue > DONE (lldb) br li 1 1: name = 'isEven', locations = 1, resolved = 1, hit count = 0Breakpoint commands:continue1.1: where = DebuggerDance`isEven + 16 at main.m:4, address = 0x00000001083b5d00, resolved, hit count = 0

計(jì)算后自動(dòng)繼續(xù)運(yùn)行讓你可以單獨(dú)通過(guò)使用斷點(diǎn)來(lái)修改你的程序!你可以停止在單行,運(yùn)行一個(gè)expression命令來(lái)改變變量,然后繼續(xù)。

舉個(gè)栗子

考慮下簡(jiǎn)陋?dú)埧岬摹按蛴∈秸{(diào)試”技術(shù)。不是用:

NSLog(@"%@", whatIsInsideThisThing);

而是用斷點(diǎn)處設(shè)置打印變量值替代吊打印日志打印語(yǔ)句然后繼續(xù)。

不是用:

int calculateTheTrickyValue {return 9;/*Figure this out later....*/ }

而是用斷點(diǎn)處調(diào)用thread return 9然后繼續(xù)執(zhí)行。

帶動(dòng)作的象征斷點(diǎn)確實(shí)真的很強(qiáng)大。你也可以添加這些斷點(diǎn)到你朋友的Xcode工程并且讓動(dòng)作將所有信息細(xì)致展示出來(lái)。接下來(lái)看看要耗時(shí)多久來(lái)進(jìn)行計(jì)算以及會(huì)發(fā)生什么吧。

調(diào)試器完整操作

在起舞之前還有一點(diǎn)需要我們注意。你真的可以在調(diào)試器中執(zhí)行任何的C/OC/C++/Swift命令。比較弱的是我們不能創(chuàng)建一個(gè)新的函數(shù)。。。這意味著沒(méi)有新的類,塊,函數(shù),帶虛方法的C++類等等。除了這個(gè),調(diào)試器什么都能滿足!

我們可以分配一些字節(jié):

(lldb) e char *$str = (char *)malloc(8) (lldb) e (void)strcpy($str, "munkeys") (lldb) e $str[1] = 'o' (char) $0 = 'o' (lldb) p $str (char *) $str = 0x00007fd04a900040 "monkeys"

或者我們可以檢查一些內(nèi)存(使用x命令)來(lái)看我們新數(shù)組的4個(gè)字節(jié):

(lldb) x/4c $str 0x7fd04a900040: monk

我們還可以后三個(gè)字節(jié):

(lldb) x/1w `$str + 3` 0x7fd04a900043: keys

當(dāng)你所要的活結(jié)束的時(shí)候別忘記了釋放內(nèi)存避免造成內(nèi)存泄露:

(lldb) e (void)free($str)

跳舞吧,騷年!

現(xiàn)在我們已經(jīng)清楚基礎(chǔ)步驟,是時(shí)候來(lái)整一些比較瘋狂的東西了。我過(guò)去曾寫過(guò)一篇博客(大家自己收藏。。。)發(fā)表在looking at the internals of NSArray。當(dāng)時(shí)用了大量的NSLog語(yǔ)句,后來(lái)全用調(diào)試器搞定了。它是一個(gè)很好的調(diào)試器使用練習(xí)。

暢通無(wú)阻(無(wú)斷點(diǎn)模式)

當(dāng)你的應(yīng)用在跑的時(shí)候,Xcode中的調(diào)試工具欄展示一個(gè)停止按鈕而非繼續(xù)狀態(tài)的按鈕:

選中這個(gè)按鈕的時(shí)候,應(yīng)用遇到斷點(diǎn)將會(huì)停止(就像輸入了process interrupt)。這時(shí)候?qū)?huì)讓你進(jìn)入調(diào)試器。

這里有一個(gè)有趣的地方。如果你運(yùn)行一個(gè)iOS應(yīng)用,你可以嘗試這個(gè)(全局變量可提供)

(lldb) po [[[UIApplication sharedApplication] keyWindow] recursiveDescription] <UIWindow: 0x7f82b1fa8140; frame = (0 0; 320 568); gestureRecognizers = <NSArray: 0x7f82b1fa92d0>; layer = <UIWindowLayer: 0x7f82b1fa8400>>| <UIView: 0x7f82b1d01fd0; frame = (0 0; 320 568); autoresize = W+H; layer = <CALayer: 0x7f82b1e2e0a0>>

可以看到整個(gè)層級(jí)!Chisel(上文提及)用pviews來(lái)實(shí)現(xiàn)。

更新UI

然后,通過(guò)上述的輸出,我們可以看到隱藏的視圖:

(lldb) e id $myView = (id)0x7f82b1d01fd0

然后在調(diào)試器中修改它的背景色:

(lldb) e (void)[$myView setBackgroundColor:[UIColor blueColor]]

在你下次繼續(xù)運(yùn)行這個(gè)程序的時(shí)候你才會(huì)看到變化。這因?yàn)檫@個(gè)變化需要傳遞給渲染服務(wù)然后視圖展示才會(huì)被更新。

渲染服務(wù)實(shí)際上是另一個(gè)進(jìn)程(稱作后臺(tái)),并且甚至我們調(diào)試進(jìn)程被停止了,這個(gè)后臺(tái)也不會(huì)被停止!

這意味著不通過(guò)繼續(xù),你可以執(zhí)行:

(lldb) e (void)[CATransaction flush]

在模擬器中或者設(shè)備中的UI會(huì)進(jìn)行刷新而你還在調(diào)試器中!Chisel提供了一個(gè)別名函數(shù)叫做caflush,并且它被用來(lái)實(shí)現(xiàn)其它捷徑像hide <view>,show <view>還有其他許多許多。所有的Chisel命令都有對(duì)應(yīng)的文檔,所以就在安裝它之后鍵入help來(lái)隨心所欲的獲取更多的信息吧。

壓入視圖控制器

想象一個(gè)簡(jiǎn)單的應(yīng)用有一個(gè)UINavigationController作為根視圖控制器。你可以在調(diào)試器中相當(dāng)簡(jiǎn)易的執(zhí)行如下操作:

(lldb) e id $nvc = [[[UIApplication sharedApplication] keyWindow] rootViewController]

然后壓入子視圖控制器:

(lldb) e id $vc = [UIViewController new] (lldb) e (void)[[$vc view] setBackgroundColor:[UIColor yellowColor]] (lldb) e (void)[$vc setTitle:@"Yay!"] (lldb) e (void)[$nvc pushViewContoller:$vc animated:YES]

最后執(zhí)行:

(lldb) caflush // e (void)[CATransaction flush]

你會(huì)看到馬上壓入了一個(gè)視圖控制器。

找到按鈕的目標(biāo)

想象下你調(diào)試器中有一個(gè)變量,$myButton,你想要去創(chuàng)建它,并從UI中抓取它,或者簡(jiǎn)單地只是你想在斷點(diǎn)停下來(lái)的時(shí)候?qū)⑺鳛閭€(gè)局部變量。你可能想知道當(dāng)你點(diǎn)擊它的時(shí)候是誰(shuí)接收了這個(gè)動(dòng)作。這里展示達(dá)到這點(diǎn)有多么的簡(jiǎn)單:

(lldb) po [$myButton allTargets] {(<MagicEventListener: 0x7fb58bd2e240> )} (lldb) po [$myButton actionsForTarget:(id)0x7fb58bd2e240 forControlEvent:0] <__NSArrayM 0x7fb58bd2aa40>( _handleTap: )

現(xiàn)在你可能想在事件發(fā)生的時(shí)候添加一個(gè)斷點(diǎn)。只要在LLDB或者Xcode設(shè)置象征性斷點(diǎn)在-[MyEventListener _handleTap:]。and you are all set to go!

觀察實(shí)例變量值變化

想象一個(gè)假設(shè)的場(chǎng)景你有一個(gè)UIView且它的_layer實(shí)例變量被重寫了。因?yàn)檫@里可能不涉及方法,我們不能使用象征性斷點(diǎn)。取而代之的是我們想觀察一個(gè)內(nèi)存地址什么時(shí)候被寫入了。

首先我們需要找到_layer對(duì)象在那里:

(lldb) p (ptrdiff_t)ivar_getOffset((struct Ivar *)class_getInstanceVariable([MyView class], "_layer")) (ptrdiff_t) $0 = 8

現(xiàn)在我們知道($myView + 8)這個(gè)內(nèi)存地址被寫入了:

(lldb) watchpoint set expression -- (int *)$myView + 8 Watchpoint created: Watchpoint 3: addr = 0x7fa554231340 size = 8 state = enabled type = wnew value: 0x0000000000000000

對(duì)應(yīng)Chisel里面的wivar $myView _layer。

在非重寫方法上的象征性斷點(diǎn)

想象你想知道什么時(shí)候-[MyViewController viewDidAppear:]被調(diào)用了。如果MyViewController實(shí)際上沒(méi)有實(shí)現(xiàn)這個(gè)方法,但是父類實(shí)現(xiàn)了呢?我們可以設(shè)置一個(gè)斷點(diǎn)來(lái)看看具體情況:

(lldb) b -[MyViewController viewDidAppear:] Breakpoint 1: no locations (pending). WARNING: Unable to resolve breakpoint to any actual locations.

因?yàn)長(zhǎng)LDB根據(jù)符號(hào)搜索,它找不到該方法,所以你的斷點(diǎn)將不會(huì)被觸發(fā)。你所需要做的是設(shè)置一個(gè)條件,[self isKindofClass:[MyViewController class]],然后見(jiàn)這個(gè)斷點(diǎn)設(shè)在UIViewController上。一般來(lái)說(shuō),設(shè)置一個(gè)這樣的條件是有效的,但是,這里無(wú)效是因?yàn)槲覀儧](méi)有父類該方法的實(shí)現(xiàn)。

viewDidAppear:是大蘋果寫的,所以沒(méi)有對(duì)應(yīng)的符號(hào);在方法內(nèi)部也沒(méi)有self。如果你想要使用在象征性斷點(diǎn)內(nèi)使用self,你需要知道它在那里(可能在寄存器也可能在棧上;在x86你可能在$esp+4找到它)。這是個(gè)通過(guò)的歷程,因?yàn)槟阒酪呀?jīng)知道有四種體系架構(gòu)了。吐槽略。。幸運(yùn)的是,Chisel已經(jīng)完成了這些封裝,你可以調(diào)用bmessage:

(lldb) bmessage -[MyViewController viewDidAppear:] Setting a breakpoint at -[UIViewController viewDidAppear:] with condition (void*)object_getClass((id)$rdi) == 0x000000010e2f4d28 Breakpoint 1: where = UIKit`-[UIViewController viewDidAppear:], address = 0x000000010e11533c

LLDB與Python

LLDB有完整的內(nèi)置Python支持。如果你在LLDB上輸入腳本,它會(huì)打開一個(gè)Python REPL。如果你在LLDB中鍵入script,它會(huì)打開一個(gè)Python REPL。你可以傳入一行Python語(yǔ)句到script命令來(lái)不進(jìn)入REPL的情況下進(jìn)行執(zhí)行腳本:

(lldb) script import os (lldb) script os.system("open http://www.objc.io/")

這允許你創(chuàng)建各種各樣的酷比命令。將這個(gè)丟入文件,~/myCommands.py:

def caflushCommand(debugger, command, result, internal_dict):debugger.HandleCommand("e (void)[CATransaction flush]")

然后在LLDB中運(yùn)行如下:

command script import ~/myCommands.py

或者,將這行代碼放置于/.lldbinit讓LLDB每次運(yùn)行的時(shí)候都執(zhí)行一次。Chisel不過(guò)就是一堆Python腳本用來(lái)組合字符串,然后告訴LLDB來(lái)執(zhí)行這些字符串。聽起來(lái)很簡(jiǎn)單吧!呃?


參考鏈接:

1.當(dāng)異常出現(xiàn)時(shí)
2.日志記錄CocoaLumberjack
3.在Xcode中調(diào)試程序
4.南峰子的技術(shù)博客
5.與調(diào)試器共舞 - LLDB 的華爾茲
6.官方調(diào)試技巧文檔
7.inspecting-obj-c-parameters-in-gdb

總結(jié)

以上是生活随笔為你收集整理的Xcode高级调试技巧(1)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

亚洲国产日韩a在线播放 | 色诱久久久久综合网ywww | 婷婷六月久久综合丁香 | 国产av无码专区亚洲a∨毛片 | 国产精品a成v人在线播放 | 欧美 日韩 人妻 高清 中文 | 精品人妻中文字幕有码在线 | 亚洲中文字幕在线无码一区二区 | 奇米影视7777久久精品人人爽 | 人妻人人添人妻人人爱 | 天堂亚洲2017在线观看 | 免费无码av一区二区 | 黑人大群体交免费视频 | 色 综合 欧美 亚洲 国产 | 成人无码精品1区2区3区免费看 | 亚洲理论电影在线观看 | 国产av一区二区三区最新精品 | 久久亚洲中文字幕无码 | 国产成人无码av在线影院 | 久久久久se色偷偷亚洲精品av | 夜精品a片一区二区三区无码白浆 | 国产精品99爱免费视频 | 国产一区二区三区日韩精品 | 国产欧美精品一区二区三区 | 青青久在线视频免费观看 | 中国大陆精品视频xxxx | 国产精品人人爽人人做我的可爱 | 久久久久成人精品免费播放动漫 | 国产成人人人97超碰超爽8 | 一二三四在线观看免费视频 | 2020久久超碰国产精品最新 | 老头边吃奶边弄进去呻吟 | 亚洲色www成人永久网址 | 欧美激情内射喷水高潮 | 好男人社区资源 | 婷婷色婷婷开心五月四房播播 | 中文字幕av伊人av无码av | 国产午夜亚洲精品不卡下载 | 亚洲日韩乱码中文无码蜜桃臀网站 | 熟妇女人妻丰满少妇中文字幕 | 国色天香社区在线视频 | 精品一区二区三区波多野结衣 | 性欧美熟妇videofreesex | 国产精品久久福利网站 | 女人被爽到呻吟gif动态图视看 | 午夜理论片yy44880影院 | 午夜不卡av免费 一本久久a久久精品vr综合 | 久久aⅴ免费观看 | 中文字幕+乱码+中文字幕一区 | 国产精品毛多多水多 | 精品欧美一区二区三区久久久 | 精品无码成人片一区二区98 | 一本色道婷婷久久欧美 | 沈阳熟女露脸对白视频 | 久久久久久亚洲精品a片成人 | 扒开双腿吃奶呻吟做受视频 | 丁香花在线影院观看在线播放 | 丰满人妻被黑人猛烈进入 | 精品国产一区二区三区av 性色 | 亚洲欧洲日本无在线码 | 又大又硬又爽免费视频 | 色欲人妻aaaaaaa无码 | 黑人粗大猛烈进出高潮视频 | 亚洲国产av精品一区二区蜜芽 | 国产美女极度色诱视频www | 国产国语老龄妇女a片 | 国内老熟妇对白xxxxhd | 亚洲综合色区中文字幕 | 日欧一片内射va在线影院 | 午夜福利一区二区三区在线观看 | 国产在线一区二区三区四区五区 | v一区无码内射国产 | 青青草原综合久久大伊人精品 | 久久天天躁夜夜躁狠狠 | 男女猛烈xx00免费视频试看 | 亚洲成av人综合在线观看 | 粉嫩少妇内射浓精videos | 色 综合 欧美 亚洲 国产 | 一本久久伊人热热精品中文字幕 | 成人精品天堂一区二区三区 | 日韩精品成人一区二区三区 | 日本xxxx色视频在线观看免费 | 国产小呦泬泬99精品 | 亚洲啪av永久无码精品放毛片 | 蜜臀av在线播放 久久综合激激的五月天 | 激情内射亚州一区二区三区爱妻 | 久久aⅴ免费观看 | 日韩亚洲欧美中文高清在线 | 中文精品无码中文字幕无码专区 | 无码人中文字幕 | 国产乱人伦偷精品视频 | 亚洲国产精品毛片av不卡在线 | 天堂а√在线中文在线 | 亚洲精品午夜无码电影网 | 狠狠色噜噜狠狠狠狠7777米奇 | 强开小婷嫩苞又嫩又紧视频 | 一本一道久久综合久久 | 1000部夫妻午夜免费 | 老熟妇乱子伦牲交视频 | 性色av无码免费一区二区三区 | 日产精品99久久久久久 | 国产又粗又硬又大爽黄老大爷视 | 久久99精品国产麻豆蜜芽 | 99久久亚洲精品无码毛片 | 暴力强奷在线播放无码 | 国产精品欧美成人 | 国产精品香蕉在线观看 | 成人性做爰aaa片免费看不忠 | 欧美亚洲国产一区二区三区 | 欧美性生交活xxxxxdddd | 国产精品久久久久久久影院 | 国产成人无码午夜视频在线观看 | 亚洲va中文字幕无码久久不卡 | 色综合久久久无码中文字幕 | 国产精品久久福利网站 | 人人妻人人澡人人爽欧美一区九九 | 亚洲国产精品毛片av不卡在线 | 欧美精品国产综合久久 | 亚洲一区二区三区国产精华液 | 熟女体下毛毛黑森林 | 精品日本一区二区三区在线观看 | 久久精品女人天堂av免费观看 | 高清不卡一区二区三区 | 久久久久成人片免费观看蜜芽 | 国产激情综合五月久久 | 久久久久99精品成人片 | 亚洲综合色区中文字幕 | 亚洲大尺度无码无码专区 | 免费人成网站视频在线观看 | 免费乱码人妻系列无码专区 | 性欧美疯狂xxxxbbbb | 亚洲成av人在线观看网址 | 极品尤物被啪到呻吟喷水 | 99久久久无码国产aaa精品 | 一区二区三区乱码在线 | 欧洲 | 波多野结衣av在线观看 | 国产精品亚洲а∨无码播放麻豆 | 精品无码国产一区二区三区av | 青青久在线视频免费观看 | 国产成人无码专区 | 国产国语老龄妇女a片 | 亚洲小说图区综合在线 | 国产女主播喷水视频在线观看 | 人人澡人人妻人人爽人人蜜桃 | 国产精品免费大片 | 精品国产成人一区二区三区 | 国产成人一区二区三区在线观看 | 少妇性l交大片欧洲热妇乱xxx | 午夜性刺激在线视频免费 | 久久zyz资源站无码中文动漫 | 色一情一乱一伦一视频免费看 | 中文字幕乱码人妻二区三区 | 99视频精品全部免费免费观看 | 国产xxx69麻豆国语对白 | 成 人影片 免费观看 | 思思久久99热只有频精品66 | 亚洲 a v无 码免 费 成 人 a v | 欧洲精品码一区二区三区免费看 | 国产午夜亚洲精品不卡 | 成人试看120秒体验区 | 中文字幕无码人妻少妇免费 | 男人的天堂2018无码 | 九九久久精品国产免费看小说 | 亚洲色偷偷偷综合网 | 国产亚洲精品久久久久久久 | 亚洲va中文字幕无码久久不卡 | 亚洲a无码综合a国产av中文 | 中文字幕亚洲情99在线 | 亚洲人成网站免费播放 | 老熟女重囗味hdxx69 | 精品 日韩 国产 欧美 视频 | 日韩精品一区二区av在线 | 亚洲区欧美区综合区自拍区 | 欧美人与牲动交xxxx | 亚洲中文字幕成人无码 | 波多野结衣高清一区二区三区 | 狂野欧美性猛xxxx乱大交 | 亚洲中文字幕va福利 | 国产av无码专区亚洲awww | 亚洲精品国产第一综合99久久 | 国产高清av在线播放 | 亚洲中文无码av永久不收费 | 色综合久久久久综合一本到桃花网 | 成人无码精品一区二区三区 | 亚洲一区二区三区国产精华液 | 亚洲精品欧美二区三区中文字幕 | 影音先锋中文字幕无码 | 国产亚洲精品久久久闺蜜 | 色一情一乱一伦一视频免费看 | 国产九九九九九九九a片 | 久久99精品久久久久久动态图 | 国产午夜视频在线观看 | 欧美熟妇另类久久久久久多毛 | 日日天日日夜日日摸 | 老太婆性杂交欧美肥老太 | 国产高潮视频在线观看 | 亚洲国产av精品一区二区蜜芽 | 国产热a欧美热a在线视频 | 欧美成人午夜精品久久久 | 国产精品亚洲五月天高清 | 中文字幕av伊人av无码av | 亚洲中文字幕乱码av波多ji | 成人免费视频在线观看 | 亚洲gv猛男gv无码男同 | 性做久久久久久久免费看 | 国产精品成人av在线观看 | 精品夜夜澡人妻无码av蜜桃 | 成人综合网亚洲伊人 | 色一情一乱一伦一区二区三欧美 | 国产超级va在线观看视频 | 亚洲精品综合五月久久小说 | 亚洲一区二区观看播放 | 日本精品高清一区二区 | 一本大道久久东京热无码av | 无码人妻少妇伦在线电影 | 国产特级毛片aaaaaaa高清 | 综合人妻久久一区二区精品 | 精品熟女少妇av免费观看 | 4hu四虎永久在线观看 | 狠狠cao日日穞夜夜穞av | 妺妺窝人体色www婷婷 | 国产做国产爱免费视频 | 国产成人无码区免费内射一片色欲 | 成人无码影片精品久久久 | 日日碰狠狠躁久久躁蜜桃 | 亚洲国产欧美在线成人 | 中文字幕人妻丝袜二区 | 日本高清一区免费中文视频 | 国产成人午夜福利在线播放 | 色综合久久中文娱乐网 | 精品国产av色一区二区深夜久久 | 国产精品亚洲一区二区三区喷水 | 任你躁国产自任一区二区三区 | 88国产精品欧美一区二区三区 | 国内精品一区二区三区不卡 | 亚洲熟熟妇xxxx | 亚洲精品国偷拍自产在线观看蜜桃 | 精品人妻中文字幕有码在线 | 久久精品国产99久久6动漫 | 久久久久成人片免费观看蜜芽 | a片在线免费观看 | 久久99精品国产麻豆 | 亚洲熟妇色xxxxx欧美老妇y | 3d动漫精品啪啪一区二区中 | 波多野结衣av一区二区全免费观看 | 久久久www成人免费毛片 | 奇米影视7777久久精品 | 日韩少妇白浆无码系列 | 狠狠噜狠狠狠狠丁香五月 | av人摸人人人澡人人超碰下载 | 午夜嘿嘿嘿影院 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 日韩视频 中文字幕 视频一区 | 一个人看的www免费视频在线观看 | 亚洲一区av无码专区在线观看 | 无码人妻丰满熟妇区毛片18 | 中文字幕精品av一区二区五区 | 国产真实夫妇视频 | 综合网日日天干夜夜久久 | 国产成人av免费观看 | www成人国产高清内射 | 欧美日韩一区二区免费视频 | 国产在热线精品视频 | 人妻尝试又大又粗久久 | 国产免费无码一区二区视频 | 一本一道久久综合久久 | 色婷婷香蕉在线一区二区 | 亚洲一区二区三区无码久久 | 亚洲爆乳无码专区 | 九月婷婷人人澡人人添人人爽 | 全黄性性激高免费视频 | 2020久久超碰国产精品最新 | 国产精品99爱免费视频 | 国产美女极度色诱视频www | 亚洲熟妇自偷自拍另类 | 久久熟妇人妻午夜寂寞影院 | 午夜福利试看120秒体验区 | 最新国产乱人伦偷精品免费网站 | 国产成人一区二区三区别 | 无套内谢老熟女 | 无码人妻黑人中文字幕 | 久久综合九色综合欧美狠狠 | 久久综合狠狠综合久久综合88 | 无码精品国产va在线观看dvd | 国产在线无码精品电影网 | 欧美真人作爱免费视频 | 成人欧美一区二区三区黑人免费 | 国产黄在线观看免费观看不卡 | 亚洲中文字幕在线观看 | 激情爆乳一区二区三区 | 国产99久久精品一区二区 | 国产乱子伦视频在线播放 | 男人和女人高潮免费网站 | 丰满护士巨好爽好大乳 | 麻豆成人精品国产免费 | 亚洲精品国产品国语在线观看 | 亚洲精品成人av在线 | 乌克兰少妇xxxx做受 | 又大又硬又黄的免费视频 | 欧美日本日韩 | 搡女人真爽免费视频大全 | 老熟妇仑乱视频一区二区 | 99精品视频在线观看免费 | 天堂在线观看www | 精品国产av色一区二区深夜久久 | 欧美猛少妇色xxxxx | 久久久久亚洲精品中文字幕 | 国产免费观看黄av片 | 久久综合九色综合欧美狠狠 | 国产午夜亚洲精品不卡下载 | 久久人妻内射无码一区三区 | 国产黄在线观看免费观看不卡 | 亚洲日韩一区二区 | 西西人体www44rt大胆高清 | 亚洲日韩av一区二区三区四区 | 国产suv精品一区二区五 | 丰满人妻翻云覆雨呻吟视频 | 成年美女黄网站色大免费全看 | 老太婆性杂交欧美肥老太 | 成 人 免费观看网站 | 成人欧美一区二区三区黑人 | 中文字幕日产无线码一区 | 久久精品女人的天堂av | 55夜色66夜色国产精品视频 | 女人色极品影院 | 国内精品人妻无码久久久影院蜜桃 | 国产日产欧产精品精品app | 国产精品无套呻吟在线 | 欧美成人免费全部网站 | 亚洲综合精品香蕉久久网 | 青草青草久热国产精品 | 午夜不卡av免费 一本久久a久久精品vr综合 | 97se亚洲精品一区 | 亚洲啪av永久无码精品放毛片 | 青春草在线视频免费观看 | 六月丁香婷婷色狠狠久久 | 午夜精品久久久久久久久 | 色情久久久av熟女人妻网站 | 97夜夜澡人人爽人人喊中国片 | 国产精品香蕉在线观看 | 亚洲综合无码久久精品综合 | 亚洲成色www久久网站 | 国产精品久久久久9999小说 | 色欲人妻aaaaaaa无码 | 亚洲热妇无码av在线播放 | 午夜不卡av免费 一本久久a久久精品vr综合 | 久久精品人人做人人综合试看 | 无码人妻精品一区二区三区不卡 | 国产精品无码一区二区三区不卡 | 又大又紧又粉嫩18p少妇 | 国产在线无码精品电影网 | 男女猛烈xx00免费视频试看 | 久久aⅴ免费观看 | 精品夜夜澡人妻无码av蜜桃 | 亚洲爆乳无码专区 | 天堂无码人妻精品一区二区三区 | 色一情一乱一伦一视频免费看 | 一区二区传媒有限公司 | 国产一区二区不卡老阿姨 | 青青青手机频在线观看 | 激情内射亚州一区二区三区爱妻 | 天天摸天天碰天天添 | 精品国产一区二区三区四区在线看 | 精品亚洲成av人在线观看 | 天天爽夜夜爽夜夜爽 | 日本xxxx色视频在线观看免费 | 国产精品二区一区二区aⅴ污介绍 | 成人片黄网站色大片免费观看 | 乱人伦人妻中文字幕无码 | 最近的中文字幕在线看视频 | 麻豆精品国产精华精华液好用吗 | 丰满少妇高潮惨叫视频 | 中文字幕乱码人妻无码久久 | 人妻互换免费中文字幕 | 好屌草这里只有精品 | 亚洲第一网站男人都懂 | 亚洲成熟女人毛毛耸耸多 | 无码播放一区二区三区 | 日韩亚洲欧美中文高清在线 | 四虎影视成人永久免费观看视频 | 一二三四社区在线中文视频 | www成人国产高清内射 | 国产色精品久久人妻 | 中文无码伦av中文字幕 | 成人欧美一区二区三区黑人 | 国产成人午夜福利在线播放 | 国产日产欧产精品精品app | 国产97在线 | 亚洲 | 无码人妻av免费一区二区三区 | 婷婷五月综合激情中文字幕 | 领导边摸边吃奶边做爽在线观看 | 呦交小u女精品视频 | 丰满少妇弄高潮了www | 中文字幕无码免费久久99 | √8天堂资源地址中文在线 | 无码成人精品区在线观看 | 中文字幕日产无线码一区 | www国产亚洲精品久久网站 | 又大又紧又粉嫩18p少妇 | 国产一区二区三区日韩精品 | 国产激情综合五月久久 | 又大又黄又粗又爽的免费视频 | 精品国产青草久久久久福利 | 亚洲人成网站免费播放 | 久久久久国色av免费观看性色 | 国产莉萝无码av在线播放 | 午夜时刻免费入口 | 中文字幕无码视频专区 | 国产人妻人伦精品1国产丝袜 | 2019午夜福利不卡片在线 | 免费无码av一区二区 | 日本xxxx色视频在线观看免费 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 国产精品爱久久久久久久 | 乱人伦人妻中文字幕无码 | 青青青手机频在线观看 | 亚洲人成无码网www | 嫩b人妻精品一区二区三区 | 国产黄在线观看免费观看不卡 | 日日碰狠狠躁久久躁蜜桃 | 激情亚洲一区国产精品 | 久久久久亚洲精品男人的天堂 | 国内揄拍国内精品少妇国语 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 精品欧美一区二区三区久久久 | 精品欧洲av无码一区二区三区 | 1000部啪啪未满十八勿入下载 | 又黄又爽又色的视频 | 国内精品人妻无码久久久影院蜜桃 | 波多野结衣av在线观看 | 国产精品亚洲一区二区三区喷水 | 国产精品久久久一区二区三区 | 偷窥日本少妇撒尿chinese | 国产成人精品优优av | 亚洲另类伦春色综合小说 | 男人的天堂2018无码 | 77777熟女视频在线观看 а天堂中文在线官网 | 精品国偷自产在线视频 | 国产亚洲人成a在线v网站 | 无码国内精品人妻少妇 | 国产片av国语在线观看 | 日本大乳高潮视频在线观看 | 国内少妇偷人精品视频免费 | 成人一在线视频日韩国产 | 国产亚洲人成在线播放 | 精品无码一区二区三区爱欲 | 亚洲色无码一区二区三区 | 成人欧美一区二区三区黑人免费 | 自拍偷自拍亚洲精品被多人伦好爽 | 成人女人看片免费视频放人 | 国产偷抇久久精品a片69 | 国产激情无码一区二区 | 国产精品福利视频导航 | 国产内射爽爽大片视频社区在线 | 久久无码人妻影院 | 亚洲成av人片天堂网无码】 | 色综合久久网 | 牲欲强的熟妇农村老妇女 | 帮老师解开蕾丝奶罩吸乳网站 | 日本护士xxxxhd少妇 | 亚欧洲精品在线视频免费观看 | 日韩人妻少妇一区二区三区 | 日韩精品无码一本二本三本色 | 波多野结衣av在线观看 | 日本精品久久久久中文字幕 | 伦伦影院午夜理论片 | 一本久道久久综合婷婷五月 | 亚洲一区二区三区无码久久 | 沈阳熟女露脸对白视频 | 亚洲第一无码av无码专区 | 欧美日韩综合一区二区三区 | 久久精品国产亚洲精品 | 日日碰狠狠丁香久燥 | 免费人成在线视频无码 | 欧美老人巨大xxxx做受 | 黑人大群体交免费视频 | 国产精品无码久久av | 亚洲日本va中文字幕 | 日韩人妻系列无码专区 | 日韩欧美成人免费观看 | 日日摸天天摸爽爽狠狠97 | 亚洲狠狠色丁香婷婷综合 | 国产精品怡红院永久免费 | 国产精品丝袜黑色高跟鞋 | 成人无码视频在线观看网站 | 亚洲成在人网站无码天堂 | 亚洲国产综合无码一区 | 日韩人妻无码一区二区三区久久99 | 性欧美牲交xxxxx视频 | 伊人久久大香线蕉午夜 | 老司机亚洲精品影院无码 | 久久久久免费精品国产 | 亚洲乱亚洲乱妇50p | 永久免费精品精品永久-夜色 | 成熟人妻av无码专区 | 伊人久久大香线蕉av一区二区 | 精品国产av色一区二区深夜久久 | 少妇愉情理伦片bd | 国产黑色丝袜在线播放 | 三上悠亚人妻中文字幕在线 | 男女性色大片免费网站 | 成人精品天堂一区二区三区 | 国产两女互慰高潮视频在线观看 | 乱中年女人伦av三区 | 色婷婷综合中文久久一本 | 久久人人爽人人爽人人片ⅴ | 免费无码一区二区三区蜜桃大 | 97夜夜澡人人双人人人喊 | 极品尤物被啪到呻吟喷水 | 水蜜桃av无码 | 狠狠色丁香久久婷婷综合五月 | 天下第一社区视频www日本 | 国产超级va在线观看视频 | 无码人妻少妇伦在线电影 | 真人与拘做受免费视频一 | 中文字幕无码av波多野吉衣 | 精品一二三区久久aaa片 | 国产精品99久久精品爆乳 | 国产成人综合色在线观看网站 | 一本久道高清无码视频 | 奇米影视7777久久精品人人爽 | 日本在线高清不卡免费播放 | 99久久99久久免费精品蜜桃 | 色一情一乱一伦一视频免费看 | 国产9 9在线 | 中文 | 国产农村乱对白刺激视频 | 一本大道久久东京热无码av | 国产精品人人爽人人做我的可爱 | 国产精品怡红院永久免费 | 少妇无码吹潮 | 亚洲日韩av一区二区三区中文 | 色婷婷综合中文久久一本 | 捆绑白丝粉色jk震动捧喷白浆 | 伊人久久大香线蕉亚洲 | 日本大乳高潮视频在线观看 | 国产日产欧产精品精品app | 国产成人无码av在线影院 | 未满小14洗澡无码视频网站 | 狠狠综合久久久久综合网 | а√天堂www在线天堂小说 | 成人片黄网站色大片免费观看 | 国产综合久久久久鬼色 | 丝袜 中出 制服 人妻 美腿 | 丰满人妻被黑人猛烈进入 | 无码av中文字幕免费放 | 久久久久av无码免费网 | 99久久人妻精品免费一区 | 日本精品少妇一区二区三区 | 国产在线精品一区二区高清不卡 | 日本免费一区二区三区最新 | 亚洲熟妇色xxxxx欧美老妇y | 国产 精品 自在自线 | 国产福利视频一区二区 | 99久久无码一区人妻 | 久久国产精品精品国产色婷婷 | 国产成人综合色在线观看网站 | 国产精品久久久午夜夜伦鲁鲁 | 人人爽人人澡人人高潮 | 一本无码人妻在中文字幕免费 | 黄网在线观看免费网站 | 亚洲 另类 在线 欧美 制服 | 丝袜美腿亚洲一区二区 | 国产亚洲人成a在线v网站 | 99久久人妻精品免费二区 | 麻豆av传媒蜜桃天美传媒 | 日韩av无码一区二区三区不卡 | 亚洲天堂2017无码中文 | 在线观看欧美一区二区三区 | 国产精品多人p群无码 | 丰满人妻翻云覆雨呻吟视频 | 无码国产色欲xxxxx视频 | 色婷婷香蕉在线一区二区 | 久久综合给合久久狠狠狠97色 | 99久久人妻精品免费二区 | 漂亮人妻洗澡被公强 日日躁 | 国产成人无码区免费内射一片色欲 | 亚洲欧洲中文日韩av乱码 | 一二三四在线观看免费视频 | 亚洲精品国产第一综合99久久 | 中文无码成人免费视频在线观看 | 亚洲 日韩 欧美 成人 在线观看 | 国产精品久久久 | 人妻夜夜爽天天爽三区 | 乱码av麻豆丝袜熟女系列 | 亚洲自偷自偷在线制服 | 天堂无码人妻精品一区二区三区 | 极品嫩模高潮叫床 | 天海翼激烈高潮到腰振不止 | 在线视频网站www色 | 红桃av一区二区三区在线无码av | 日日摸日日碰夜夜爽av | 一本久久a久久精品vr综合 | 久久精品女人天堂av免费观看 | 亚洲另类伦春色综合小说 | 99精品国产综合久久久久五月天 | 欧美 日韩 人妻 高清 中文 | 人人妻人人澡人人爽欧美一区九九 | 欧美日韩在线亚洲综合国产人 | 99国产精品白浆在线观看免费 | 成人无码精品一区二区三区 | 成 人影片 免费观看 | 牲交欧美兽交欧美 | 99久久人妻精品免费二区 | 少妇愉情理伦片bd | 国产在线精品一区二区三区直播 | 帮老师解开蕾丝奶罩吸乳网站 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | aⅴ亚洲 日韩 色 图网站 播放 | 大屁股大乳丰满人妻 | 午夜理论片yy44880影院 | 亚洲区小说区激情区图片区 | 夜先锋av资源网站 | 亚洲中文字幕久久无码 | 精品欧洲av无码一区二区三区 | 亚洲色欲色欲欲www在线 | 中文字幕无码人妻少妇免费 | 日韩视频 中文字幕 视频一区 | 成人亚洲精品久久久久 | 亚无码乱人伦一区二区 | 日日噜噜噜噜夜夜爽亚洲精品 | 欧美日本精品一区二区三区 | 三级4级全黄60分钟 | 7777奇米四色成人眼影 | 国产乱人偷精品人妻a片 | 国产激情一区二区三区 | 免费播放一区二区三区 | 久久97精品久久久久久久不卡 | 狠狠综合久久久久综合网 | 成人免费视频在线观看 | 色五月丁香五月综合五月 | 国产成人综合色在线观看网站 | 99精品久久毛片a片 | 女人被男人爽到呻吟的视频 | 亚洲精品一区三区三区在线观看 | 波多野42部无码喷潮在线 | 麻豆果冻传媒2021精品传媒一区下载 | 亚洲男女内射在线播放 | 波多野42部无码喷潮在线 | 97夜夜澡人人爽人人喊中国片 | 天堂无码人妻精品一区二区三区 | 宝宝好涨水快流出来免费视频 | 97人妻精品一区二区三区 | 色欲人妻aaaaaaa无码 | 99国产精品白浆在线观看免费 | 精品久久综合1区2区3区激情 | 人人爽人人澡人人高潮 | 蜜臀av无码人妻精品 | 国产午夜无码精品免费看 | 久久久久久久久888 | 丰满人妻翻云覆雨呻吟视频 | 熟妇人妻无码xxx视频 | 亚洲色偷偷男人的天堂 | 风流少妇按摩来高潮 | 亚洲一区二区观看播放 | 亚洲日韩乱码中文无码蜜桃臀网站 | 少妇性l交大片欧洲热妇乱xxx | 国内精品一区二区三区不卡 | 国产绳艺sm调教室论坛 | 国产亚洲精品精品国产亚洲综合 | 少妇被粗大的猛进出69影院 | 日日天干夜夜狠狠爱 | 无套内谢的新婚少妇国语播放 | 内射爽无广熟女亚洲 | 中文精品无码中文字幕无码专区 | 九九久久精品国产免费看小说 | 波多野结衣 黑人 | 中文字幕乱码中文乱码51精品 | 日本又色又爽又黄的a片18禁 | 久久人人爽人人爽人人片av高清 | 大乳丰满人妻中文字幕日本 | 亚洲国产午夜精品理论片 | 十八禁真人啪啪免费网站 | 亚洲精品一区二区三区在线 | 免费人成在线视频无码 | 18黄暴禁片在线观看 | 天堂久久天堂av色综合 | 男女超爽视频免费播放 | 国产精品va在线观看无码 | 青青青爽视频在线观看 | 精品日本一区二区三区在线观看 | 99久久久无码国产精品免费 | 亚洲国产精品毛片av不卡在线 | 亚洲色大成网站www国产 | 特大黑人娇小亚洲女 | 国产精品对白交换视频 | 欧美日韩色另类综合 | 亚洲成av人影院在线观看 | 中文字幕无码视频专区 | 中文毛片无遮挡高清免费 | 国产 浪潮av性色四虎 | 亚洲区欧美区综合区自拍区 | 人人妻人人澡人人爽人人精品浪潮 | 亚洲欧洲无卡二区视頻 | 国产麻豆精品一区二区三区v视界 | 露脸叫床粗话东北少妇 | 黑森林福利视频导航 | 日韩精品无码一区二区中文字幕 | 精品久久久无码中文字幕 | 日本熟妇人妻xxxxx人hd | 久久熟妇人妻午夜寂寞影院 | 亚欧洲精品在线视频免费观看 | 日本熟妇大屁股人妻 | 奇米影视888欧美在线观看 | 亚洲精品国产精品乱码视色 | 亚洲精品鲁一鲁一区二区三区 | 亚洲精品欧美二区三区中文字幕 | 99久久99久久免费精品蜜桃 | 精品国产aⅴ无码一区二区 | 亚洲中文字幕无码一久久区 | 草草网站影院白丝内射 | 无套内谢的新婚少妇国语播放 | 国产亚洲精品久久久闺蜜 | 国内精品人妻无码久久久影院蜜桃 | 澳门永久av免费网站 | 国产精品久久精品三级 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 亚洲日本一区二区三区在线 | 日韩欧美群交p片內射中文 | 国产特级毛片aaaaaa高潮流水 | 无码人妻黑人中文字幕 | 啦啦啦www在线观看免费视频 | 亚洲日韩乱码中文无码蜜桃臀网站 | 国产麻豆精品精东影业av网站 | 国产疯狂伦交大片 | 天天做天天爱天天爽综合网 | www国产亚洲精品久久网站 | 久久久久久久女国产乱让韩 | 十八禁真人啪啪免费网站 | 亚洲精品欧美二区三区中文字幕 | 久久精品中文闷骚内射 | 四十如虎的丰满熟妇啪啪 | 国产人妻精品一区二区三区不卡 | 欧洲vodafone精品性 | 精品人妻人人做人人爽 | 日韩精品成人一区二区三区 | 国产乱人伦av在线无码 | 内射后入在线观看一区 | 欧美日韩久久久精品a片 | 一本精品99久久精品77 | 亚洲 激情 小说 另类 欧美 | 一二三四社区在线中文视频 | 日产精品高潮呻吟av久久 | 欧美午夜特黄aaaaaa片 | 人妻少妇被猛烈进入中文字幕 | 999久久久国产精品消防器材 | 精品人人妻人人澡人人爽人人 | 青青草原综合久久大伊人精品 | 国产精品久久久久9999小说 | 久久久久人妻一区精品色欧美 | 国产成人无码av在线影院 | 极品尤物被啪到呻吟喷水 | 乱人伦人妻中文字幕无码 | 九九久久精品国产免费看小说 | 麻豆成人精品国产免费 | 激情爆乳一区二区三区 | 欧美性猛交xxxx富婆 | 美女张开腿让人桶 | 国产无套内射久久久国产 | 国产亚av手机在线观看 | 在线看片无码永久免费视频 | 久久久久成人精品免费播放动漫 | 暴力强奷在线播放无码 | 中文字幕av伊人av无码av | 最新版天堂资源中文官网 | 少妇久久久久久人妻无码 | 波多野结衣高清一区二区三区 | 全黄性性激高免费视频 | 内射白嫩少妇超碰 | 色一情一乱一伦一区二区三欧美 | 国产精品亚洲五月天高清 | 人人澡人人透人人爽 | 东京热男人av天堂 | 一本大道久久东京热无码av | 国产suv精品一区二区五 | 无码人妻丰满熟妇区毛片18 | 日韩欧美中文字幕在线三区 | 亚洲精品无码国产 | 人人妻人人澡人人爽欧美一区九九 | 亚洲欧美综合区丁香五月小说 | 国产9 9在线 | 中文 | 国产av一区二区精品久久凹凸 | 亚洲日本va中文字幕 | 亚洲日韩一区二区 | 在线观看国产一区二区三区 | 久久国语露脸国产精品电影 | 精品亚洲韩国一区二区三区 | 成人无码精品1区2区3区免费看 | 久久99热只有频精品8 | 丁香花在线影院观看在线播放 | 午夜精品久久久内射近拍高清 | 夜精品a片一区二区三区无码白浆 | 亚洲 另类 在线 欧美 制服 | 午夜成人1000部免费视频 | 男人扒开女人内裤强吻桶进去 | 蜜桃无码一区二区三区 | 亚洲欧美日韩国产精品一区二区 | 中文毛片无遮挡高清免费 | 四十如虎的丰满熟妇啪啪 | 日本熟妇大屁股人妻 | 18禁黄网站男男禁片免费观看 | 国产成人精品一区二区在线小狼 | 久久亚洲精品成人无码 | 乌克兰少妇性做爰 | 丁香花在线影院观看在线播放 | 99久久人妻精品免费一区 | 国产精品人人妻人人爽 | 99国产精品白浆在线观看免费 | 俄罗斯老熟妇色xxxx | 欧美性黑人极品hd | 国产精品无码久久av | 中文字幕乱码人妻二区三区 | 荡女精品导航 | 宝宝好涨水快流出来免费视频 | 亚洲自偷自拍另类第1页 | 在线观看免费人成视频 | 激情综合激情五月俺也去 | 麻豆国产人妻欲求不满谁演的 | 亚洲综合久久一区二区 | 国产尤物精品视频 | 国产成人av免费观看 | 国产无套内射久久久国产 | www国产亚洲精品久久网站 | 国产片av国语在线观看 | 玩弄人妻少妇500系列视频 | 秋霞成人午夜鲁丝一区二区三区 | 欧美成人高清在线播放 | 亚洲精品一区三区三区在线观看 | 国产精品久久国产三级国 | 香蕉久久久久久av成人 | 一本久久a久久精品vr综合 | 大胆欧美熟妇xx | 亚洲精品一区二区三区在线观看 | 国产绳艺sm调教室论坛 | 真人与拘做受免费视频 | 55夜色66夜色国产精品视频 | 久久精品人妻少妇一区二区三区 | 97资源共享在线视频 | 老子影院午夜伦不卡 | 成人免费无码大片a毛片 | 久久99精品国产.久久久久 | 国产精品久久国产精品99 | 人妻熟女一区 | 激情国产av做激情国产爱 | 国产精品久久久久久无码 | 樱花草在线播放免费中文 | 日本丰满护士爆乳xxxx | 国产精品va在线播放 | 亚洲啪av永久无码精品放毛片 | 亚洲性无码av中文字幕 | 少妇被粗大的猛进出69影院 | 免费网站看v片在线18禁无码 | 中文字幕av伊人av无码av | 老太婆性杂交欧美肥老太 | 国产精品视频免费播放 | 激情内射日本一区二区三区 | 久久久国产一区二区三区 | 久久久久久国产精品无码下载 | 久久久久99精品成人片 | 国产午夜福利100集发布 | 亚洲中文字幕在线无码一区二区 | 无码人妻精品一区二区三区下载 | 国产无遮挡吃胸膜奶免费看 | 国产精品99久久精品爆乳 | 日日碰狠狠躁久久躁蜜桃 | 小鲜肉自慰网站xnxx | 日本丰满护士爆乳xxxx | 最近的中文字幕在线看视频 | 中文精品久久久久人妻不卡 | 国产免费久久精品国产传媒 | 红桃av一区二区三区在线无码av | 国产人成高清在线视频99最全资源 | 免费无码一区二区三区蜜桃大 | 色一情一乱一伦一视频免费看 | 欧美激情综合亚洲一二区 | 人人妻人人澡人人爽精品欧美 | 精品少妇爆乳无码av无码专区 | 少妇人妻大乳在线视频 | 国产精品毛片一区二区 | 日本护士毛茸茸高潮 | 狠狠色噜噜狠狠狠7777奇米 | 国产黄在线观看免费观看不卡 | 特级做a爰片毛片免费69 | 欧洲vodafone精品性 | 激情五月综合色婷婷一区二区 | 亚洲国精产品一二二线 | 草草网站影院白丝内射 | 在线 国产 欧美 亚洲 天堂 | 成 人 免费观看网站 | 亚洲一区二区三区含羞草 | 欧美 丝袜 自拍 制服 另类 | 成人性做爰aaa片免费看 | 精品国产青草久久久久福利 | 精品久久久中文字幕人妻 | 小鲜肉自慰网站xnxx | 亚洲七七久久桃花影院 | 丰满少妇人妻久久久久久 | 美女毛片一区二区三区四区 | 亚洲国产精品毛片av不卡在线 | 亚洲熟悉妇女xxx妇女av | 无码av岛国片在线播放 | 色五月丁香五月综合五月 | 亚洲自偷自偷在线制服 | 精品 日韩 国产 欧美 视频 | 国产精品美女久久久 | 乱中年女人伦av三区 | 一区二区三区高清视频一 | 99精品国产综合久久久久五月天 | 国产精品国产自线拍免费软件 | 亚洲中文字幕av在天堂 | 国产麻豆精品一区二区三区v视界 | 天堂亚洲免费视频 | 精品一区二区不卡无码av | 国产av人人夜夜澡人人爽麻豆 | 图片小说视频一区二区 | 亚洲日韩一区二区三区 | 色一情一乱一伦一视频免费看 | 成人动漫在线观看 | 亚洲色成人中文字幕网站 | 无码av岛国片在线播放 | 人人澡人人妻人人爽人人蜜桃 | 亚洲人成影院在线无码按摩店 | 欧美精品在线观看 | 人妻少妇精品久久 | 国内揄拍国内精品少妇国语 | 国产在线无码精品电影网 | 少妇一晚三次一区二区三区 | аⅴ资源天堂资源库在线 | 中文字幕久久久久人妻 | 久久综合狠狠综合久久综合88 | 亚洲色www成人永久网址 | 亚洲成av人片在线观看无码不卡 | 十八禁视频网站在线观看 | 天天燥日日燥 | 大色综合色综合网站 | 亚洲精品一区二区三区婷婷月 | 天堂无码人妻精品一区二区三区 | 国产偷抇久久精品a片69 | 99精品视频在线观看免费 | 欧美精品无码一区二区三区 | 亚洲va中文字幕无码久久不卡 | 东京一本一道一二三区 | 国产9 9在线 | 中文 | 内射白嫩少妇超碰 | 国产后入清纯学生妹 | 国产成人综合色在线观看网站 | 十八禁视频网站在线观看 | 婷婷综合久久中文字幕蜜桃三电影 | 欧美激情内射喷水高潮 | 一本色道久久综合狠狠躁 | 国产女主播喷水视频在线观看 | 亚洲理论电影在线观看 | 成人性做爰aaa片免费看不忠 | 精品日本一区二区三区在线观看 | 俺去俺来也www色官网 | 成人试看120秒体验区 | 久久亚洲a片com人成 | 国产偷抇久久精品a片69 | 久久人人97超碰a片精品 | 成人欧美一区二区三区黑人免费 | 无码一区二区三区在线观看 | 欧美性生交活xxxxxdddd | 97精品国产97久久久久久免费 | 中文字幕 人妻熟女 | 红桃av一区二区三区在线无码av | 国产凸凹视频一区二区 | 日韩精品成人一区二区三区 | 国内丰满熟女出轨videos | 国产亚洲欧美日韩亚洲中文色 | 奇米影视7777久久精品人人爽 | 丝袜 中出 制服 人妻 美腿 | 亚洲日本一区二区三区在线 | 牲欲强的熟妇农村老妇女视频 | 国产综合在线观看 | 国产成人综合色在线观看网站 | 麻豆md0077饥渴少妇 | 欧美日韩视频无码一区二区三 | 欧美乱妇无乱码大黄a片 | 国产高潮视频在线观看 | 成人一在线视频日韩国产 | 国产一区二区三区影院 | 四虎国产精品免费久久 | 精品欧美一区二区三区久久久 | 亚洲一区av无码专区在线观看 | 三级4级全黄60分钟 | 熟妇女人妻丰满少妇中文字幕 | 国产精品嫩草久久久久 | 久久久久成人片免费观看蜜芽 | 亚洲日韩av片在线观看 | 福利一区二区三区视频在线观看 | 色窝窝无码一区二区三区色欲 | 玩弄人妻少妇500系列视频 | 国产成人精品一区二区在线小狼 | 欧美成人家庭影院 | 日本护士毛茸茸高潮 | 久久国产精品偷任你爽任你 | 色欲综合久久中文字幕网 | 色狠狠av一区二区三区 | 自拍偷自拍亚洲精品10p | 亚洲欧洲中文日韩av乱码 | 永久免费精品精品永久-夜色 | 国产情侣作爱视频免费观看 | 少妇性俱乐部纵欲狂欢电影 | 激情内射亚州一区二区三区爱妻 | 亚洲欧美精品aaaaaa片 | 亚洲中文字幕无码一久久区 | 国产精品久久精品三级 | 黑人粗大猛烈进出高潮视频 | 欧美老熟妇乱xxxxx | 欧美大屁股xxxxhd黑色 | 欧美日韩综合一区二区三区 | 黑人巨大精品欧美黑寡妇 | 国产成人精品必看 | 麻豆精品国产精华精华液好用吗 | 国产亚洲人成a在线v网站 | 亚洲综合无码久久精品综合 | 日韩精品无码一本二本三本色 | 国产精品人妻一区二区三区四 | а天堂中文在线官网 | 久久亚洲中文字幕无码 | 国产精品igao视频网 | 亚洲一区av无码专区在线观看 | 亚洲自偷自拍另类第1页 | 国产福利视频一区二区 | 成人无码精品1区2区3区免费看 | 国产办公室秘书无码精品99 | 东京无码熟妇人妻av在线网址 | 亚洲精品鲁一鲁一区二区三区 | 老司机亚洲精品影院无码 | 天天做天天爱天天爽综合网 | 亚洲精品欧美二区三区中文字幕 | 精品久久久久香蕉网 | 亚洲成av人影院在线观看 | 色婷婷欧美在线播放内射 | 久久伊人色av天堂九九小黄鸭 | 露脸叫床粗话东北少妇 | 日本肉体xxxx裸交 | 激情综合激情五月俺也去 | 人妻与老人中文字幕 | 99久久人妻精品免费一区 | 亚洲人成人无码网www国产 | 中文字幕久久久久人妻 | 黑人巨大精品欧美一区二区 | 久久国产精品二国产精品 | 亚洲精品国偷拍自产在线观看蜜桃 | 无码国模国产在线观看 | 中文字幕无码人妻少妇免费 | 日韩精品一区二区av在线 | 中文字幕乱码人妻二区三区 | 国产精品18久久久久久麻辣 | 日韩精品久久久肉伦网站 | 亚洲gv猛男gv无码男同 | 国产色视频一区二区三区 | 网友自拍区视频精品 | 欧美老人巨大xxxx做受 | 久久精品国产99久久6动漫 | 日产精品高潮呻吟av久久 | 欧洲美熟女乱又伦 | 久久亚洲精品中文字幕无男同 | 天天综合网天天综合色 | 内射巨臀欧美在线视频 | www国产精品内射老师 | 漂亮人妻洗澡被公强 日日躁 | 丰满少妇高潮惨叫视频 | 网友自拍区视频精品 | 特黄特色大片免费播放器图片 | 亚洲a无码综合a国产av中文 | 色综合久久久无码中文字幕 | 中文字幕+乱码+中文字幕一区 | 中文字幕人妻无码一夲道 | 色五月丁香五月综合五月 | 亚洲区小说区激情区图片区 | 色综合久久中文娱乐网 | 特黄特色大片免费播放器图片 | 午夜精品久久久久久久 | 天天av天天av天天透 | 亚洲中文无码av永久不收费 | 狠狠噜狠狠狠狠丁香五月 | 中文字幕av伊人av无码av | 国产区女主播在线观看 | 性啪啪chinese东北女人 | 成人精品视频一区二区三区尤物 | 欧美精品一区二区精品久久 | 亚洲国产精品一区二区美利坚 | 日韩人妻无码中文字幕视频 | 美女张开腿让人桶 | 国产亚洲人成a在线v网站 | 欧美日韩一区二区免费视频 | 久久国产精品萌白酱免费 | 亚洲s码欧洲m码国产av | 国产免费久久精品国产传媒 | 麻豆av传媒蜜桃天美传媒 | 亚洲成在人网站无码天堂 | 婷婷六月久久综合丁香 | 国产成人人人97超碰超爽8 | 亚洲欧洲日本无在线码 | 国产精品无码永久免费888 | 帮老师解开蕾丝奶罩吸乳网站 | 波多野结衣 黑人 | 丰满妇女强制高潮18xxxx | 无码人妻精品一区二区三区不卡 | 精品国产一区二区三区av 性色 | 四虎国产精品一区二区 | 亚洲七七久久桃花影院 | 少妇太爽了在线观看 | 亚洲精品中文字幕久久久久 | 又紧又大又爽精品一区二区 | 亚洲精品鲁一鲁一区二区三区 | 日韩av无码一区二区三区不卡 | 色综合久久久无码中文字幕 | 亚洲熟女一区二区三区 | 性史性农村dvd毛片 | 精品人妻人人做人人爽夜夜爽 | 免费看男女做好爽好硬视频 | 99精品国产综合久久久久五月天 | 亚洲国产欧美日韩精品一区二区三区 | 亚洲国产精品无码久久久久高潮 | 亚洲精品久久久久avwww潮水 | 中文字幕无码av激情不卡 | 国精品人妻无码一区二区三区蜜柚 | 一本大道伊人av久久综合 | 亚洲第一无码av无码专区 | 亚洲综合无码久久精品综合 | 国产香蕉97碰碰久久人人 | 欧美国产日韩亚洲中文 | 精品亚洲韩国一区二区三区 | 精品亚洲韩国一区二区三区 | 日韩精品无码一区二区中文字幕 | 欧美精品一区二区精品久久 | 乱中年女人伦av三区 | 在线а√天堂中文官网 | 亚洲aⅴ无码成人网站国产app | 亚洲 高清 成人 动漫 | 帮老师解开蕾丝奶罩吸乳网站 | 国产国产精品人在线视 | 理论片87福利理论电影 | 久久99精品国产麻豆 | 黑人巨大精品欧美黑寡妇 | 亚洲精品一区二区三区婷婷月 | 国产 浪潮av性色四虎 | 秋霞特色aa大片 | 亚洲狠狠色丁香婷婷综合 | 国内精品人妻无码久久久影院蜜桃 | 国内丰满熟女出轨videos | av小次郎收藏 | 久久久婷婷五月亚洲97号色 | 免费看男女做好爽好硬视频 | 欧美一区二区三区视频在线观看 | 国产又爽又黄又刺激的视频 | 网友自拍区视频精品 | 伊人久久大香线蕉av一区二区 | 久久午夜无码鲁丝片 | 欧美阿v高清资源不卡在线播放 | 人人妻人人澡人人爽欧美一区 | 亚洲精品无码国产 | 色爱情人网站 | 久久综合久久自在自线精品自 | 亚洲男女内射在线播放 | 成人一区二区免费视频 | 亚洲欧洲日本综合aⅴ在线 | 国产97人人超碰caoprom | 成熟女人特级毛片www免费 | 2020久久超碰国产精品最新 | 国产成人精品无码播放 | 久久久久99精品成人片 | 性欧美大战久久久久久久 | 久久精品国产日本波多野结衣 | 国产无av码在线观看 | 九九在线中文字幕无码 | 亚洲一区二区三区偷拍女厕 | 国产精品99爱免费视频 | 97精品国产97久久久久久免费 | 99久久人妻精品免费二区 | 亚洲精品一区二区三区大桥未久 | aⅴ在线视频男人的天堂 | 日本一区二区三区免费播放 | 永久免费观看美女裸体的网站 | 色综合久久网 | 兔费看少妇性l交大片免费 | 亚洲男人av天堂午夜在 | av无码不卡在线观看免费 | 亚洲欧美日韩国产精品一区二区 | 亚洲 a v无 码免 费 成 人 a v | 国产成人无码a区在线观看视频app | 亚洲国精产品一二二线 | 国产精品久久久久久无码 | 又紧又大又爽精品一区二区 | 亚洲区欧美区综合区自拍区 | 双乳奶水饱满少妇呻吟 | 99久久亚洲精品无码毛片 | 人人爽人人澡人人人妻 | 国产成人无码午夜视频在线观看 | 最新国产乱人伦偷精品免费网站 | 久久久国产精品无码免费专区 | 午夜精品一区二区三区在线观看 | 一本久道高清无码视频 | 性欧美牲交在线视频 | 综合人妻久久一区二区精品 | 亚洲精品一区二区三区大桥未久 | 欧美乱妇无乱码大黄a片 | 熟妇人妻激情偷爽文 | 国产成人无码av一区二区 | 麻豆国产人妻欲求不满谁演的 | 精品夜夜澡人妻无码av蜜桃 | 久久亚洲精品成人无码 | 亚洲国精产品一二二线 | 国产成人一区二区三区别 | 中文字幕乱码人妻二区三区 | 无码中文字幕色专区 | 欧美阿v高清资源不卡在线播放 | 亚洲精品久久久久avwww潮水 | 人人爽人人澡人人高潮 | 精品偷拍一区二区三区在线看 | 欧美三级a做爰在线观看 | 亚洲成a人片在线观看无码 | 亚洲中文字幕无码一久久区 | 久久无码中文字幕免费影院蜜桃 | 狠狠噜狠狠狠狠丁香五月 | 亚洲性无码av中文字幕 | 人妻人人添人妻人人爱 | 国语精品一区二区三区 | 亚洲中文无码av永久不收费 | 中文字幕人妻丝袜二区 | 国产精品成人av在线观看 | 久久精品女人的天堂av | 综合网日日天干夜夜久久 | 久久亚洲国产成人精品性色 | 男人和女人高潮免费网站 | 欧美喷潮久久久xxxxx | 日本爽爽爽爽爽爽在线观看免 | 亚洲日韩中文字幕在线播放 | 亚洲国产高清在线观看视频 | www国产精品内射老师 | 在线a亚洲视频播放在线观看 | 水蜜桃色314在线观看 | 日本熟妇大屁股人妻 | 亚洲精品综合五月久久小说 | 色欲综合久久中文字幕网 | 娇妻被黑人粗大高潮白浆 | 无码人妻出轨黑人中文字幕 | 国产成人无码一二三区视频 | 亚洲精品成a人在线观看 | 强伦人妻一区二区三区视频18 | 少妇愉情理伦片bd | 亚洲成av人片在线观看无码不卡 | 久久午夜夜伦鲁鲁片无码免费 | 久久久久亚洲精品中文字幕 | 人妻中文无码久热丝袜 | 日韩视频 中文字幕 视频一区 | 中文字幕+乱码+中文字幕一区 | 人妻与老人中文字幕 | 色窝窝无码一区二区三区色欲 | 亚洲成色www久久网站 | 5858s亚洲色大成网站www | 亚洲人亚洲人成电影网站色 | 国精品人妻无码一区二区三区蜜柚 | 久精品国产欧美亚洲色aⅴ大片 | 红桃av一区二区三区在线无码av | 鲁一鲁av2019在线 | 高清不卡一区二区三区 | 久久久婷婷五月亚洲97号色 | 久久人人爽人人爽人人片av高清 | 夜先锋av资源网站 | 国产猛烈高潮尖叫视频免费 | 日本成熟视频免费视频 | av香港经典三级级 在线 | 婷婷色婷婷开心五月四房播播 | 国产精品久久久久9999小说 | 国产精品久久国产三级国 | 欧美 日韩 人妻 高清 中文 | 人人妻人人藻人人爽欧美一区 | 久久精品成人欧美大片 | 日本乱人伦片中文三区 | 无套内射视频囯产 | 日韩精品成人一区二区三区 | a片在线免费观看 | 亚洲国产欧美在线成人 | 日本一卡2卡3卡四卡精品网站 | 少妇人妻av毛片在线看 | 国内丰满熟女出轨videos | 精品国产青草久久久久福利 | 丰满肥臀大屁股熟妇激情视频 | 女人高潮内射99精品 | 国产无套内射久久久国产 | 色综合久久中文娱乐网 | 国产午夜亚洲精品不卡下载 | 无码毛片视频一区二区本码 | 水蜜桃色314在线观看 | 人人妻人人澡人人爽欧美一区 | 亚洲国产精品无码久久久久高潮 | 午夜无码人妻av大片色欲 | 成 人 网 站国产免费观看 | 国产另类ts人妖一区二区 | 成人无码影片精品久久久 | 真人与拘做受免费视频一 | 久久亚洲精品成人无码 | 国内揄拍国内精品少妇国语 | 日欧一片内射va在线影院 | 4hu四虎永久在线观看 | 日本欧美一区二区三区乱码 | 国产av无码专区亚洲a∨毛片 | 久久精品国产日本波多野结衣 | 国产人妖乱国产精品人妖 | 亚洲国产成人av在线观看 | 亚洲第一无码av无码专区 | 久久久久久久久蜜桃 | 国产女主播喷水视频在线观看 | 四虎影视成人永久免费观看视频 | 欧美性猛交内射兽交老熟妇 | 国产激情精品一区二区三区 | 成 人影片 免费观看 | 午夜男女很黄的视频 | 久久久久久久久蜜桃 | 俄罗斯老熟妇色xxxx | 精品无码一区二区三区的天堂 | 国产va免费精品观看 | 又湿又紧又大又爽a视频国产 | 日日天日日夜日日摸 | 色婷婷香蕉在线一区二区 | 最近免费中文字幕中文高清百度 | 欧美日韩一区二区三区自拍 | 国产成人久久精品流白浆 | 无码人中文字幕 | 中文字幕乱码人妻无码久久 | 中文字幕无线码 | 在线精品国产一区二区三区 | 亚洲国产高清在线观看视频 | 亚洲综合无码一区二区三区 | 极品尤物被啪到呻吟喷水 | 亚洲一区二区三区在线观看网站 | 欧美黑人巨大xxxxx | 又大又黄又粗又爽的免费视频 | 日韩av无码一区二区三区 | 久久精品一区二区三区四区 | 中文字幕+乱码+中文字幕一区 | 久久天天躁狠狠躁夜夜免费观看 | 国产精品久免费的黄网站 | 国产成人精品久久亚洲高清不卡 | 久久精品国产大片免费观看 | 黑人巨大精品欧美一区二区 | 人妻无码久久精品人妻 | 国产激情一区二区三区 | 中文字幕无码视频专区 | 99麻豆久久久国产精品免费 | 人人妻人人澡人人爽人人精品浪潮 | 激情爆乳一区二区三区 | 国产高清不卡无码视频 | 综合网日日天干夜夜久久 | 久久久精品456亚洲影院 | 1000部啪啪未满十八勿入下载 | 无码福利日韩神码福利片 | 粉嫩少妇内射浓精videos | 美女张开腿让人桶 | 荫蒂被男人添的好舒服爽免费视频 | 亚洲精品欧美二区三区中文字幕 | 性欧美牲交在线视频 | 日产国产精品亚洲系列 | 亚洲精品中文字幕乱码 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 熟女少妇在线视频播放 | 亚洲中文字幕乱码av波多ji | 少妇被粗大的猛进出69影院 | 国产成人午夜福利在线播放 | 久热国产vs视频在线观看 | 成年美女黄网站色大免费全看 | 久久zyz资源站无码中文动漫 | 狂野欧美性猛交免费视频 | 丝袜 中出 制服 人妻 美腿 | 国产真实乱对白精彩久久 | 性欧美大战久久久久久久 | 宝宝好涨水快流出来免费视频 | 欧美第一黄网免费网站 | 亚洲成a人片在线观看无码 | 日日干夜夜干 | 成熟女人特级毛片www免费 | 午夜丰满少妇性开放视频 | 狠狠综合久久久久综合网 | 久久 国产 尿 小便 嘘嘘 | 欧美丰满熟妇xxxx性ppx人交 | 亚洲欧美精品伊人久久 | 亚洲欧美国产精品久久 | 精品亚洲韩国一区二区三区 | 色一情一乱一伦 | 午夜福利试看120秒体验区 | 高潮喷水的毛片 | 久久亚洲a片com人成 | 久久精品国产精品国产精品污 | www国产亚洲精品久久久日本 | 亚洲乱码国产乱码精品精 | 成熟女人特级毛片www免费 | 色老头在线一区二区三区 | 亚洲乱码中文字幕在线 | 国产偷自视频区视频 | 88国产精品欧美一区二区三区 | 精品人妻人人做人人爽夜夜爽 | 大肉大捧一进一出好爽视频 | 亚洲の无码国产の无码步美 | 性啪啪chinese东北女人 | 亚洲一区二区三区国产精华液 | 国产舌乚八伦偷品w中 | 大肉大捧一进一出视频出来呀 | 动漫av一区二区在线观看 | 人人妻人人澡人人爽欧美一区 | а√天堂www在线天堂小说 | 欧美激情一区二区三区成人 | 色欲av亚洲一区无码少妇 | 捆绑白丝粉色jk震动捧喷白浆 | 永久免费精品精品永久-夜色 | 欧美亚洲国产一区二区三区 | 乌克兰少妇性做爰 | 欧美丰满熟妇xxxx性ppx人交 | 日韩精品乱码av一区二区 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 人人澡人人透人人爽 | 国内精品一区二区三区不卡 | 欧美性生交活xxxxxdddd | 精品偷拍一区二区三区在线看 | 欧美丰满熟妇xxxx性ppx人交 | 国产 精品 自在自线 | 俺去俺来也在线www色官网 | 国产三级精品三级男人的天堂 | 夜夜影院未满十八勿进 | 动漫av网站免费观看 | 国产又爽又黄又刺激的视频 | 成人欧美一区二区三区黑人 | 水蜜桃色314在线观看 | 狠狠躁日日躁夜夜躁2020 | 日本丰满护士爆乳xxxx | 大地资源中文第3页 | 欧美xxxx黑人又粗又长 | 国产在线aaa片一区二区99 | 任你躁在线精品免费 | 免费中文字幕日韩欧美 | 少妇人妻大乳在线视频 | 人人妻人人澡人人爽欧美精品 | 中国女人内谢69xxxx | 99国产精品白浆在线观看免费 | 对白脏话肉麻粗话av | 国产午夜福利100集发布 | 无码乱肉视频免费大全合集 | www一区二区www免费 | 国产精品久久久午夜夜伦鲁鲁 | 国产熟女一区二区三区四区五区 | 亚洲成a人一区二区三区 | 偷窥日本少妇撒尿chinese | 夜精品a片一区二区三区无码白浆 | 野外少妇愉情中文字幕 | 2020久久超碰国产精品最新 | 欧美三级a做爰在线观看 | 18禁黄网站男男禁片免费观看 | 亚洲精品成人福利网站 | 久久久国产精品无码免费专区 | 亚洲无人区午夜福利码高清完整版 | 国内丰满熟女出轨videos | 少妇久久久久久人妻无码 | 性欧美牲交在线视频 | 欧美精品在线观看 | 国产精品香蕉在线观看 | 国产成人无码一二三区视频 | 国产精品a成v人在线播放 | 麻豆成人精品国产免费 | 国产精品va在线播放 | 成人影院yy111111在线观看 | 亚洲成av人综合在线观看 | 中文字幕人妻无码一夲道 | 久久精品国产99久久6动漫 | 亚洲精品成a人在线观看 | 老司机亚洲精品影院 | 免费无码一区二区三区蜜桃大 | 精品国产aⅴ无码一区二区 | 国产午夜无码视频在线观看 | 国产亲子乱弄免费视频 | 东京热男人av天堂 | 久久国产精品精品国产色婷婷 | 国产精品人人妻人人爽 | 亚洲中文字幕无码一久久区 | 秋霞特色aa大片 | 色欲综合久久中文字幕网 | 日韩人妻少妇一区二区三区 | 99在线 | 亚洲 | 欧美老妇交乱视频在线观看 | 激情五月综合色婷婷一区二区 | 亚洲 高清 成人 动漫 | 久久久久免费精品国产 | 国产又爽又猛又粗的视频a片 | 三上悠亚人妻中文字幕在线 | 1000部啪啪未满十八勿入下载 | 青青青手机频在线观看 | 国产精品99爱免费视频 | 丰满少妇熟乱xxxxx视频 | 99久久99久久免费精品蜜桃 | 亚洲国产精品成人久久蜜臀 | 在线观看免费人成视频 | 久久99精品久久久久久动态图 | 内射老妇bbwx0c0ck | 免费无码一区二区三区蜜桃大 | 久久亚洲中文字幕无码 | 性色欲情网站iwww九文堂 | 成人无码精品一区二区三区 | 亚洲自偷自拍另类第1页 | 国内少妇偷人精品视频免费 | 亚洲精品中文字幕久久久久 | 小泽玛莉亚一区二区视频在线 | 日本在线高清不卡免费播放 | 日本一区二区更新不卡 | 亚洲综合久久一区二区 | 亚洲精品综合五月久久小说 | 无套内谢的新婚少妇国语播放 | 国产激情综合五月久久 | 亚洲精品午夜无码电影网 | 99精品国产综合久久久久五月天 | 久久久久av无码免费网 | 大色综合色综合网站 | 丰满少妇弄高潮了www | 女高中生第一次破苞av | 国产av久久久久精东av | 国产精品人人爽人人做我的可爱 | 国产绳艺sm调教室论坛 | 国产极品美女高潮无套在线观看 | 男人和女人高潮免费网站 | 无码av最新清无码专区吞精 | 日韩亚洲欧美中文高清在线 | 欧美xxxx黑人又粗又长 | 国产精品永久免费视频 | 精品国产麻豆免费人成网站 | 十八禁真人啪啪免费网站 | 亚洲热妇无码av在线播放 | 中文字幕无码乱人伦 | 国产熟妇高潮叫床视频播放 | 麻豆国产人妻欲求不满谁演的 | 亚洲春色在线视频 | 久久熟妇人妻午夜寂寞影院 | 日韩精品无码一本二本三本色 | 成人毛片一区二区 | 99久久婷婷国产综合精品青草免费 | 久久综合给合久久狠狠狠97色 | 亚洲国产av美女网站 | 7777奇米四色成人眼影 | 国产手机在线αⅴ片无码观看 | 在线а√天堂中文官网 | 日韩av无码中文无码电影 | 欧美变态另类xxxx | 人人爽人人澡人人人妻 | 人妻aⅴ无码一区二区三区 | 国产福利视频一区二区 | 免费乱码人妻系列无码专区 | 色一情一乱一伦一区二区三欧美 | 高清无码午夜福利视频 | 国产精品免费大片 | 又色又爽又黄的美女裸体网站 | 女人被男人爽到呻吟的视频 | 日本丰满护士爆乳xxxx | 丰满诱人的人妻3 | 亚洲a无码综合a国产av中文 | 国产精品a成v人在线播放 | 久久人人爽人人人人片 | 国产精品久久福利网站 | 中文字幕无码免费久久9一区9 | 亚洲欧美色中文字幕在线 | 国产精品沙发午睡系列 | 四虎国产精品一区二区 | 国产极品美女高潮无套在线观看 | 无码成人精品区在线观看 | 国产亚洲人成在线播放 | 亚洲人成人无码网www国产 | 日本饥渴人妻欲求不满 | 国产亚洲精品久久久久久 | 麻豆md0077饥渴少妇 | 成人免费视频在线观看 | 久久无码人妻影院 | 波多野结衣aⅴ在线 | 中国大陆精品视频xxxx | 欧美黑人性暴力猛交喷水 | 中文字幕乱码亚洲无线三区 | 国产亚洲精品久久久久久久 | 国产激情精品一区二区三区 | 久久人人爽人人爽人人片av高清 | а√天堂www在线天堂小说 | 欧美熟妇另类久久久久久多毛 | 亚洲熟妇色xxxxx欧美老妇 | 性色欲情网站iwww九文堂 | 西西人体www44rt大胆高清 | 波多野结衣aⅴ在线 | 三级4级全黄60分钟 | 国产av无码专区亚洲a∨毛片 | 色欲综合久久中文字幕网 | 国产一区二区三区四区五区加勒比 | 日本熟妇乱子伦xxxx | 成人精品视频一区二区三区尤物 | 亚洲啪av永久无码精品放毛片 | 六月丁香婷婷色狠狠久久 | 亚洲人成影院在线无码按摩店 | 精品亚洲成av人在线观看 | 亚洲中文字幕无码中字 | 爆乳一区二区三区无码 | 中文字幕无码免费久久99 | 人人爽人人爽人人片av亚洲 | 亚洲aⅴ无码成人网站国产app | 蜜桃臀无码内射一区二区三区 | 人妻少妇精品久久 | 少妇无码av无码专区在线观看 | 狂野欧美性猛xxxx乱大交 | 日本饥渴人妻欲求不满 | 日韩亚洲欧美中文高清在线 | 国产人妻久久精品二区三区老狼 | 西西人体www44rt大胆高清 | 少妇性l交大片 | 黑人巨大精品欧美一区二区 | 久久熟妇人妻午夜寂寞影院 | 2019午夜福利不卡片在线 | 狠狠躁日日躁夜夜躁2020 | 亚洲日韩av一区二区三区中文 | 国产精品资源一区二区 | 99视频精品全部免费免费观看 | 久久人人爽人人爽人人片av高清 | 亚洲人成网站免费播放 | 亚洲色成人中文字幕网站 | 欧美成人午夜精品久久久 | 67194成是人免费无码 | 又色又爽又黄的美女裸体网站 | 人妻无码久久精品人妻 | 伊人久久大香线蕉午夜 | 影音先锋中文字幕无码 | 日韩少妇内射免费播放 | 丰满人妻一区二区三区免费视频 | 精品国产乱码久久久久乱码 | 欧美日本日韩 | 少妇性l交大片欧洲热妇乱xxx | 日本爽爽爽爽爽爽在线观看免 | 国产精华av午夜在线观看 | 久久精品中文字幕一区 | 精品人妻中文字幕有码在线 | 丁香花在线影院观看在线播放 | 国产亚洲精品久久久久久 | 97久久精品无码一区二区 | 综合人妻久久一区二区精品 | 无码午夜成人1000部免费视频 | 国产成人精品无码播放 | 人人妻人人澡人人爽欧美一区 | 98国产精品综合一区二区三区 | 国产后入清纯学生妹 | 亚洲va中文字幕无码久久不卡 | 国产成人无码a区在线观看视频app | 日本护士毛茸茸高潮 | 亚洲精品国偷拍自产在线观看蜜桃 | 牲欲强的熟妇农村老妇女 | 国产成人无码午夜视频在线观看 | 成人综合网亚洲伊人 | 国产精品沙发午睡系列 | 天堂а√在线地址中文在线 | 国产香蕉97碰碰久久人人 | 精品无码成人片一区二区98 | 国产乱子伦视频在线播放 | 亚洲va欧美va天堂v国产综合 | 少妇人妻偷人精品无码视频 | 婷婷五月综合缴情在线视频 | 国产尤物精品视频 | 丰满妇女强制高潮18xxxx | 欧美国产日产一区二区 | 综合网日日天干夜夜久久 | 亚洲啪av永久无码精品放毛片 | 国产片av国语在线观看 | 中文亚洲成a人片在线观看 | 亚洲中文字幕无码中文字在线 | 国产麻豆精品一区二区三区v视界 | 国产偷国产偷精品高清尤物 | 国产精品99爱免费视频 | 久久国产劲爆∧v内射 | 女人被爽到呻吟gif动态图视看 | 婷婷五月综合激情中文字幕 | 疯狂三人交性欧美 | 成人精品天堂一区二区三区 | 无人区乱码一区二区三区 | 狠狠色色综合网站 | 一本色道久久综合亚洲精品不卡 | 精品偷自拍另类在线观看 | 日产精品高潮呻吟av久久 |