在Xamarin.iOS发布版本中,Console.WriteLine调用会发生什么?

时间:2016-08-28 19:38:31

标签: ios debugging xamarin console

使用XCode开发iOS应用程序时,您可以使用NSLog调用将信息写入控制台进行调试。在Xamarin.iOS中,可以使用Console.WriteLine完成相同的操作。

在运行应用程序的发布版本时,如果没有附加调试器,这些调用没有任何意义。所以我想用预处理器指令排除它们:

#if DEBUG
Console.WriteLine("foo");
#endif

这样调用在发布版本中甚至不存在。我很欣赏这可能是微优化 - 但我很好奇Xamairn是否已经这样做了,这使得这不必要了吗?

1 个答案:

答案 0 :(得分:6)

iOS版本中未删除

Console输出。

仅供参考:Xcode也不会“自动”从Obj-C / Swift“发布”代码中删除NSLogprint。 (如果需要,您通常会定义一个全局预处理器宏来全部删除它们。)

您的选择很多......包括:

    您在问题中显示的
  • DEBUG预处理器。

  • 使用System.Diagnostic.Debug.WriteLine

  

由于应用了[条件(“DEBUG”)]属性,编译器将删除对Debug。*的任何调用。

  • 创建您自己的“Logger”类作为stdout作家的包装,[Conditional("DEBUG")]

  • 使用Fody并重新编织程序集以删除/ NOP /重定向WriteLine

    • 我这样做是为了将调用重定向到内部日志中,在崩溃或用户状态请求时,将此日志转发给我们的崩溃报告服务器。
  • 等,.....

参考:Xamarin的NSLogWriter助手等级