{
called();
}
void caller_TWO()
{
called();
}
void called()
{
//如何知道调用这个函数的函数名?
}
想知道called被谁调用了。
13 个解决方案
#1
第一种方法是在每一个函数里面都加入一些追踪函数进出的操作, 自己分析追踪的数据来获取.
还有一种方法, 在 called 里面可以获得这个函数执行完了后会返回到哪个地址上去, 用 DbgHelp.dll 加在生成这个代码的 pdb 文件, 就可以把地址翻译成对应的函数符号.
还有一种方法, 在 called 里面可以获得这个函数执行完了后会返回到哪个地址上去, 用 DbgHelp.dll 加在生成这个代码的 pdb 文件, 就可以把地址翻译成对应的函数符号.
#2
gdb调试,bt吧
#3
用pdb符号也太强了吧。如果都是自己写的代码,不如简单点:
或者定义全局变量,调用called()之前,设置自己的信息;
或者为called()增加一个const char* caller的参数,调用者填写这个参数,called就知道是谁调用自己了。
或者定义全局变量,调用called()之前,设置自己的信息;
或者为called()增加一个const char* caller的参数,调用者填写这个参数,called就知道是谁调用自己了。
#5
强大!长见识了~
#6
#define called printf(__FUNCTION__), called
这只是个思路,可能要根据实际使用情况进行调整
这只是个思路,可能要根据实际使用情况进行调整
#7
不用那么麻烦 直接用函数指针数组
#9
写日志就可以了
#10
char * 传进去
#11
不如果不操作, 不在调用函数加额外的参数的话,应该就比较困难的事情了
#12
看了大家提供的资料,受益匪浅。
大致总结一下:
1.传递参数或者每个函数去手工方式插庄工作量较大,可行性不大
2.看了【4 楼 zilaishuichina】Windows下的方式,也看了【8 楼 my_live_123】的linux的相关知识,通过Linux下反汇编看,可能可以从堆栈帧epb来处理;将ebp记录下来,然后根据epb去找函数名称。
大致总结一下:
1.传递参数或者每个函数去手工方式插庄工作量较大,可行性不大
2.看了【4 楼 zilaishuichina】Windows下的方式,也看了【8 楼 my_live_123】的linux的相关知识,通过Linux下反汇编看,可能可以从堆栈帧epb来处理;将ebp记录下来,然后根据epb去找函数名称。
#13
收藏。。。。。。。。。。
#1
第一种方法是在每一个函数里面都加入一些追踪函数进出的操作, 自己分析追踪的数据来获取.
还有一种方法, 在 called 里面可以获得这个函数执行完了后会返回到哪个地址上去, 用 DbgHelp.dll 加在生成这个代码的 pdb 文件, 就可以把地址翻译成对应的函数符号.
还有一种方法, 在 called 里面可以获得这个函数执行完了后会返回到哪个地址上去, 用 DbgHelp.dll 加在生成这个代码的 pdb 文件, 就可以把地址翻译成对应的函数符号.
#2
gdb调试,bt吧
#3
用pdb符号也太强了吧。如果都是自己写的代码,不如简单点:
或者定义全局变量,调用called()之前,设置自己的信息;
或者为called()增加一个const char* caller的参数,调用者填写这个参数,called就知道是谁调用自己了。
或者定义全局变量,调用called()之前,设置自己的信息;
或者为called()增加一个const char* caller的参数,调用者填写这个参数,called就知道是谁调用自己了。
#4
#5
强大!长见识了~
#6
#define called printf(__FUNCTION__), called
这只是个思路,可能要根据实际使用情况进行调整
这只是个思路,可能要根据实际使用情况进行调整
#7
不用那么麻烦 直接用函数指针数组
#8
linux下:gprof命令
http://blog.csdn.net/linquidx/article/details/5916701
http://blog.csdn.net/linquidx/article/details/5916701
#9
写日志就可以了
#10
char * 传进去
#11
不如果不操作, 不在调用函数加额外的参数的话,应该就比较困难的事情了
#12
看了大家提供的资料,受益匪浅。
大致总结一下:
1.传递参数或者每个函数去手工方式插庄工作量较大,可行性不大
2.看了【4 楼 zilaishuichina】Windows下的方式,也看了【8 楼 my_live_123】的linux的相关知识,通过Linux下反汇编看,可能可以从堆栈帧epb来处理;将ebp记录下来,然后根据epb去找函数名称。
大致总结一下:
1.传递参数或者每个函数去手工方式插庄工作量较大,可行性不大
2.看了【4 楼 zilaishuichina】Windows下的方式,也看了【8 楼 my_live_123】的linux的相关知识,通过Linux下反汇编看,可能可以从堆栈帧epb来处理;将ebp记录下来,然后根据epb去找函数名称。
#13
收藏。。。。。。。。。。