【问题标题】:Debug Cocoa library method调试 Cocoa 库方法
【发布时间】:2015-10-26 00:20:25
【问题描述】:

有没有办法进入 Cocoa 库方法来查看程序集或实现?我一直在尝试调试 NSEvent 方法touchesMatchingPhase,但是当我尝试进入它时,Xcode 会跳过它。 xcode 是否限制步入库方法?是否可以检查实现?

【问题讨论】:

  • “当 [您] 尝试介入时”您到底在做什么?如果您还没有,请在控制台提示符下尝试“si”命令。
  • 你会读汇编吗?
  • 好的,在使用 si 命令几次后,我转到了 objc_msgSend,它有一个跳转语句到 touchesMatchingPhase 程序集实现。我可以单步执行跳转语句并查看该方法的实现。您是否知道是否有办法将实现的汇编指令反编译为 C 或更易于阅读的东西?
  • Class dump 最终得到了我需要的东西

标签: objective-c xcode macos cocoa


【解决方案1】:

没有这样的限制,但您只会看到汇编程序。输入库方法或函数:

  1. 在您的源代码中,在调用上放置一个断点。
  2. 运行
  3. 当断点被击中时,按住 control 键并按下 step into 按钮。控制键表示您希望通过机器指令而不是源代码行进行操作,调试器步骤等按钮图标将更改为在它们下方显示一个点。程序将在同一行再次停止,这是因为它需要一些机器指令 - 数量取决于您传递的参数的数量和种类 - 在您实际输入方法/函数之前。
  4. 重复控制 + 单击,直到您输入方法/函数 - 一旦您输入方法/函数,调试器将切换到向您显示汇编程序,因为它没有源代码。
  5. 一旦您处于没有源的方法/函数中,则在单击按钮时无需按住控制键,图标将更改为在其下方显示一个点并保持这种状态,直到您输入方法/函数来源。

如果您希望查看 (3) 和 (4) 中逐步执行的指令的汇编程序,您可以随时选择 Debug -> Debug Workflow -> Show Disassembly When Debugging始终显示汇编程序而不是源代码。

HTH

【讨论】:

    猜你喜欢
    • 2011-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-05
    • 1970-01-01
    • 2010-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多