繁体   English   中英

xcode断点未使用包含的cpp文件解析 - MacOS

[英]xcode breakpoints not resolved with included cpp files - MacOS

更新 :根据Jason Molenda给出的答案,我意识到设置命令根本不是问题 - 它正在被正确读取并且具有正确的值,但是仍然没有解决断点。 我已经更改了主题名称以更准确地适应问题。

问题摘要:我包含cpp文件,当使用gutter设置断点时,Xcode无法解析它们,应用程序是在外部构建的(不是在Xcode中开发),而我的.lldbinit已经设置了target.inline-breakpoint-strategy always set 。

以前的版本 :我的问题是我无法让Xcode的调试器在包含的.cpp文件中断点(来自外部构建的应用程序,只是尝试使用Xcode作为调试器)。

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

设置始终设置target.inline-breakpoint-strategy

而我做到了。 它似乎根本没有阅读,也没有改变任何东西。 使用以下命令自行运行命令:

命令源〜/ .lldbinit

它告诉我:

-bash:settings:找不到命令

我不明白为什么它无法弄清楚'settings'命令。 我将补充一点,我对该文件应该如何工作知之甚少,但我看到这个命令在许多lldbinit文件中使用没有问题。

我搜索了有关这方面的信息,无论我如何搜索,谷歌都给了我一些与它无关的信息。

其他说明:

- 应用程序是使用调试信息构建的。

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

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

- 我正在使用MacOS 10.12 - Sierra,而不是Linux,以及Xcode 8.2.1。

- 如果我通过命令行运行LLDB并使用:b filename.cpp:line设置断点,一切正常。 即使我手动运行时遇到'settings:command not found'错误,也是如此。 但它从未在Xcode的可视化调试器中运行。 也许我被这个错误误导了?

-Breakpoints在包含其他文件的基本.cpp文件中正常工作,但不包含在任何包含的文件中。

谢谢你的帮助。

好吧,这个问题在最近几天一直困扰着我,互联网上几乎没有什么可以帮助 - 但我终于明白了! 有点意外 - 我摆弄了东西,现在它起作用了一些完全神秘的原因。

这是针对Xcode 8 - macOS Sierra - 2010年中期的计算机

问题:

在外部版本中,断点适用于主cpp文件,但断点不适用于任何包含的文件 - “#include”附带的cpp文件。 lldbinit设置无助于改善这种情况。

症状:

使用在包含的文件中创建的一些新断点运行程序,然后按xcode调试器中的pause键。 在LLDB控制台(屏幕右下角)中,键入:断点列表您将看到所有断开的断点在其末尾显示“location = 0(pending)”。 如果您从主文件添加工作断点,您将看到它显示“location = 1”。

解:

在项目管理器中,单击主项目文件,然后单击您的目标,转到“信息” - 因为我假设您能够正确构建,您将在Build中获得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中选择了这个目标。
  • 我在运行的程序中选择了可执行文件并检查了Debug Executable
  • 大多数其他xcode设置似乎没有必要。
  • 我跟随手工制作的英雄

希望这可以帮助!

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

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

我不确定为什么Xcode中的断点,当你点击源编辑器的断点gutter时,正在工作。 这可能是一个单独的问题。 如果您启动项目并暂停它,则可以执行此操作

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

在调试器控制台窗口中验证它always像你想要的那样。 如果您的断点不起作用,我将首先查看您的构建设置,并查看您的某个构建设置是否未生成调试信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM