xcode 10调试器在某些断点上停止,而在某些断点上则不停止

问题描述 投票:0回答:1

正在工作的断点定义了两次(我不知道它们是如何或为什么被创建两次)。编辑这些断点时,条件项有两个单选按钮。第一个是文本:“使用父断点条件,未设置”。另一个单选按钮靠近条件的“经典”文本字段。不起作用的断点只有条件的文本字段。我找不到任何相关的文档。我的问题:是什么让我产生一种断点而另一种断点?这是一个错误吗? (只有工作的,应该制作单选按钮?)。我不清楚。文本是什么意思:“使用未设置的父断点条件”?什么是父断点?为什么他们 - 当工作 - 由对生产?实际上设置一个工作断点似乎对我来说是随机的。有没有人有同样的问题?

xcode debugging breakpoints
1个回答
0
投票

Xcode断点显示镜像lldb处理封底下的断点的方式。

lldb断点分为两部分。

第一部分是“断点规范” - 例如“文件foo.c的第12行”或“名为foo的符号”。 lldb还允许更广泛的搜索规范,如“任何匹配正则表达式的函数名称”(break set -r),甚至“匹配给定正则表达式的任何源代码行”(break set -p),尽管Xcode没有这些更高级的用户界面。

Xcode显示中断点的根节点表示断点规范。

每个规范都可以解析为您的应用程序生成的代码中的一个或多个位置。例如,如果断点位于头文件中的可内联函数中,则会发生这种情况,该函数会将代码发送到包含头文件的每个编译单元并使用该函数。或者您是否设置了符号断点,并且该名称显示在多个共享库中。当您在源行上设置断点时也会发生这种情况

for (i = foo(); i < bar(); i += baz()) {

因为该源代码行贡献的代码在for循环的评估的三个不同部分中运行。

因此,Xcode中每个断点列表的子节点向您显示生成的代码中与断点规范匹配的各个位置。

如果断点没有位置节点,则意味着lldb无法在代码中找到与规范匹配的任何位置。如果您发出以下内容,有时可以更清楚地看到这一点:

(lldb) break list

lldb控制台中的命令。

我无法分辨为什么,根据您的描述,您的某些断点不会解析为代码中的位置。例如,如果在没有调试信息的情况下构建的源文件中设置了断点,就会发生这种情况。如果源位置在条件失败的某些#ifdef之间,则会发生这种情况,因此不会为这些行发出代码。我需要更多细节来了解你的特定断点为什么不能解决。

© www.soinside.com 2019 - 2024. All rights reserved.