【发布时间】:2012-10-04 13:26:49
【问题描述】:
我们的日志框架,像大多数日志框架一样,使用 __FUNCTION__ 预处理器宏将当前函数插入到日志文件中,以便我们的日志看起来像:
L4 T11332 609661594 [PreProcessorFunctions::RegenerateLinkIDs] [ENTER]
L4 T11332 609661594 [PreProcessorFunctions::RegenerateLinkIDs] [EXIT]
L4 T11332 609661594 [ConfigMerger::ValidateConfigObject] [ENTER]
L3 T11332 609661594 [ConfigMerger::ValidateConfigObject] Configuration Exists: 1
随着我们开始更多地使用 C++11,我注意到 labmdas 会产生准确但无用的__FUNCTION__ 输出:
L4 T9604 609661594 [`anonymous-namespace'::<lambda1>::operator ()] Writing EMX config file: C:\windows\TEMP\CBE01448-32A2-493A-A9A1-2112F5709028\CA37BE5C-B398-4D61-980D-66B8E1E6D001\\EMXConfiguration.xml
L4 T11332 609661594 [`anonymous-namespace'::<lambda3>::operator ()] Writing Auditing config file: C:\windows\TEMP\CBE01448-32A2-493A-A9A1-2112F5709028\CA37BE5C-B398-4D61-980D-66B8E1E6D001\\Auditing.xml
L4 T11960 609661594 [`anonymous-namespace'::<lambda2>::operator ()] Writing UEM config file: C:\windows\TEMP\CBE01448-32A2-493A-A9A1-2112F5709028\CA37BE5C-B398-4D61-980D-66B8E1E6D001\\Configuration.xml
如您所见,所有类范围都已丢失,我们现在只知道该日志语句来自匿名 lambda。有没有人有注销封闭功能的好策略?这似乎是最有用的记录...
【问题讨论】:
-
stackoverflow.com/questions/4434282/…
__FUNCSIG__为 lambdas 提供了什么? -
哈哈,VS2012显示:
wmain::<lambda_1e128d225a05e0419a588b92f71b0e5a>::operator () -
至少它确实显示了封闭函数...
-
VS2012 也为
__FUNCTION__产生类似的输出,它更有帮助,因为至少它可以在日志中被操纵成有用的东西。