当我调试并跳过时,如何阻止Xcode向我显示这种汇编语言?

时间:2013-05-12 22:14:22

标签: xcode debugging

enter image description here

我没有选中“显示反汇编”,但经过几步之后,这仍然显示出来。

2 个答案:

答案 0 :(得分:1)

这可能是使用Release配置而不是Debug编译的代码。在这种情况下,Xcode更难以将机器指令与源代码行相关联。

答案 1 :(得分:1)

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

某些应用程序使用“预生成”(缺少更好的术语)源文件集, 在我的情况下“yacc”/“bison”,或“lex”/“flex”。 编译器(Xcode 6.2)采用一组参数线(自定义到您的应用程序) 并将它们插入预先生成的源文件并生成中期源文件 提供最终的源代码。

当它执行此操作时,它会添加与“中段”源代码行相关的行号 用于调试的原始源代码行。

不幸的是它搞砸了。
 例如: 我的源代码文件“syntax.ym”用于生成中期源文件“syntax_bison.m”。 ------但在中间状态文件中它放置了2个不同的文件名,如下所示 - ......代码...... typedef union

第49行“syntaxer.ym”

...一些代码...... ......更多代码...... / * yacc.c * /

的第193行

第849行“syntaxer_bison.m”

...更多代码...... ---第一段摘录---

这个SCREWS向上调试符号在Xcode中进行最终编译时的某些位置。

如果您只是在组装中并且在代码中包含“#line”,请注释掉这些行, 即将“#line”替换为“//#line”。您仍然可以获得与您的原始信息相关的信息 源代码,Xcode在编译时不会搞砸调试信息。

使用GLOBAL FIND和REPLACE搜索“#line”并替换为“//#line”。

修改后的源代码如下所示

------第二段片段的开头,用线条评论 - ......代码...... typedef union // #line 49“syntaxer.ym” ......一些代码...... ......更多代码...... / * yacc.c的第193行* / // #line 849“syntaxer_bison.m” ......更多代码...... ---第一段摘录---

编译后,调试器现在显示我的“中期”c代码,除非我手动选择“show disassembly” 选项,我看到我的C或Objective C代码没有问题。

我希望这会有所帮助 此致