本系列文章由 @lonelyrains 出品,转载请注明出处。
文章链接: http://blog.csdn.net/lonelyrains/article/details/9332511
关于给函数增加Debug头,博客内已有一篇文章对此进行阐述:给函数增加Debug头。但是觉得还有很多工作没做,比如对代码有限制必须编译正确、文件大小不能超过BUF_SIZE的一次性读入、判断是否是函数头过于简单、不支持多种编码格式文件等。这么庞大的工作量,针对这些情况,考虑利用现有的具有类似静态代码分析功能的格式化开源工具寻找合适的解决方案。
针对这个需求,采用Astyle格式化工具代码,基于2.03版改进。判断条件很简单:如果是顶头的“{”,对C来说,除了extern "C"和结构体,就是函数的开始,而extern "C"一般只在头文件用;对C++来说,除了namespace,基本上就是函数的开始(而namespace一般也只在头文件用--这句话是错的,但是有namespace的时候,函数的{依然是顶格被格式化的,所以依然可用),结构体和namespace的部分现在依然需要手动删除添加的宏定义。只添加了几行代码,且添加代码部分分别用//add by zqb down和//add by zqb up注释包围,表示是添加的用作调试的代码。
添加的代码有三段,均在
void ASConsole::formatFile(const string &fileName_)
函数中。
第一段:
//add by zqb down
out << "#include \"debug.h\"\r\n";
linesOut++;
//add by zqb up
表示添加调试宏所在的头文件。
第二段:
//add by zqb down
if(nextLine == "{")
{
out << "\r\n"<<" \t"<<"DEBUG;\r\n";
linesOut++;
}
//add by zqb up
表示添加调试头的具体内容。
第三段:
//add by zqb down
filesAreIdentical = false;
//add by zqb up
无论什么条件下,都更新到新的文件。
【注】
1、编译报错:newline in constant:使用notepad++打开ASLocalizer.cpp,格式->以UTF-8格式编码,保存文件 重新编译
2、上传的工程中,包含原2.03的工程,更新后使用工程本身的代码作为测试、使用不加第三段添加项导致无法更新文件的MJInterface.cpp代码、使用测试代码编译工程的工程、使用生成的exe对当前文件夹批处理添加调试宏头的脚本、简单的readme.txt。笔者使用的是免费的Microsoft Visual C++ 2008 Express Edition编译vs2008的版本。此处为工程下载链接
3、使用限制:要求实用ansi的标准格式化(命令行选项是-A1)才是把函数的第一个'{'另起一行顶格