有没有办法调试宏?

时间:2016-04-28 23:09:12

标签: objective-c xcode debugging

我有一个遗留应用程序,其中包含一组在预编译头文件中定义为宏的全局单例:

#define myGlobalState [MyGlobalState getInstance]
#define settingsManager [SettingsManager getInstance]

有没有办法可以从调试器repl中访问这些单例?

1 个答案:

答案 0 :(得分:2)

  

我有什么方法可以从内部访问这些单身人士   调试器repl?

所以,首先,他们不是单身人士。它们是每次使用宏时都会得到评估的表达式。不幸的是,那个。

其次,以get为前缀?这是一个明确的信号,表明代码库是由不熟悉Objective-C的人创建的,并且表明该设计可能存在其他重大问题。

最后,最简单的解决方案 - 但它改变行为 - 是创建名为myGlobalStatesettingsManager的实际全局变量,在应用程序或库的某个初始化阶段设置它们,并摆脱它们共有#define个。这将使它们在调试器中可用,并且可能使行为更接近原作者的意思。

或者(并且,可以说是更好的解决方案),将get方法重命名为sharedInstance(因为它们应该是),然后查找并替换所有myGlobalState [MyGlobalState sharedInstance]的实例,并完全取消宏。

对于前者,您可以直接在调试器中使用全局。对于后者,您必须在调试器中评估[MyGlobalState sharedInstance],但这不是什么大问题。

(并且,是的,您可以在调试器中评估[MyGlobalState getGlobalState],将所有错误命名的内容单独留下并将其称为一天。)