假设您的C++编译器支持__FILE__
、__LINE__
和__FUNCTION__
,那么有什么特殊的理由不使用它们来进行日志记录和调试吗?
我主要关心的是给用户提供误导性的数据-例如,由于优化而报告不正确的行号或函数-或者因此导致性能损失。
基本上,我可以相信__FILE__
、__LINE__
和__FUNCTION__
总是做正确的事情吗?
发布于 2009-02-28 13:37:40
仅供参考: g++提供了非标准__PRETTY_FUNCTION__宏。直到现在我才知道C99 __func__ (谢谢埃文!)。我认为当__PRETTY_FUNCTION__可用于额外的类作用域时,我仍然更喜欢它。
PS:
static string getScopedClassMethod( string thePrettyFunction )
{
size_t index = thePrettyFunction . find( "(" );
if ( index == string::npos )
return thePrettyFunction; /* Degenerate case */
thePrettyFunction . erase( index );
index = thePrettyFunction . rfind( " " );
if ( index == string::npos )
return thePrettyFunction; /* Degenerate case */
thePrettyFunction . erase( 0, index + 1 );
return thePrettyFunction; /* The scoped class name. */
}
发布于 2009-02-27 23:30:38
就我个人而言,我不愿意将它们用于调试消息之外的任何事情。我已经这样做了,但我尽量不向客户或最终用户显示这种信息。我的客户不是工程师,有时也不精通电脑。我可能会将此信息记录到控制台,但是,正如我所说的,除非是为了调试构建或内部工具,否则是不情愿的。不过,我想这取决于你拥有的客户基础。
发布于 2015-02-05 13:36:27
我一直在用它们。我唯一担心的是泄露日志文件中的IP。如果你的函数名真的很好,你可能会让一个商业秘密更容易被揭开。这有点像附带调试符号,只是更难找到一些东西。在99.999%的情况下,不会有什么坏事发生。
https://stackoverflow.com/questions/597078
复制相似问题