如何在运行阶段获取函数的参数个数,以及函数参数的值?

yuanzhanghu 2009-02-27 07:03:12
我想实现的功能是在每调用一个函数时,自动打印当前执行到的函数名称,函数参数。

举个例子:
void test1(char c1, char c2, char c3, char c4)
{
//运行过程中,如何知道本函数有4个参数,并打印这4个参数的值?
//我需要的是一个运行过程中获取的方法, 而不是在代码阶段的printf
}
void test2(char c1, char c2, char c3)
{
//运行过程中,如何知道本函数有3个参数,并打印这3个参数的值?
//我需要的是一个运行过程中获取的方法, 而不是在代码阶段的printf
}

我知道有__func__可以获取当前函数的名称, 有类似的方法获取函数参数个数和参数的值么?   
能获取参数的名称和值更好, 如果不能获取参数名称,获取参数值也行。
...全文
267 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
bat603 2010-05-19
  • 打赏
  • 举报
回复
还是没有结果啊,期待达人释疑?
winnergo 2009-02-27
  • 打赏
  • 举报
回复
一般来讲,函数调用的时候会将参数与局部变量都放置在栈中,不同的编译器以及不同的机器指令集,其操作是不太一样的
对于gcc来讲,根据当前的栈帧指针可以回溯整个调用栈的调用函数地址以及参数,局部变量地址,如果是-g版本,可以根据调试信息将这些对应关系给找出来
如果是程序运行过程中,glibc有backtrace与相关的函数
我知道的信息就有这么多了,应该还是有办法知道的参数,需要进一步研究了
yuanzhanghu 2009-02-27
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 waizqfor 的回复:]
这东西依赖编译器的 你去看看MSDN的上有宏的说明 估计可能有吧
不怎么常用
[/Quote]

我想在C里面实现, 不是VC。
yuanzhanghu 2009-02-27
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 Darkneece 的回复:]
用va_list行不行?
[/Quote]

va_list只是一个指针, 可以指到第一个参数首地址, 无法确认参数的个数和每个参数的大小。

所以不行。
ForestDB 2009-02-27
  • 打赏
  • 举报
回复
函数名可以用那个宏,参数暂时没发现有这样的设施。
waizqfor 2009-02-27
  • 打赏
  • 举报
回复
[Quote=引用楼主 swore2 的帖子:]
我想实现的功能是在每调用一个函数时,自动打印当前执行到的函数名称,函数参数。

举个例子:
void test1(char c1, char c2, char c3, char c4)
{
//运行过程中,如何知道本函数有4个参数,并打印这4个参数的值?
//我需要的是一个运行过程中获取的方法, 而不是在代码阶段的printf
}
void test2(char c1, char c2, char c3)
{
//运行过程中,如何知道本函数有3个参数,并打印这3个参数的值?

[/Quote]
这东西依赖编译器的 你去看看MSDN的上有宏的说明 估计可能有吧
不怎么常用
yuanzhanghu 2009-02-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 hhyttppd 的回复:]
运行时你就不要考虑了,那是不可行的,你还是想想在编译期之前如何解决吧
[/Quote]

如何在编译期之前解决? 大侠给个方法吧?

总之要实现:
在每调用一个函数时,自动打印当前执行到的函数名称,函数参数。
nineforever 2009-02-27
  • 打赏
  • 举报
回复
这需要依赖调试信息,可以从pdb中读取
hhyttppd 2009-02-27
  • 打赏
  • 举报
回复
运行时你就不要考虑了,那是不可行的,你还是想想在编译期之前如何解决吧
过去的我 2009-02-27
  • 打赏
  • 举报
回复
觉得可以看一下profile是如何实现的
arong1234 2009-02-27
  • 打赏
  • 举报
回复
这依赖于编译器。VC2003以上似乎有__FUNCTION__(不是你说的那个),但是没有盒参数有关的
Darkneece 2009-02-27
  • 打赏
  • 举报
回复
用va_list行不行?

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧