未包含cpp文件解决的xcode断点 - MacOS

问题描述:

更新:根据Jason Molenda给出的答案,我意识到settings命令根本就不是问题 - 它正在被正确读取并且具有正确的值,但是断点仍然没有解决。我已更改主题名称以更准确地解决问题。未包含cpp文件解决的xcode断点 - MacOS

问题摘要:我包含cpp文件,当使用排水沟设置断点时,Xcode无法解析它们,应用程序是在外部构建的(而不是在Xcode中开发的),并且我的.lldbinit已经具有设置target.inline-breakpoint战略总是设置。

上一版本: 我的问题是,我不能让Xcode的调试器在断点处中包含.cpp文件打破(从外部构建的应用程序,只是想使用Xcode中的调试器)。

我发现答案是添加以下到.lldbinit文件:

设置中设置target.inline断点策略总是

而且我做到了。它似乎根本没有被读取,也没有改变任何东西。当使用运行命令自己:

命令源〜/ .lldbinit

它告诉我:

-bash:设置:未发现

命令我不明白为什么它不能找出'设置'命令。我会补充一点,我对这个文件应该如何工作知之甚少,但是我在许多lldbinit文件中看到这个命令没有问题。

我搜索了这方面的信息和谷歌给了我绝对没有哪怕是一点点与之相关的,无论我怎么搜索。

其他说明:

- 应用是建立与调试信息。

- 要建立Xcode中,我创建了一个空项目,设置新方案的可执行调试到一个我建,并添加代码文件夹引用的代码浏览。

-I使用Xcode装订线添加断点。

- 我使用的MacOS 10.12 - 塞拉利昂,不是Linux,和Xcode的8.2.1。

- 如果我运行通过命令行LLDB和设置使用断点:乙filename.cpp:行,一切工作正常。即使尽管手动运行时出现'settings:command not found'错误,情况也是如此。但它在Xcode的可视化调试器中从不起作用。也许我被这个错误误导了?

-Breakpoints在包括其他基地.cpp文件做工精细,但不是在任何包含的。

感谢您的任何帮助。

command source ~/.lldbinit应该LLDB内运行。你从你的shell中运行它;该错误消息来自bash。(“settings”对bash没有任何意义)

settings set target.inline-breakpoint-strategy always当您的项目包含源文件(而不是头文件)时需要。这并不常见,所以它不是默认行为 - 它会降低调试器的性能,以扫描每个文件,如此处所需。它在https://lldb.llvm.org/troubleshooting.html的顶部被记录下来。大多数人不需要这个设置。

我不确定为什么Xcode中的断点,单击源代码编辑器的断点沟槽时正在工作。这可能是一个单独的问题。如果您启动项目,并暂停它,你可以在调试器控制台窗口做

(lldb) settings show target.inline-breakpoint-strategy 

,以验证它是always像你打算这样做。如果您的断点不起作用,我会先查看您的构建设置,然后查看您的某个构建设置是否不生成调试信息。

+0

感谢您的回复。这澄清了一些我不明白的事情。设置命令显然按预期工作,并被设置为“始终”。显然,我的问题完全是另一回事,我不知道是什么。我的构建生成调试信息,并且包含.cpp文件。 –

+0

尝试在Xcode中运行您的项目,在调试器中暂停,然后执行'breakpoint list'来查看Xcode究竟是如何指定文件名的。然后,尝试使用'target module dump line-table' * filename *作为源文件的基本文件名,以查看源文件的完整路径在调试信息中的样子。其中任何一个路径中都有'/../'s?您可能想要在http://bugreport.apple.com上提交所有这些详细信息的错误报告,并且可以在那里进行调试 - 可能是特定于项目文件编译方式的某些内容。 –

+0

我终于有机会测试这个。出于某种原因,目标模块转储线路表总是告诉我没有任何匹配。它甚至告诉我这个基本的.cpp文件能够正确解析断点。 “警告:没有匹配的源文件名' .cpp'。 错误:没有匹配任何命令参数的源文件名” –

好的,这个问题一直困扰着我,在过去的几天里,互联网上没有任何东西可以帮助 - 但我终于明白了!有意无意地 - 我摆弄东西,现在它的作用有一些完全神秘的原因。

这是Xcode的8 - MacOS的塞拉 - 2010年中期计算机

的问题:

在外部构建,突破点在主CPP文件的工作,但断点不工作的任何包含文件 - “#include”附带的cpp文件。 lldbinit设置无助于改善情况。

症状:

运行在包含文件中创建了一些新的断点程序,然后按在Xcode调试器的暂停键。 在LLDB控制台(屏幕右下角)中,输入: 断点列表 您会在它们结束时看到所有断开的断点都显示“位置= 0(待定)”。如果您从主文件添加工作断点,则会看到它显示“位置= 1”。

解决方案:

在项目经理,单击主项目文件,然后点击你的目标,转到“信息” - 因为我假设你能够正确地构建,你会在构建工具框中有你的build.sh文件的路径。但确保目录框是空的(我的参数框也是空的,但我怀疑这是相关的。)

一旦该目录框为空,build.sh将不再起作用,因为它无法找到你的文件。为了解决这个问题,你硬编码的路径,像这样:

clang++ -g -I/usr/local/include/SDL2 -lSDL2 /absolute/path/to/sdl_mygame.cpp -o /absolute/path/to/mygameexecutable 

现在的建筑工作,而神秘,现在您的断点所有的工作!

关于我的设置其他说明:

  • 我创造了这个项目作为一个外部构建
  • 我创建了一个目标,其 点到我的生成文件,并选中“通过建立 环境设置”
  • 我在Build下的我的Scheme中选择了这个目标。
  • 我选择的可执行文件在我的计划下运行,并检查调试 似乎可执行
  • 大多数其他Xcode的设置不会是必要的。
  • 我下面一起手工英雄

希望这有助于!