我没有选中“显示反汇编”,但经过几步之后仍然会出现。
2 回答
这可能是使用 Release 配置而不是 Debug 编译的代码。在这种情况下,Xcode 更难将机器指令与源代码行关联起来。
“#line”宏也会对编译造成严重破坏
一些应用程序使用“预生成”(没有更好的术语)源文件集,在我的例子中是“yacc”/“bison”或“lex”/“flex”。编译器 (Xcode 6.2) 采用一组参数行(根据您的应用程序定制)并将它们插入到预先生成的源文件中,并生成一个中间源文件以输入到您的最终源代码中。
当它这样做时,它会添加将“中期”源代码行与原始源代码行相关联的行号以进行调试。
不幸的是,它搞砸了。
例如:我的源代码文件“syntax.ym”用于生成中间源文件“syntax_bison.m”。—————— 但是在中间状态文件中它放置了 2 个不同的文件名,如下所示 —— … code … typedef union
第 49 行“syntaxer.ym”</h1>
… 一些代码 … … 更多代码 … /* yacc.c 的第 193 行 */
第 849 行“syntaxer_bison.m”</h1>
… 更多代码 … ——— 第一个片段结束 ———</p>
在进行最终编译时,这会在 Xcode 中的某些地方弄乱调试符号。
如果您只看到汇编并且在您的代码中有“#line”,请注释掉这些行,即将“#line”替换为“//#line”。您仍然可以获得与原始源代码相关的信息,并且 Xcode 不会在编译时搞砸调试信息。
使用全局查找和替换来搜索“#line”并替换为“//#line”。
我修改后的源代码如下
—————— 第二个片段的开始,带有注释的行 —— ... code ... typedef union // #line 49 “syntaxer.ym” ... some code ... ... 更多 code ... /* yacc.c 的第 193 行*/ // #line 849 “syntaxer_bison.m” ... 更多代码 ... ——— 第一个片段结束 ———</p>
编译调试器后,现在显示我的“中期”c 代码,除非我手动选择“显示反汇编”选项,否则我会看到我的 C 或 Objective C 代码没有问题。
我希望这会有所帮助