我不知道的调试

摘要:
事情是这样的,今天遇到了个bug,大佬回复四个字,观察断点,excuse me??? 这是什么骚操作 然后就查资料了,原来是个名词,下面根据我这个实际的bug,梳理下观察断点的吊炸天

正文:
bug:
设置断点 1
图片
断点前状态
图片
断点后状态
图片
设置断点 2
图片
断点状态
图片
我直接懵逼了 啥玩意儿 这是
我改了viewControllers里面 一个已经存在的控制器的属性 vc地址假如为0x10000 断点的时候 发现修改成功 然后pop回去 在viewWillAppear里面断点看 vc地址相同 但是 修改的那个属性还是原来 并没有成功
图片
大佬告知观察断点,然后我就去找了下资料,可以使用如下方式设置,也可以使用

(lldb) watchpoint set variable _titleName
设置观察断点
图片
然后触发断点,输出如下 果然成功过,但是又哪里被改回去了 使用 $ bt 命令 可以得到调用栈
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
Watchpoint 1 hit:
old value: 加餐
new value: 早餐
(lldb) bt
* thread #1, queue = 'com.apple.main-thread', stop reason = watchpoint 1
* frame #0: 0x000000018d2d0308 libobjc.A.dylib'objc_setProperty_nonatomic_copy + 56
frame #1: 0x00000001002a2644 LOHO'-[KDXFoodPanelViewController setTitleName:](self=0x000000010debb010, _cmd="setTitleName:", titleName=@"早餐") at KDXFoodPanelViewController.h:21
frame #2: 0x000000018f2bd8f0 Foundation'-[NSObject(NSKeyValueCoding) setValue:forKey:] + 272
frame #3: 0x0000000194a9de40 UIKit'-[UIViewController setValue:forKey:] + 104
frame #4: 0x0000000100102298 LOHO'__42-[KDXSearchViewController updataFoodData:]_block_invoke_3((null)=<unavailable>) at KDXSearchViewController.m:1248
frame #5: 0x00000001055fd258 libdispatch.dylib'_dispatch_call_block_and_release + 24
frame #6: 0x00000001055fd218 libdispatch.dylib'_dispatch_client_callout + 16
frame #7: 0x0000000105602280 libdispatch.dylib'_dispatch_main_queue_callback_4CF + 1200
frame #8: 0x000000018e836810 CoreFoundation'__CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 12
frame #9: 0x000000018e8343fc CoreFoundation'__CFRunLoopRun + 1660
frame #10: 0x000000018e7622b8 CoreFoundation'CFRunLoopRunSpecific + 444
frame #11: 0x0000000190216198 GraphicsServices'GSEventRunModal + 180
frame #12: 0x00000001947a97fc UIKit'-[UIApplication _run] + 684
frame #13: 0x00000001947a4534 UIKit'UIApplicationMain + 208
frame #14: 0x00000001003ba208 LOHO'main(argc=1, argv=0x000000016fddf970) at main.m:14
frame #15: 0x000000018d7455b8 libdyld.dylib'start + 4
(lldb)
Watchpoint 1 hit:
old value: 早餐
new value: 加餐
(lldb) bt
* thread #1, queue = 'com.apple.main-thread', stop reason = watchpoint 1
* frame #0: 0x000000018d2d8124 libobjc.A.dylib'objc_storeStrong + 48
frame #1: 0x00000001002a1bc4 LOHO'__41-[KDXFoodPanelViewController searchFood:]_block_invoke((null)=<unavailable>, titleName=@"加餐") at KDXFoodPanelViewController.m:448
frame #2: 0x00000001000f0584 LOHO'-[KDXSearchViewController viewWillDisappear:](self=0x000000010e818800, _cmd="viewWillDisappear:", animated=YES) at KDXSearchViewController.m:215
frame #3: 0x0000000194756894 UIKit'-[UIViewController _setViewAppearState:isAnimating:] + 944
frame #4: 0x00000001947ca50c UIKit'-[UIViewController __viewWillDisappear:] + 100
frame #5: 0x00000001948de5a0 UIKit'-[UINavigationController _startCustomTransition:] + 1116
frame #6: 0x00000001947f6e74 UIKit'-[UINavigationController _startDeferredTransitionIfNeeded:] + 676
frame #7: 0x00000001947f6adc UIKit'-[UINavigationController __viewWillLayoutSubviews] + 64
frame #8: 0x00000001947f6a40 UIKit'-[UILayoutContainerView layoutSubviews] + 188
frame #9: 0x000000019473ba80 UIKit'-[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 1196
frame #10: 0x0000000191be99d8 QuartzCore'-[CALayer layoutSublayers] + 148
frame #11: 0x0000000191bde4cc QuartzCore'CA::Layer::layout_if_needed(CA::Transaction*) + 292
frame #12: 0x0000000191bde38c QuartzCore'CA::Layer::layout_and_display_if_needed(CA::Transaction*) + 32
frame #13: 0x0000000191b5b3e0 QuartzCore'CA::Context::commit_transaction(CA::Transaction*) + 252
frame #14: 0x0000000191b82a68 QuartzCore'CA::Transaction::commit() + 512
frame #15: 0x0000000191b83488 QuartzCore'CA::Transaction::observer_callback(__CFRunLoopObserver*, unsigned long, void*) + 120
frame #16: 0x000000018e8360c0 CoreFoundation'__CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 32
frame #17: 0x000000018e833cf0 CoreFoundation'__CFRunLoopDoObservers + 372
frame #18: 0x000000018e834180 CoreFoundation'__CFRunLoopRun + 1024
frame #19: 0x000000018e7622b8 CoreFoundation'CFRunLoopRunSpecific + 444
frame #20: 0x0000000190216198 GraphicsServices'GSEventRunModal + 180
frame #21: 0x00000001947a97fc UIKit'-[UIApplication _run] + 684
frame #22: 0x00000001947a4534 UIKit'UIApplicationMain + 208
frame #23: 0x00000001003ba208 LOHO'main(argc=1, argv=0x000000016fddf970) at main.m:14
frame #24: 0x000000018d7455b8 libdyld.dylib`start + 4
(lldb)

观察后发现 在[KDXSearchViewController viewWillDisappear:]前,就已经把东西修改掉了,然后我就找到了bug出现的原因
参考资料
1、http://blog.chinaunix.net/uid-20760757-id-1872357.html
2、http://blog.csdn.net/zhouzhoujianquan/article/details/54949464
最后:
图片

热评文章