Xcode 当我';我正在调试并跳过?

Xcode 当我';我正在调试并跳过?,xcode,debugging,Xcode,Debugging,我没有选中“Show Disassembly”,但经过几步之后,它仍然会显示出来。这可能是使用发行版配置而不是调试编译的代码。在这种情况下,Xcode更难将机器指令与源代码行关联起来。“#line”宏也会对编译造成严重破坏 一些应用程序使用“预生成”(缺少更好的术语)源文件集, 在我的例子中,“yacc”/“bison”或“lex”/“flex”。 编译器(Xcode 6.2)采用一组参数行(根据应用程序进行自定义) 并将它们插入预生成的源文件中,生成中间阶段源文件 输入最终的源代码 当它这样做


我没有选中“Show Disassembly”,但经过几步之后,它仍然会显示出来。

这可能是使用发行版配置而不是调试编译的代码。在这种情况下,Xcode更难将机器指令与源代码行关联起来。

“#line”宏也会对编译造成严重破坏

一些应用程序使用“预生成”(缺少更好的术语)源文件集, 在我的例子中,“yacc”/“bison”或“lex”/“flex”。 编译器(Xcode 6.2)采用一组参数行(根据应用程序进行自定义) 并将它们插入预生成的源文件中,生成中间阶段源文件 输入最终的源代码

当它这样做时,它会添加行号,将“中间阶段”源代码行与您的 用于调试的原始源代码行

不幸的是,它把事情搞砸了。
例如: 我的源代码文件“syntax.ym”用于生成中间阶段的源文件“syntax_bison.m”。 ------但在中间状态文件中,它放置了两个不同的文件名,如下所示-- …代码… typedef联合

第49行“syntaxer.ym” …一些代码… …更多的代码。。。 /*yacc.c第193行*/

第849行“syntaxer_bison.m” …更多的代码。。。 ---第一段的结尾---

在进行最终编译时,这会在Xcode中的某些位置将调试符号搞砸

如果您只看到程序集,并且代码中有“#行”,请注释掉这些行, i、 e.将“#行”替换为“//#行”。您仍然可以将这些信息与原始信息联系起来 编译时,Xcode不会破坏调试信息

使用全局查找和替换来搜索“#行”并替换为“/#行”

修改后的源代码如下所示

------第二段开头,注释行-- …代码… typedef联合 //#第49行“syntaxer.ym” …一些代码… …更多的代码。。。 /*yacc.c第193行*/ //#第849行“syntaxer_bison.m” …甚至更多的代码。。。 ---第一段的结尾---

编译后,调试器现在显示我的“中间阶段”c代码,除非我手动选择“显示反汇编” 选项,我看到我的C或目标C代码没有问题

我希望这有帮助
问候

你确定你是在越级而不是越级吗?这是一个有趣的技巧,在Xcode 9中仍然有效。与生成的解析器C框架的汇编形式相比,步进生成的解析器C框架要好得多,即使这些汇编行是用注释形式的大量C源代码注释的。