Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何在self.view的属性上设置lldb监视点?_Iphone_Objective C_Ios_Xcode_Lldb - Fatal编程技术网

Iphone 如何在self.view的属性上设置lldb监视点?

Iphone 如何在self.view的属性上设置lldb监视点?,iphone,objective-c,ios,xcode,lldb,Iphone,Objective C,Ios,Xcode,Lldb,我想跟踪self.view的大小何时发生变化。正确的格式是什么 (lldb) po self.view (UIView *) $1 = 0x0a8aba20 <UIView: 0xa8aba20; frame = (0 0; 480 864); autoresize = W+TM+BM; layer = <CALayer: 0xa8aba50>> (lldb) watch set variable self.view.frame.size.width error: "se

我想跟踪self.view的大小何时发生变化。正确的格式是什么

(lldb) po self.view
(UIView *) $1 = 0x0a8aba20 <UIView: 0xa8aba20; frame = (0 0; 480 864); autoresize = W+TM+BM; layer = <CALayer: 0xa8aba50>>
(lldb) watch set variable self.view.frame.size.width
error: "self" is a pointer and . was used to attempt to access "view". Did you mean "self->view.frame.size.width"?
(lldb) watch set variable self->view
error: "view" is not a member of "(PlayViewController *) self"
(lldb) watch set variable self->view.frame.size.width
error: "view" is not a member of "(PlayViewController *) self"
(lldb)po self.view
(UIView*)$1=0x0a8aba20
(lldb)手表设置变量self.view.frame.size.width
错误:“self”是指针和。用于尝试访问“视图”。你是说“自我->查看.框架.大小.宽度”吗?
(lldb)监视设置变量自->查看
错误:“视图”不是“(PlayViewController*)自身的成员
(lldb)观察设置变量self->view.frame.size.width
错误:“视图”不是“(PlayViewController*)自身的成员
我尝试了文档和其他lldb观察点问题,但找不到任何关于这个特定案例的信息


感谢您的帮助。

视图控制器从其
\u视图
实例变量引用其视图

视图不直接存储其帧。它只返回其层的“帧”

视图从其
\u层
实例变量引用其层

该层也不存储帧。它从其
边界
位置
锚点
变换
计算其帧。大小是
边界的一部分

层不会将其边界直接存储在实例变量中。相反,它的<代码>层< /Cord>实例变量引用私有C++类的实例, CA::层< /C>。此类的成员布局未记录

换句话说,您可以通过
self->\u view->\u layer->layer
来访问
CA::layer
实例,但是由于您不知道在
CA::layer
中的何处可以找到边界,所以您会陷入困境

因此,尝试使用观察点来检测视图大小的变化是相当困难的

-[CALayer setBounds::
上设置断点更容易

在模拟器上 记住在断点条件中使用层地址,而不是查看地址

(lldb) po self.view
(UIView *) $1 = 0x0a034690 <UIView: 0xa034690; frame = (0 20; 768 1004); autoresize = W+H; layer = <CALayer: 0xa034780>>
(lldb) break set -F '-[CALayer setBounds:]' -c '((int*)$esp)[1] == 0xa034780'
Breakpoint created: 2: name = '-[CALayer setBounds:]', locations = 1, resolved = 1
(lldb) po self.view
(UIView *) $0 = 0x1f031a10 <UIView: 0x1f031a10; frame = (0 20; 768 1004); autoresize = W+H; layer = <CALayer: 0x1f031b00>>
(lldb) break set -F '-[CALayer setBounds:]' -c '$r0 == 0x1f031b00'
Breakpoint created: 2: name = '-[CALayer setBounds:]', locations = 1, resolved = 1
在设备上 记住在断点条件中使用层地址,而不是查看地址

(lldb) po self.view
(UIView *) $1 = 0x0a034690 <UIView: 0xa034690; frame = (0 20; 768 1004); autoresize = W+H; layer = <CALayer: 0xa034780>>
(lldb) break set -F '-[CALayer setBounds:]' -c '((int*)$esp)[1] == 0xa034780'
Breakpoint created: 2: name = '-[CALayer setBounds:]', locations = 1, resolved = 1
(lldb) po self.view
(UIView *) $0 = 0x1f031a10 <UIView: 0x1f031a10; frame = (0 20; 768 1004); autoresize = W+H; layer = <CALayer: 0x1f031b00>>
(lldb) break set -F '-[CALayer setBounds:]' -c '$r0 == 0x1f031b00'
Breakpoint created: 2: name = '-[CALayer setBounds:]', locations = 1, resolved = 1

在64位模拟器上,中断命令应为:

break set -F '-[CALayer setBounds:]' -c '$rdi == 0x...'

在ARM64上,寄存器是
$x0
$x2
等,使用相同的命令在MBP 64位上运行
中断集-F'-[CALayer setBounds:''-c'((int*)$esp)[1]==0x7fe6e3098000'
,我得到以下错误:
由于断点5.1的错误评估条件而停止:“(int*)$esp)[1]==0x7fe6e3098000”无法执行表达式:本应进行解释,但失败:解释程序无法从内存中读取