当多个项目同时打开时,XCode如何知道要调试哪个项目?

时间:2011-01-31 19:00:23

标签: iphone cocoa xcode debugging frameworks

TL; DR版本

这个问题的出现是因为我有多个框架(我已经构建了)和一个使用所述框架的客户端项目。现在,当我打开客户端项目并尝试调试到框架时,它不起作用。

但是,如果我打开了与框架关联的项目,那么调试似乎有效(尽管断点有一些奇怪的问题,我看不到被触发)。

我查看了Apple的文档,也许答案被隐藏在某处,但我无法在Xcode调试指南中找到它。

长版

这个问题对我来说很重要的原因是,我和同事在如何在我们构建的框架中导入标题时存在分歧。

我倾向于以时尚的方式使用框架标题(使用客户端应用程序):

#import "FrameworkA/HeaderA.h"
#import "FrameworkB/HeaderB.h"
另一方面,他赞成导入框架标题(使用客户端应用程序),如下所示:

#import "HeaderA.h"
#import "HeaderB.h"

并在客户端应用程序的构建目标中指定标头搜索路径。

事情进一步复杂化的是,这些框架中的一些具有相互依赖性。例如,FrameworkB具有来自FrameworkA的标题,其格式为:

#import "HeaderA.h"

他这样做的论点是调试只有在我们以这种方式导入标题时才有效。我觉得在标题导入样式和调试之间会有一个关系,但我真的不确定XCode在调试过程中如何选择要链接的文件,这是个问题。

提前感谢您对此查询的任何帮助。

1 个答案:

答案 0 :(得分:1)

将项目引用添加到目标,并确保Xcode知道在哪里找到调试符号。

#import <FrameworkA/HeaderA.h>

这是要走的路(内部和外部声明)。原因?随着图书馆的发展,另一种方法更有可能引发问题。附加资格消除任何情况的歧义(除非您的搜索路径中有两个FrameworkA/),最好现在明确地对文件进行限定,而不是当您的客户告诉您他们不能将您的库与其他库一起使用时,或者他们只能在某些条件下使用它们。然后你必须解决问题和重新安装(这种东西有一种方式发生在不方便的时间= p)。这是确保您开发出强大界面的一个简单措施。

可能人们忽视的最重要的部分是产品的位置:为目标使用自定义的中央构建位置 - 许多人使用默认位置,即xcodeproject。否则,Xcode可能无法找到调试信息。

最后,在Xcode中调试复杂的项目可能非常......我们称之为'有问题'。因此,即使您已正确配置所有内容,也不要期望调试体验完美。使用Xcode在早期将断言和单元测试集成到开发周期中的更多理由。事实是,无论你怎么努力,调试器都可能没用 - 这不是一个新问题。希望LLDB能够改善我们的调试经验。

祝你好运