当前位置:  技术问答>linux和unix

俺需要实现这样的功能:一个宏放在return前,把本函数中的入参都记录下来,当然不希望调用者传入参数,谢谢

    来源: 互联网  发布时间:2016-06-04

    本文导语:  我有这样一个BT的想法: SYSTRACE(CHAR * szFmt,...) {     在这里面,把用户传入的变参,解析一下记录在szFmt里面。 } 不过需要调用者每一次自己写szFmt,并依次传入各个参数, 能否在C语言的层面上实现此功能函数,而...

我有这样一个BT的想法:
SYSTRACE(CHAR * szFmt,...)
{
    在这里面,把用户传入的变参,解析一下记录在szFmt里面。
}
不过需要调用者每一次自己写szFmt,并依次传入各个参数,
能否在C语言的层面上实现此功能函数,而不要关系CPU,寄存器等硬件信息。

|
我觉得你自己的方案就可行(且具有可移植性)  只是每次都要自己写 格式字符串,以及把形参重新传入。

fetag的方案我觉得不好,
1. 要动用汇编 (当然你可以用C取第一个参数地址 然后根据入栈顺序 一个一个取 不过都不具可移植性)
2. 你总要有方法来实现知道取几个
3. 即使类似于char *之类的,只能打印出地址,在我看来意义不大。


|


没看得很明白你的意思。
纯粹用CHAR * szFmt来记录va_list很容易啊。

SYSTRACE(CHAR * *szFmt,...)  传2维指针, szFmt在函数体外分配空间,SYSTRACE里面把变参写入szFmt就是啦。

|
貌似一般都放在函数入口处,以免中间修改了入口参数吧...

|
这个需求很容易实现啊,只要在函数入口出直接读取堆栈里面的内容然后保存到文件就可以了

|
不知道C99里有没有类似 __FUNC__ 的宏(用于表达函数的参数)供你使用,没有的话估计够呛,去查查吧。你要是编译器还不支持C99就基本无望了....

|
好象perl里有个shift函数有这个功能 

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 调用数学函数,需要调用哪个函数库?
  • 请问师傅们这个类为什么没有构造函数呀?什么样的类不需要构造函数?
  • 程序需要检测超时,我该用什么函数?
  • Linux下怎么使用findfirst函数?需要包含什么头文件?
  • 编译socket程序需要加什么库函数?
  • 怎么知道哪些函数需要连接什么库,如memset,sleep等等
  • 求助 请问vxworks支持inet_ntoa函数吗? 需要包含哪些头文件? 谢谢
  • 想编写程序实现aix下prtonf的功能,即获取系统硬件配置,需要用到哪些函数?
  • 关于硬盘分区函数fdisk -l 这个需要下载什么吗?
  • 为什么调用很多linux下的函数时需要包含多个头文件?
  • 谁帮我看一下下面几个实现函数需要实现要用到什么函数?在线等待,必给分!
  • 请教:修改Linux内核时,需要调用驱动程序的函数,头文件也包含了,但是编译时候说头文件找不到!
  • 在Linux上用C语言编写的函数里面申请了一块内存,并且返回这块内存,最终它需要释放吗?
  • Linux ioctl函数需要发送指令的SCSI命令
  • 现在在嵌入式系统中需要使用iconv系列函数,都需要用到什么库(.so)
  • 关于makefile的问题:如果一个目标的两个以上的依赖文件都需要引用相同的库函数该怎么写?
  • 抱歉,没分了!!!请教linux下,用C/C++编程,如何知道我要实现某一功能需要用到什么函数
  • linux下C编程,需要一个函数判断目录是否存在
  • C++指针作为函数的参数进行传递时需要注意的一些问题
  • win7, win8安装docker需要了解的概念
  • 请问装完JBuilder后要做JSP还需要什么配置?需要Apache?
  • PHP编程需要注意地方总结
  • asp需要服务器装iis,那jasp服务端需要装什么软件?
  • 软件项目版本控制需要注意的几点
  • 运行JSP、SERVLET需要那些配置?需要如何设置?请各位指点。
  • Android开发需要的几点注意事项总结
  • 请问如果要按自己需要修改linux内核源代码需要那些准备知识
  • OpenStack中compute介绍和compute实例需要注意的问题
  • 弱弱的问题^_^在VA中怎么编译调试Servlet程序啊?需要安装什么环境?除了VA还需要什么
  • memset分配的空间用完以后需要进行释放吗? 如果需要释放,怎么释放呢? ---阿菜
  • 基于c中使用ftruncate()前需要fflush(),使用后需要rewind()的深入探讨


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3