我是lldb
调试的新人,希望你能帮助我:)。
基本上我想表达一些功能,例如
(lldb) expr device.up()
(lldb) expr device.down()
观看模拟器上UI的变化行为。 (很多动画..)
当我在UIViewController
设置断点时,我可以实现这一点,然后输入命令。但是再次按下start后它会等待一个委托,我只能手动暂停它以再次获得调试控制台。我的问题出现了:当我暂停应用程序时,是否有可能在与设置断点之前相同的环境(特定的,活动UIViewController
)进行调试?
我很高兴你的提示和经验,如果我的问题不清楚,请写信! :)
答案 0 :(得分:1)
如果你正在评估表达式的堆栈帧仍然在某个堆栈上,你可以选择该线程&帧:
(lldb) thread 5
(lldb) frame 7
然后运行表达式。如果框架不再在堆栈上,则无法执行此操作。如果您正在评估的表达式引用局部变量,则您无法恢复它们,它们占用的内存消失了。
但是您可以将值存储在lldb便利变量中。例如,如果您使用的是C ++和" device"是对SomeType
类型对象的引用,您可以这样做:
(lldb) expr SomeType *$reference_to_device = &device
然后你可以这样做:
(lldb) expr $reference_to_device->up()
捕获地址并不会使对象保持活着状态,但是,程序中实际存在的东西必须这样做。