NS_INLINE和Xcode调试器

时间:2009-12-13 05:47:26

标签: objective-c xcode gdb inline

单步执行使用NSGeometry.h中任何NS_INLINE函数的代码会导致调试器与当前指令指针失去同步,从而使调试例程变得非常困难。

我在我的实现文件的顶部尝试了#undef NS_INLINE,在预编译的头文件中#define NS_INLINE,寻找编译指示,编译器开关等,但无论如何,这些函数总是在内联编译我的调试版本。

FWIW - NSMakeRect,NS_MakeSize等全部内联编译。

问题是,如何让NS_INLINE编译为空?

2 个答案:

答案 0 :(得分:1)

NS_INLINE包含在#if !defined(NS_INLINE)中。您只需要在包含Foundation标头之前适当地定义它。看一下原始声明,您可能只需要删除__attribute__((always_inline))以便调试器捕获您的符号(假设您正在生成所有调试符号并运行调试版本 - 如果没有,那么您可以做一点更多的工作是让它们全部可见。理想情况下,您只需在项目/组/库本地创建自己的标签,这样您就可以更轻松地调试自己的代码。

答案 1 :(得分:0)

这真的是关于内置API函数的步骤,还是你想在自己的代码中做类似的事情?如果是前者,是因为好奇心还是调试的其他原因?如果是后者,我建议在调试时注释掉NS_INLINE。如果您正在尝试更改现有API函数的内联行为,您可能会感到失望,并且可能有更好的方法来实现它。如果你的意图是其他的,请澄清,以便我们能够充分回答。