带有符号断点 - [UIView(Geometry)setFrame:] 并且lldb在符号断点处停止我输入了frame variable命令以不产生任何东西......真的没什么。
此代码在断点之前运行
let rect = CGRect(x: 0, y: 0, width: 320, height: 1230)
view.frame = rect
我真正想要的是在64位时调试CGRect参数,而
在32位*(CGRect *)($esp + 12)
工作正常,但在64 *(CGRect *)$rdx/rcx
错误:无法应用表达式副作用:无法取消物化结果变量:无法读取其内存
所以在我碰到一堵墙之后我想看看框架变量导致我发现这个结果。如果有人知道如何调试值
另外值得注意的是,因为$ rdx➡arg2他们应该得到相同的结果,但他们不会
arg2打印出一个CGRect,但它有错误的值
但$ rdx会抛出错误
(lldb) po *(CGRect*)$arg2
(origin = (x = 3.8098582624090393E+180, y = 3.6806986858704324E+180), size = (width = 4.9279512391228864E+180, height = 1.469851705066036E-307))
(origin = (x = 3.8098582624090393E+180, y = 3.6806986858704324E+180), size = (width = 4.9279512391228864E+180, height = 1.469851705066036E-307))
(lldb) p *(CGRect*)$rdx
error: Couldn't apply expression side effects : Couldn't dematerialize a result variable: couldn't read its memory
答案 0 :(得分:0)
x86_64(link_to "test", "#", :onclick=>"call_js_function(); return false;", :data=>{:confirm=>"are you sure?"}
)上函数的第一个参数在$arg1
中传递。 x86_64(rdi
)上函数的第二个参数在$arg2
中传递。第三个arg是rsi
。我怀疑当你将它作为一个值传递给rdx
时,你看到的问题的根源。
p
(简称frame variable
)仅显示带有调试信息的变量。您在没有调试信息的普通汇编函数中停止。在第一个pc值,第一个参数位于fr v
,第二个参数位于`rsi等,而lldb可能会将这些显示为“变量” - 但只要您单步执行该函数,这些寄存器就可以被重用于其他值(例如,如果调用另一个函数),那么说出该寄存器中的内容就不再安全了。