【问题标题】:How to debug macro-generated methods in Xcode/LLDB?如何在 Xcode/LLDB 中调试宏生成的方法?
【发布时间】:2013-09-17 20:04:28
【问题描述】:

我有一些由宏生成的方法。我可以在“预处理”伴侣中看到代码,它编译并运行良好。我可以逐步完成拆卸,但这并不好玩。对于写在一行上的多个语句,似乎也存在类似的问题。有什么解决办法吗?

【问题讨论】:

    标签: xcode lldb


    【解决方案1】:

    正如您所经历的那样,宏很难调试。

    那是因为它们在编译开始之前(由预处理器)被扩展,所以当 clang/gcc/icc/whatever 看到你的代码,然后为它生成调试信息,包括行表,没有留下任何痕迹宏。

    这个问题不是 LLDB 特有的,更普遍的原因是 C/C++/ObjC 编译模型的性质,它带有一个预处理器,然后是一个单独的编译器,其中只有后者有助于生成调试信息,而只有前者看到宏。

    【讨论】:

    • 我意识到这一点,但 Xcode 有一个用于预处理器输出代码的配套选项卡。我希望至少能够调试那个
    • 基本上,规则是您将能够调试编译器看到的任何源代码并为其发出调试信息。在存在宏的情况下,我希望行表不能完全匹配您的源代码,尤其是多行宏。我不确定预处理输出代码的 UI 故事是什么。如果你觉得 Xcode 可以做得更好,你绝对可以在 bugreport.apple.com 提出这样的请求
    • 我想我会的。一个后续问题:LLDB 可以调试位于一行的多个语句吗?因为这也是我无法让 Xcode 做的事情。
    • 我相信目前clang不会发出包含列信息的行表。缺少这些信息,并且根据 LLDB 和 Xcode UI 的支持,调试器将重复突出显示整个源代码行,因此您实际上应该能够逐步执行您的多个语句,但很可能无法看到每个单独突出显示的语句。
    • 没有飞车也能活,但没有宏调试?悲伤:-(
    猜你喜欢
    • 2013-02-26
    • 1970-01-01
    • 2013-05-16
    • 1970-01-01
    • 2012-10-01
    • 2013-03-30
    • 1970-01-01
    • 2011-10-01
    相关资源
    最近更新 更多