我怎样才能在Xcode框架debugging?

我有两个项目,一个是networkLiblogin和一些其他的networkingfunction,另一个是usingLibDemo 。 所以我有这两个项目的所有源代码。

myNetKit.framework项目输出一个名为myNetKit.framework的框架,该框架由使用usingLibDemo

在这里输入图像说明

现在我成功地使用myNetKit.framework来login,但有时它崩溃,也许在main()没有堆栈信息,但有时Xcode给了我像下面的堆栈信息:

在这里输入图像说明

所以我知道它崩溃的地方:

在这里输入图像说明

但是Utils.m没有公开, Xcode如何获取堆栈信息和崩溃行,并最终为我打开源文件? 因为我有我的磁盘的源代码?

如果是这样,我怎么能一步一步debuggingmyNetKit.framework ,当它不崩溃?

非常感谢任何提示。

您还可以将整个库( networkLib )项目添加到项目中,并通过在项目设置中添加依赖项来dynamic链接库。 所以你可以在你的项目中拥有所有的源代码。 所以你可以在运行时debugging它。

如果将来有人会有同样的问题(现在我正在使用Xcode 8):

您可以:

  1. build立你的框架项目(在这个例子中“networkLib”)
  2. 将项目输出(“myNetKit.framework”)复制到目标项目(“usingLibDemo”)
  3. 在您的设备上运行目标项目(“usingLibDemo”)
  4. 停止过程
  5. 手动从设备启动应用程序(“usingLibDemo”)
  6. 开放框架项目和附加到您的应用程序的进程(在第5步启动)。 在Xcode 8中:debugging – >附加到进程 – >select你的应用程序的名称。

不要忘记在你的框架项目中设置一些断点。

当使用所有符号构build库时,它包含embedded到其中的每个源文件的完整path。 如果使用hex查看器打开.a,则可以看到这一点。 有了这个,XCode将知道如何到达源文件。

设置断点更具挑战性。 你基本上必须让XCode慢慢地从你的库中发现源文件,通过join这些文件中的方法。 一旦XCode打开文件,你可以在其中的任何地方设置断点。

这有点痛苦,但是它是有效的,如果你不想把图书馆项目做成一个子项目。

处理多个框架项目时使用XCode Workspace。 当你使用一个工作区时,断点会起作用,你可以在没有来callback试的情况下find你的崩溃。 从长远来看,pipe理你的框架会容易得多。

您应该debugging分开输出框架的项目networkLib。 框架没有像结构的应用程序,所以其他项目中的框架文件不能被debugging。