我正在尝试确定Apple在NSWorkspace
上公开的方法如何在内部工作,以便尝试解决该方法的不幸副作用(每次调用它时写入磁盘)。我可以将lldb附加到我的可执行文件并在调用方法时设置断点,然后将si
导入objc_msgSend
并打开,但我更愿意跳过,直到我找到方法body,有没有办法在方法体的开头设置断点,或者在跳转到方法体之前的objc_msgSend
中设置指令?
答案 0 :(得分:2)
您可以通过类似
之类的东西为实际方法体本身设置断点br s -n "-[NSWorkspace openURL:]"
答案 1 :(得分:1)
lldb的源级step
命令将始终为您传递objc_msgSend trampoline代码,停止在目标实现中,无论实现位于何处。
但是,lldb默认情况下也会自动退出没有调试信息的方法。这在很大程度上是人们想要的行为,但在这种情况下并不是你想要的。幸运的是,您可以通过执行以下步骤关闭后一种行为:
(lldb) step -a 0
或通常通过设置控制此的全局默认值:
(lldb) set set target.process.thread.step-in-avoid-nodebug 0