分享

调试常用的宏

 心不留意外尘 2016-04-22

from http://andylin02./blog/469703

2009.09

调试常用的宏 


__FILE__:当前文件名

__FUNCTION__:当前函数名

__LINE__:当前行

__DATE__:含有形式为月/日/年的串,表示源文件被翻译到代码时的日期。

__TIME__:包含程序编译的时间。时间用字符串表示,其形式为: 分:秒

__STDC__:宏指令的意义是编译时定义的。一般来讲,如果__STDC__已经定义,编译器将仅接受不包含任何非标准扩展的标准C/C++代码。如果实现是标准的,则宏__STDC__含有十进制常量1。如果它含有任何其它数,则实现是非标准的。

__cplusplus 与标准c++一致的编译器把它定义为一个包含至少6为的数值。与标准c++不一致的编译器将使用具有5位或更少的数值。



没想到 VC6 不支持 __FUNCTION__


所以我写了如下的奇怪代码


//用来记录当前行和当前函数//也可说是记录 堆栈

void log_stack(const char *file, int line, const char * function);


//当然还要对 __FUNCTION__ 宏作点修饰,因为这个宏只是在函数里面才起作用

//据说 VC6 也是不支持 __FUNCTION__ 的

Cpp代码  收藏代码
  1. #ifndef __FUNCTION__  
  2.     #define __FUNCTION__ "Global"  
  3. #endif  
  4.   
  5. #define DEBUG_NEW_HOOK  
  6.   
  7. #ifdef DEBUG_NEW_HOOK  
  8.   //就是先写跟踪信息再实际调用函数  
  9.   #define  debug_new_check_point(a)  log_stack(__FILE__, __LINE__, __FUNCTION__); debug_new_check(a, false)  
  10.   #define  debug_new_check_free(a)  log_stack(__FILE__, __LINE__, __FUNCTION__); debug_new_check(a, true)  
  11.   //#define  printfd2(a,b)  printf(a,b)  
  12.   //#define  printfd3(a,b,c)  printf(a,b,c)  
  13.   //#define  printfd4(a,b,c,d)  printf(a,b,c,d)  
  14. #else  
  15.   
  16. #endif  
 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多