xcode 10调试器在某些断点处停止,在其他一些断点处停止

时间:2019-02-15 18:30:05

标签: xcode debugging breakpoints

工作的断点定义了两次(我不知道如何或为什么两次创建断点)。当编辑这些断点时,条件项具有两个单选按钮。第一个是上面的文字:“使用父断点条件,未设置”。另一个单选按钮位于该条件的“经典”文本字段附近。无效的断点只有条件的文本字段。我找不到与此相关的任何文档。我的问题:是什么使我产生一种断点而又产生一种断点?是虫子吗? (只应显示带有单选按钮的工作中的一个?)。我不清楚。文本是什么意思:“使用未设置的父断点条件”?什么是父断点?为什么它们在工作时由一对生产?实际上设置一个工作断点似乎对我来说是随机的。有人有同样的问题吗?

1 个答案:

答案 0 :(得分: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之间,则不会发生这些行的代码,则可能会发生这种情况。我需要更多详细信息,以了解为何无法解决您的特定断点。

相关问题