首页 > 代码库 > 给函数增加调试打印头(四)

给函数增加调试打印头(四)

        工作有点忙,再又有点懒,所以从前面几篇:给函数增加debug头 给函数增加Debug头(扩展二) 给函数增加Debug头(三) 给函数增加Debug头 - windows平台的普通打印调试处理 的断断续续至今,才略微仓促地发布第一个安装包0.0.0.1版本。目前只支持Windows+VC6.0及其以上的版本的C/C++程序。

        下面进入正题


1、安装流程

       

点击安装包的‘安装‘按钮之后,会先在注册表中为鼠标右键点击文件或者文件夹时增加一个功能“添加调试打印头”,如图:

然后会在 系统盘:\Program Files\Microsoft Visual Studio\VC98\Include内添加AddDbgHead.h和StackWalk.h文件,系统盘:\Program Files\Microsoft Visual Studio\VC98\Lib内添加stackwalk.lib文件,再在系统盘:\Windows\System32目录增加三个文件addDbgHead.bat、addDbgHeadFile.bat和AddDbgHead.exe。至此就算完成了安装。


2、程序文件功能结构

AddDbgHead.h:调试打印函数的声明、宏定义

StackWalk.h:为VC6.0增加__FUNCTION__宏的支持,VC9.0以上版本则不需要,未在VC7.0~VC8.0验证

stackwalk.lib:为VC6.0增加__FUNCTION__宏的支持VC9.0以上版本则不需要,未在VC7.0~VC8.0验证

addDbgHead.bat:为文件夹的鼠标右键的注册表设置中添加功能支持

addDbgHeadFile.bat:为C/CPP文件的鼠标右键的注册表设置中添加功能支持

AddDbgHead.exe:格式化、解析代码并增加调试打印头语句


3、代码

AddDbgHead.h:

#if _MSC_VER < 1400 // VS2005以下
#include <StackWalk.h>
#pragma comment(lib, "stackwalk.lib")
#endif
#define ADD_DBG_HEAD_START OutputDebugStringA(__FUNCTION__);{
#define ADD_DBG_HEAD_END   }


StackWalk.h:
#ifndef _STACK_WALK_H_
#define _STACK_WALK_H_

extern const char * __stdcall GetFuncName( void );
#define __FUNCTION__ GetFuncName()

#endif

addDbgHead.bat:for /r %1 %%a in (*.cpp *.c) do call "addDbgHead.exe" -A1 %%a 

addDbgHeadFile.bat:"addDbgHead.exe" %1 -A1 %%a


4、试用截图: 左边为测试代码,右边为输出




5、StackWalk工程代码免积分下载链接:

http://download.csdn.net/detail/lonelyrains/7312913


6、安装包免积分下载链接:

http://download.csdn.net/detail/lonelyrains/7312953


7、注意事项

1)AddDbgHead.h中自定义的宏默认使用OutputDebugStringA函数输出函数名,在DebugView中查看调用逻辑。若编译不过或者需要其他方式显示函数调用流程,可以使用类似如下方案:

#define OutputDebugStringA(s) printf("%s\n",s)

2)因为没有将头文件放在非VC6.0的目录,所以在其他环境例如VC9.0内编译时,需要配置对VC6.0目录的引用,(一般情况下都会装VC6.0和VC9.0(即VS2008)的吧)。配置路径为:工具->选项->项目和解决方案->VC++目录:"包含文件"添加系统盘:\Program Files\Microsoft Visual Studio\VC98\Include"引用文件"添加系统盘:\Program Files\Microsoft Visual Studio\VC98\Lib。都放在最下面,就OK了。如图:


欢迎试用并提出宝贵意见。