http://hi.baidu.com/hetaoos/blog/item/a1bfc3fc91a2c784b801a031.html
今天对C++ 工程里面的类里面的方法进行重新命名,发现以前写的一些调试信息也不得不修改:
如:
int main(int argc,char **argv)
{
cout<<"Running In Function main"<<endl;
}
输出的结果是:Running In Function main
以前,函数名是直接手动写到代码里面的,现在要改还数名,也要同时修改调试语句,这工程量蛮大的,就像找个一劳永逸 的方法。
在网上找到写相关的信息,现在总结下:
(我的运行环境:KUbuntu 8.04.1 x64 g++ 4.2.3)
主要通过宏来实现:(注意,开头和结尾都是两个下划线)
__PRETTY_FUNCTION __ 获取完整的函数头信息
void IPCoreConnect::IPCoreConfirmWrite(unsigned char *p, int k)
__func__ 或 __FUNCTION__ 获取函数名
IPCoreConfirmWrite
__FILE__ 获取文件的 获取源文件的相对路径和名字
/scr/main.cc
__LINE__ 获取该行代码在文件中的行号
现在原来的代码就可以改写成:
int main(int argc,char **argv)
{
cout<<"Running In "<<__PRETTY_FUNCTION __<<endl;
}
输出的结果是:Running In Function int main(int argc,char **argv)
很方便。
其他的,可能还有很多,本人孤陋寡闻,忘达人赐教。
http://blog.csdn.net/weizhiai12/article/details/7062854
在C#中记录日志时,为了以后查找错误或者跟踪的方便,最好能记录下出错的源代码的文件名和出错的源代码的行数。
这2个方法如下:
/// <summary>
/// 取得当前源码的哪一行
/// </summary>
/// <returns></returns>
public static int GetLineNum()
{
System.Diagnostics.StackTrace st = new System.Diagnostics.StackTrace(1, true);
return st.GetFrame(0).GetFileLineNumber();
}
/// <summary>
/// 取当前源码的源文件名
/// </summary>
/// <returns></returns>
public static string GetCurSourceFileName()
{
System.Diagnostics.StackTrace st = new System.Diagnostics.StackTrace(1, true);
return st.GetFrame(0).GetFileName();
}