關于給函數增加Debug頭,博客內已有一篇文章對此進行闡述:給函數增加Debug頭。但是覺得還有很多工作沒做,比如對代碼有限制必須編譯正確、文件大小不能超過BUF_SIZE的一次性讀入、判斷是否是函數頭過于簡單、不支持多種編碼格式文件等。這么龐大的工作量,針對這些情況,考慮利用現(xiàn)有的具有類似靜態(tài)代碼分析功能的格式化開源工具尋找合適的解決方案。
針對這個需求,采用Astyle格式化工具代碼,基于2.03版改進。判斷條件很簡單:如果是頂頭的"{",對C來說,除了extern "C"和結構體,就是函數的開始,而extern "C"一般只在頭文件用;對C++來說,除了namespace,基本上就是函數的開始(而namespace一般也只在頭文件用--這句話是錯的,但是有namespace的時候,函數的{依然是頂格被格式化的,所以依然可用),結構體和namespace的部分現(xiàn)在依然需要手動刪除添加的宏定義。只添加了幾行代碼,且添加代碼部分分別用//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)才是把函數的第一個'{'另起一行頂格