【问题标题】:How do I stop Xcode from showing me this assembly language when I'm debugging and step over?当我调试和跳过时,如何阻止 Xcode 向我显示这种汇编语言?
【发布时间】:2015-05-06 04:17:05
【问题描述】:

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

【问题讨论】:

  • 你确定是跨过去而不是跨过去?

标签: xcode debugging


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

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

    第 49 行“syntaxer.ym”

    …一些代码… ......更多的代码...... /* yacc.c 的第 193 行 */

    第 849 行“syntaxer_bison.m”

    ...更多代码... ——— 第一个 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 代码没有问题。

    我希望这会有所帮助 问候

    【讨论】:

    • 这是一个有趣的技巧,在 Xcode 9 中仍然有效。步进生成的解析器 C 骨架比它的汇编形式要好得多,即使这些汇编行在意见表。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多