【问题标题】:Logging objc_msgSend() on iPhone在 iPhone 上记录 objc_msgSend()
【发布时间】:2011-06-06 02:49:51
【问题描述】:

我最近遇到了一个在 Google 上没有有效解决方案的问题。我想将应用程序的 Objective-C 消息记录到控制台或文件中。我没有编写应用程序,所以我没有包含日志记录的源代码来重新编译。我有一部越狱的 iPhone,所以对如何实现这一点没有任何限制。我什至考虑通过 MobileSubstrate 扩展来做到这一点(我可以为该应用程序挂钩 objc_msgSend 以进行一些日志记录吗?),但没有太多想法。你能帮我解决这个问题吗?

【问题讨论】:

  • 当您登录时,您不会获得方法名称。你只会得到指针。方法名称不存储在最终的二进制文件中。它们存储在单独的文件 (.dSYM) 中
  • 方法选择器存储在二进制文件中。没有它们,Objective-c 将无法工作。 objc_msgSend 的第二个参数是选择器,可以改成字符串。
  • ughoavgfhw 是对的(你有没有尝试过从 Objective-C 源打开由 ld 生成的二进制文件?)很高兴知道,但是如何让 objc_msgSend 来做日志呢?

标签: iphone objective-c debugging


【解决方案1】:

ObjC 消息有一个日志记录机制,但我不确定您是否会在没有符号文件的情况下获得方法名称。假设您的越狱手机允许您在调试器 (gdb) 的控制下运行任何应用程序,您应该能够启动应用程序,在初始化期间尽早设置断点,然后执行以下操作:

(gdb) call (void)instrumentObjcMessageSends(YES)

日志文件将被写入 tmp 文件夹中的文本文件。更多细节在这里:

http://www.dribin.org/dave/blog/archives/2006/04/22/tracing_objc/

【讨论】:

  • 感谢 Cbranch,你真的帮助了我。我会试试这个。 (哎呀,还有一个问题:如何设置断点?)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 2013-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多