如何在Xcode/LLDB中调试由宏生成的方法?

4

我有几个方法是由宏生成的。我可以在“预处理”伴侣中看到代码,它可以编译和运行良好。我可以逐步执行反汇编,但这样做并不好玩。同样的问题似乎也存在于写在单行上的多个语句中。有什么解决方法吗?

1个回答

2
宏很难调试,您正在经历这种情况。这是因为它们在编译开始之前(由预处理器)被扩展,所以当clang / gcc / icc /任何其他编译器看到您的代码并生成调试信息(包括行表)时,宏已经消失了。问题不是LLDB特有的,而是C / C ++ / ObjC编译模型的本质问题,其中有一个预处理器和一个单独的编译器,只有后者会对调试信息生成做出贡献,而只有前者能看到宏。

我意识到这一点,但是Xcode有一个预处理器输出代码的伴侣选项卡。我希望至少能够调试那个 - Vladimir Gritsenko
基本上,规则是您将能够调试编译器看到并发出调试信息的任何源代码。在宏的存在下,我预计行表可能无法完全匹配您的源代码,特别是多行宏。我不确定预处理输出代码的用户界面故事是什么。如果您认为Xcode可以做得更好,您绝对可以在bugreport.apple.com上提交此类请求。 - Enrico Granata
那我猜我会这样做。接下来一个问题:LLDB能否调试单行上的多个语句?因为我在Xcode中也无法实现这一点。 - Vladimir Gritsenko
我相信目前的clang不会生成包含列信息的行表。缺少这些信息,根据LLDB和Xcode UI的支持,调试器将重复突出显示整个源代码行,因此您实际上应该能够逐步执行多个语句,但很可能无法看到每个语句单独突出显示。 - Enrico Granata
2
我可以没有飞行汽车,但没有宏调试?悲伤 :-( - Vladimir Gritsenko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接