本文由 @lonelyrains 出品,转载请注明出处。
文章链接: http://blog.csdn.net/lonelyrains/article/details/25244013
工作有点忙,再又有点懒,所以从前面几篇:给函数增加debug头(一) 给函数增加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 }
#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、注意事项:
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了。如图:
欢迎试用并提出宝贵意见。
6、StackWalk工程代码免积分下载链接:
http://download.csdn.net/detail/lonelyrains/7312913
7、安装包免积分下载链接:
http://download.csdn.net/detail/lonelyrains/7312953