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