您的位置:首页 > 编程语言 > C语言/C++

C++ 获取当前正在执行的函数的相关信息

2012-04-30 00:49 525 查看
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)

很方便。

其他的,可能还有很多,本人孤陋寡闻,忘达人赐教。

C#获取当前运行的源代码的文件名和当前源代码的行数的方法

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();

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: