【问题标题】:Stopping at breakpoints in external build in Xcode 4在 Xcode 4 的外部构建中的断点处停止
【发布时间】:2012-08-23 09:50:30
【问题描述】:

我正在尝试使用 Xcode 4 调试一个大型 c++ 项目。我必须使用 makefile 运行可执行文件,因此我将该项目添加为外部构建系统。该程序确实可以正常编译和运行,并具有预期的输出。如果我在编译期间编辑一个文件以产生错误,Xcode 会注意到这一点并转到正确文件中的正确行。问题是系统没有在我设置的断点处停止。

我已经按照here 的描述在方案中添加了可执行文件。我已将所有源文件添加到项目中。正如here 推荐的那样,我已将自定义工作目录设置为正确的目录。我已经确保我认为由 Xcode 构建的可执行文件确实是那个,并且我也尝试在将方案设置为等待手动启动后手动运行它,没有任何变化。

当我设置断点时,它们会显示为应有的蓝色。

有人可以给我任何提示,让我知道我还能尝试什么吗?非常感谢!

【问题讨论】:

    标签: xcode debugging


    【解决方案1】:

    尝试在 g++ 中添加 -g 选项以包含调试信息。对我有帮助。

    【讨论】:

      【解决方案2】:

      我也遇到了同样的问题。我在 makefile 中包含了这一行,它成功了

      #also include debug symbols
      CFLAGS+=-ggdb
      

      【讨论】:

        【解决方案3】:

        如果您使用 ccache 构建项目,lldb 将无法通过 file:line 设置断点

        http://llvm.org/bugs/show_bug.cgi?id=20297

        【讨论】:

          【解决方案4】:

          您在导入源文件时是否选中了“必要时复制文件”复选框?这似乎不太好。这就是我断点失败的原因。我必须删除所有源文件并重新导入它们,确保 Xcode 没有单独制作它们的副本。这使得断点工作。

          我猜 XCode 无法将调试信息 (-g / -ggdb) 与它自己的源副本或类似的东西联系起来。

          【讨论】:

            【解决方案5】:

            我遇到了完全相同的问题(Xcode 8.3.3),但将 -ggdb 添加到 makefile 并没有解决它。我发现(在很痛苦之后)makefile 正在清理 .o 文件作为构建的一部分(rm -f $(OBJFILES))。事实证明,符号信息位于 .o 文件中,因此通过删除它们,Xcode 无法再进行调试。我注释掉了 rm 行,现在一切正常。我使用了 -g 标志,它可以工作。任何与此作斗争的人都应确保 .o 文件位于正确的位置。

            【讨论】:

              【解决方案6】:

              在 makefile 中将 -g 添加到 CFLAGS 和 CXXFLAGS 会有所帮助。您可能必须对项目中的所有 Makefile 执行此操作;甚至是您尝试断点的内部目录中的makefile。这完全取决于您的项目结构。我必须在项目中添加所有 3 个 Makefile。

              它并没有立即为我工作。我不得不手动删除 .o 文件并使用添加到 Makefile 的标志再次构建。

              另外,请确保您已按照此处问题中的建议完成所有操作。

              【讨论】:

                猜你喜欢
                • 2011-07-15
                • 2016-05-28
                • 2018-09-22
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2015-05-11
                相关资源
                最近更新 更多