【问题标题】:Will the macros __FILE__, __LINE__ and __PRETTY_FUNCTION__ work irrespective of the build type?无论构建类型如何,宏 __FILE__、__LINE__ 和 __PRETTY_FUNCTION__ 都可以工作吗?
【发布时间】:2018-03-03 08:45:47
【问题描述】:

我想使用 Objective-C 宏 __LINE____PRETTY_FUNCTION__ 在运行时记录一些信息。有许多工具可以提供故障转储的详细信息,但就我而言,我想分析远程数据库条目,例如记录输入的方法和操作系统(Android 或 iOS)。

我不熟悉宏 __LINE____PRETTY_FUNCTION__ 尽管它们适用于我当前的构建配置(非 App Store),但我不确定当构建配置更改时它是否会继续工作。

在进行不同的构建时,信息是否会持续存在,例如不包含调试符号的发布构建?

使用位码构建 App Store 会对此产生影响吗?

【问题讨论】:

  • 顺便说一句:您可以“处理...”并在 Xcode 中显示预处理器输出。这将向您展示后预编译器源代码的样子。它......罗嗦......而且信息量很大。

标签: objective-c preprocessor bitcode


【解决方案1】:

在编译之前,这些宏在预处理期间被实际值替换。

我不确定在生产中使用它们是否是个好主意,但它们肯定会起作用。它们不需要调试符号(它们是源代码的一部分),也不关心您如何签署应用程序包。

【讨论】:

  • 也许在 Objective-C 中(并且仅用于方法)打印 cmd[self class] 是一个更好的解决方案。 [[NSThread currentThread] callStackSymbols] 可以添加其他信息,即。 e.用于缩进。只是一个想法……
  • @AminNegm-Awad cmd__FUNCTION__ 在实践中是相同的。如果没有调试符号,callStackSymbols 将无法工作。
  • 我提到了callStackSymbols的缩进,它不需要调试符号。 cmd独立于flags、编译模式等,所以使用它,让整个Q变得毫无意义。 (但是,IIRC,您可以拥有独立于编译模式的完整调试符号。)
猜你喜欢
  • 1970-01-01
  • 2011-05-24
  • 1970-01-01
  • 2013-10-21
  • 1970-01-01
  • 2015-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多