查找二进制文件中的类符号来源

Ben*_*ron 5 iphone objective-c ios

我有一个有趣的问题。我收到崩溃日志,该崩溃日志引用了我的应用程序中的一个名为NRURLProtocol的类(具体是在文件NRURLProtocol.m中),根据崩溃日志,该类存在于我的应用程序中,而不存在于iOS框架中。但是,我的项目中没有NRURLProtocol类,也没有任何NRURLProtocol.m文件。通过Google或StackOverflow在线进行的搜索从字面上发现了对该类的0个引用。

如果我在二进制文件上运行以下命令:

otool -o binary | grep NR
Run Code Online (Sandbox Code Playgroud)

我发现带有NR前缀的各种类,包括NRURLProtocol。但是,当我otool在所有与二进制文件链接的静态库上使用相同的命令时,什么也没找到。我在驱动器上找不到名为NRURLProtocol.m的文件。

我对如何追踪这个问题有些茫然。此类不仅存在于我的二进制文件中,而且还被某些东西作为URL协议加载。因此,即使没有otool找到任何东西,我正在使用的某些第三方库似乎也包含它。

这是出现在我的二进制文件中的带有NR前缀的类的完整列表:

NRASIRequestTracker
NRASISupport
NRErrorData
NRLogger
NRNonARCMethods
NRSecureUDID
NRStats
NRStatsEngine
NRSupportability
NRTransactionData
NRURLProtocol
NRNSURLSupport
Run Code Online (Sandbox Code Playgroud)

这是我链接到的所有第三方静态库:

Facebook SDK
HockeyApp SDK
ZipKit
Mixberry SDK (though not actually using it anywhere, currently disabled)
Flurry SDK
Google AdMob SDK
HelpShift SDK
UrbanAirship SDK
libBass (audio library, doesn't contain Objective-C code)
EX2Kit (my own toolkit library, which doesn't contain this code)
Run Code Online (Sandbox Code Playgroud)

有没有人知道这些类的来源或我可以尝试的其他命令?

Ben*_*ron 2

找到了!不知怎的,我错过了我们也使用 NewRelic 的 SDK 的事实。考虑到 NR 前缀,这应该是显而易见的。otool很快就表明有问题的类就在那里。