關於給函數增加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_) void ASConsole::formatFile(const string &fileName_)函數中。 第一段:[cpp] view plaincopyprint? //add by zqb down out << "#include \"debug.h\"\r\n"; linesOut++; //add by zqb up //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 if(nextLine == "{") { out << "\r\n"<<" \t"<<"DEBUG;\r\n"; linesOut++; } //add by zqb up表示添加調試頭的具體內容。
第三段:
//add by zqb down filesAreIdentical = false; //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)才是把函數的第一個'{'另起一行頂格