怎么在函数中打印出调用者的函数名称
如何在函数中打印出调用者的函数名称?
void caller_ONE()
{
called();
}
void caller_TWO()
{
called();
}
void called()
{
//如何知道调用这个函数的函数名?
}
想知道called被谁调用了。
------解决方案--------------------
第一种方法是在每一个函数里面都加入一些追踪函数进出的操作, 自己分析追踪的数据来获取.
还有一种方法, 在 called 里面可以获得这个函数执行完了后会返回到哪个地址上去, 用 DbgHelp.dll 加在生成这个代码的 pdb 文件, 就可以把地址翻译成对应的函数符号.
------解决方案--------------------
gdb调试,bt吧
------解决方案--------------------
用pdb符号也太强了吧。如果都是自己写的代码,不如简单点:
或者定义全局变量,调用called()之前,设置自己的信息;
或者为called()增加一个const char* caller的参数,调用者填写这个参数,called就知道是谁调用自己了。
------解决方案--------------------
可以参考我的博客
自己的底层代码库(八)——获取函数调用堆栈
------解决方案--------------------
强大!长见识了~
------解决方案--------------------
#define called printf(__FUNCTION__), called
这只是个思路,可能要根据实际使用情况进行调整
------解决方案--------------------
不用那么麻烦 直接用函数指针数组
------解决方案--------------------
linux下:gprof命令
http://blog.****.net/linquidx/article/details/5916701
------解决方案--------------------
写日志就可以了
------解决方案--------------------
char * 传进去
------解决方案--------------------
不如果不操作, 不在调用函数加额外的参数的话,应该就比较困难的事情了
void caller_ONE()
{
called();
}
void caller_TWO()
{
called();
}
void called()
{
//如何知道调用这个函数的函数名?
}
想知道called被谁调用了。
------解决方案--------------------
第一种方法是在每一个函数里面都加入一些追踪函数进出的操作, 自己分析追踪的数据来获取.
还有一种方法, 在 called 里面可以获得这个函数执行完了后会返回到哪个地址上去, 用 DbgHelp.dll 加在生成这个代码的 pdb 文件, 就可以把地址翻译成对应的函数符号.
------解决方案--------------------
gdb调试,bt吧
------解决方案--------------------
用pdb符号也太强了吧。如果都是自己写的代码,不如简单点:
或者定义全局变量,调用called()之前,设置自己的信息;
或者为called()增加一个const char* caller的参数,调用者填写这个参数,called就知道是谁调用自己了。
------解决方案--------------------
可以参考我的博客
自己的底层代码库(八)——获取函数调用堆栈
------解决方案--------------------
强大!长见识了~
------解决方案--------------------
#define called printf(__FUNCTION__), called
这只是个思路,可能要根据实际使用情况进行调整
------解决方案--------------------
不用那么麻烦 直接用函数指针数组
------解决方案--------------------
linux下:gprof命令
http://blog.****.net/linquidx/article/details/5916701
------解决方案--------------------
写日志就可以了
------解决方案--------------------
char * 传进去
------解决方案--------------------
不如果不操作, 不在调用函数加额外的参数的话,应该就比较困难的事情了