如何在函数中打印出调用者的函数名称?
void caller_ONE()
{
called();
}
void caller_TWO()
{
called();
}
void called()
{
//如何知道调用这个函数的函数名?
}
想知道called被谁调用了。
[解决办法]
第一种方法是在每一个函数里面都加入一些追踪函数进出的操作, 自己分析追踪的数据来获取.
还有一种方法, 在 called 里面可以获得这个函数执行完了后会返回到哪个地址上去, 用 DbgHelp.dll 加在生成这个代码的 pdb 文件, 就可以把地址翻译成对应的函数符号.
[解决办法]
gdb调试,bt吧
[解决办法]
用pdb符号也太强了吧。如果都是自己写的代码,不如简单点:
或者定义全局变量,调用called()之前,设置自己的信息;
或者为called()增加一个const char* caller的参数,调用者填写这个参数,called就知道是谁调用自己了。
[解决办法]
可以参考我的博客
自己的底层代码库(八)——获取函数调用堆栈
[解决办法]