C / C++ 在開發過程有些 tool 蠻好用的,找了時間摸一下做紀錄,圖片截完後才發現,怎麼相簿空間那麼小,還沒上傳完就爆了,原本打算是 step by step,最後只能以文字敘述方式。

C++ 一些免費的 tool 在 windows 底下並不好找,反倒是 M$ 對 C# /Management C++ 的支援算完整。

摸完這些腦中又出現另三個問題:


1. plug-in 製作原理為何?vs plug-in、excel plug-in、Code::Blocks plug-in 是不是學會製作一種就可打天下?

2. Code::Blocks 到底有沒有辦法對已建立之檔案重新命名?找半天找不到。

3. Code::Blocks 有辦法開多個 Instance ? 要多開一個寫 test code 都沒辦法。


 以前以為 plug-in 和在一個軟體裡面附上一些子控制,再做 msg commutation,不過似乎不是這樣。

 

目錄

0. 軟體匯整

1. class generator

2. Books Mark

3.  comment

4.  跳至函式宣告 / 定義處

5. 檢視呼叫階層

6. 快速瀏覽函式與類別成員 / 函式

7. 搜尋與取代

8. 跳到指定行

9. 擴充 plug-in

10. Code Snippet

11. 自動縮排

* 12. Generate UML from code

* 13. Generate code from UML

* 14. generate code document - software download and setup

* 15.  doxygen using

* 16. profiler

* 17. Code Metric ( 程式碼量度 )

* 18. other uilty tools

 

0. 軟體匯整

(1)  Visual C++ plug-in (Trail) : Visual Assist X

(2)  Visual C++ plug-in (Free) :  Copy As Html

(3)  generate code document and UML (Free) : doxygengraphvizMicrosoft HTML Helper

(4)  Profiler (Free) : Very Sleepy

(5)  Code Metrics (Free): SourceMonitor

 

一些 debugger、editor、complier tool < 如 dumbin.exe 之類的 > 本文就不再附上。

 

正文提的 VC 指的是 Visual C++ 2010 ;CB 指的是 Code::Blocks 10.5。敘述中關於 CB 之功能,可能是在安裝時就有預設的 plug-in,不特別說明。

VC 2010 使用 plug-in 必須在 professional 版本以上;程式碼品質與測試須在 premium 版本以上;測試品管、設計架構與分析須在 Ultimate 版本以上 ( with msdn & without msdn 有差 )。

較詳細的產品比較表可至 官網 查詢。

 

1. class generator

大多 IDE 都含有此功能,個人認為幫助沒很大,甚至 vc 下此功能也沒比直接用手 key 來得快。

(1) VC 在「專案->加入類別」裡,也可用繼承方式加入,,若要為類別新增某個成員,在  類別檢視器(快捷鍵為 Ctrl + Shift + C),對該類別按「右鍵->加入->加入函式/加入變數」。

(2) CB 裡要加 class 在「File -> New -> Class」,建立後似乎沒辦法新增其成員。

目前精靈所建立之 class,沒辦法為該 function member 設定為 const 屬性;沒辦法指定 template;vc 甚至沒辦法指定 virtual function。

這裡個人覺得 cb 做得不錯。

 

2. Books Mark

程式碼一多時,可能會先跳到其他檔案去,再回來這行繼續,但回來找又花時間,於是會設 books mark

(1) vc : 該行連續兩個 ctrl + K ,前一個 books mark 按 shift + F2;後一個 books mark 按 F2

(2) cb: 該行按 ctrl + B ,前一個 books mark 按 Alt + pageup;後一個 books mark 按 Alt + pagedown

 

3.  comment

vc 裡竟沒有一套方式用於快速 comment,這點意外。

(1) vc + VAX : 直接選取欲註解區段,按下 / 為每行前面加上 // ;按下 * 為以 /**/ 方式註解。再按一次 / 或 * 即取消註解。

(2) cb : 選取後,ctrl + shift + C 為每行加 // ;ctrl + shift + X 為取消.

 

4. 跳至函式宣告 / 定義處

(1) vc : 有用到函式的地方,按下「右鍵 ->移至定義 / 移至宣告」。

(2) cb : 有用到函式的地方,按下「右鍵 ->Find declare of... / Find Implement of ...」。

 

5. 檢視呼叫階層

想知道某個函式中,間接又呼叫了哪些函式。

(1) vc : 在函式內,「檢視->呼叫階層」,快捷鍵  Ctrl + Alt + K

(2) cb : 目前筆者找不到這功能。

 

6. 快速瀏覽函式與類別成員 / 函式

此功能除了可瀏覽目前寫了哪些函式、類別外,還可在瀏覽窗格中快點二下跳到定義/宣告處。

(1) vc : 「檢視-> 類別檢視」,快捷鍵 Ctrl + Shift + C

(2) cb : 「Management -> Symbols

 

7. 搜尋與取代

此功能做得有強有弱,做得好不好差很多。

(1) vc : Ctrl + F 可做為快速搜尋與取代,另提供將結果 books mark 功能 (所以配合 F2 就可以一直看下一筆了); Ctrl + Shift +D 會將所有找到的結果列在「尋找結果」視窗裡,快點二下就跳到該處;另外還提供「規則運算式」。

(2) cb : Ctrl + F 為快速搜尋,Ctrl + R 為快速取代,不提供結果 books mark 功能;在 Find in Files 裡,Scope 選 global 也可將結果列在「Search Results」視窗裡,一樣快點二下就跳到該處;也提供規則運算式

msdn 上對於搜尋/取代功能之規則運算式,有份 網頁 做說明。

 

8. 跳到指定行

這功能似乎較少用到,但都有附。

(1) vc : 「檢視->移至」,快捷鍵 Ctrl + G

(2) cb:  「Search -> Goto Line」,快捷鍵 Ctrl + G

 

9. 擴充 plug-in

(1) vc : vc 要擴充 plug-in 必須要 professional 版本以上才行。它在「工作->擴充管理員」,右側點「線上圖庫」就可進去看。另外也可在 線上 瀏覽,下載安裝。

有在網頁上放 code 的可下載這份 Copy As Html;選擇程式碼,按右鍵後會多一個選項,「複製為 HTML」。另外還有 Language Convert,它可以把 C# 和 VB.net 做互換。

(2) cb : cb plug-in 管理在「plugings->Manage plugins」,目前沒辦法進行線上瀏覽更新,要用新的 plug-in,必須到 code::blocks 論壇 裡找,建議最好註冊一份帳號。

 

10. Code Snippet

Code Snippet 指的是一些重覆性、常用到的程式碼,可能會有些規則出現,替換的只是一些識別字,此時若能先為其寫下一些 template ,在適當時機或使用者自己呼叫時,該段程式碼便會自動浮現,並設定游標最後位置,省去一堆打字功能。

(1) vc : 目前 vc code snippet 大多是 plug-in (意指至少要 professional 以上) 進來的 (雖在 2005 時是有的),諸如 Snippet Designer 、Snipper 都是。

VAX 所提供之 Code Snippet 已建立不少 pattern,另 coder 欲自行建立 pattern 也算方便。

(2) cb : cb 本身有 code snippet tool,「View -> codesnippet」,語法可能要上論壇上找。

 

11. 自動縮排

這功能到後來對 coder 幫助應該有限,因大多時候 code style 和 ide 不同。

(1) vc : Alt + F8,可只針對一區段做自動縮排。

(2) bc : 在檔案檢視裡,對該檔按右鍵,選「Format This File (AStyle)」,但不可對一區段做自動縮排。

 

* 12. Generate UML from code

 

這些用 UML 這名詞應不怎麼合適,主要是類別關係圖。 VS 上要拿到這功能需花費不少錢,cb 又沒有此功能,本文後半段會講述其他軟體做這裡。

 

(1) vc : 必須 premiun 版本以上。 「檢視-> 類別檢視 (Ctrl + Shift + C)」,複選好欲產生之 class 後,按「右鍵->類別圖表檢視」便可產生,以下是一組生成之範例。

gen-class-023

全選這些圖後,再按右鍵,還有選項可以調整。

gen-class-024

<a>  展開可以看有哪些成員 。

<b>  由於展開後位置配置會走掉,這時先按「調整圖案寬度」,再按「配置圖表」,位置就幫忙調好了。

<c>  產生之影像可直接複製出來,貼到小畫家存檔。

<d> 注意到這份圖表,事實上 class xString 是 class XPoint 之 protected data member,但從圖片上看不出彼此間有何關係。

<e>  日後程式碼可從這份圖表再做新增動作。

其他功能有興趣之讀者可再玩玩。

 

(2) bc : 目前 bc 不提供這功能。

 

* 13. Generate code from UML

一些較大型的 project,在設計階段時,可畫 UML 圖出來做為設計,最後根據此 UML 圖進行 coding。

(1) vc : vc 目前在這方面必須要 Ultimate with MSDN 才支援;沒會錯意的話它沒辦法生成 C++,是生成 C#。

(2) bc : 無此功能。

 

* 14. generate code document - software download and setup

若寫完一份 project 之後,做說明文件通常是耗時的事,早期較有規模公司之工程師甚至會花一半時間在寫文件上面。doxygen 便是自動產生說明文件的軟體,但 doxygen 產生文件是針對其規定之註解方式產生。

由於 doxygen 這套軟體很好用,但限篇幅有限 ( 加上相簿容量有限 ),筆者只以概述及重點方式敘述其使用與常見問題。

(1) 下載並安裝 doxygen 

 這是最重要的程式,有 for windows,官網   載點   使用手冊   FAQ 連結附上,筆者下載的是 doxygen-1.8.1.1-setup.exe

(2) 下載並安裝 graphviz

這其實是拿來畫 node 關係圖的軟體,但 doxygen 產生類別繼承 / 函式呼叫 關係圖時用的就是這套軟體之 library,故建議去下載並安裝它,若不安裝的話畫出來的 UML 不好看。 官網  載點  使用手冊  FAQ  l連結附上。有興趣的網友可再稍研究一下,它也提供了 C libraries / Tcl.Tk libraries / Scripting APIs 。

(3) 下載並安裝  Microsoft HTML Help Workshop

這不是必要的,但如果產生之 document 想生成 chm 檔時,這會是必要的。 官網  載點  連結附上。另它也有自己一套的 library,但目前文件都圍繞在 MFC - CWinApp::HtmlHelp 類別裡,有興趣可前往觀摩。

(4) EmEditor ( 付費軟體 )

若文件裡本身有中文字時,在生成 chm 時,左側導覽會變亂碼,目前筆者不知道有沒有其他軟體可解決。官網  試用載點  附上。

(5) Convert Z

Convert Z 是轉編碼的軟體,可批次轉換,若註解、程式碼裡有中文,請安裝。

 

* 15.  doxygen using


(1) 快速使用

若拿到一份沒符合註解格式的 code,只想看類別之間的關係圖時,安裝完 doxygen 及 graphviz 時就可用。

<a> 先選擇程式碼所放資料夾,工作目錄都在裡面 ( 也可再進一步設定沒錯啦 )

<b> Wizard -> Projectscan recursively 勾起來,做資料夾深度搜尋。

<c> Wizard -> Mode ,選擇「All Entries」,另「Include corss-referenced ...」交互參照也勾起來;選擇 「Optimize C++ output

<d> Wizard -> Output,HTML 下面有個「With Search function」,勾起來。

<e> Wizard -> Diagrams,「Diagarms to generate」選「Use dot tool from the GraphViz package」,然後把下面的勾全勾起來。

最後切到 Run 分頁,按下 「Run doxygen」 即可,完成後再按下「Show HTML output」,一份完全沒寫註解的 code 產生之 sample 如下。

 

< 生成之首頁>

doxygen-006

 

< 看有哪些類別 >

doxygen-007

 

< 看繼承架構圖 >

doxygen-008

 

(2) 產生 chm 檔

前幾個設定一樣要設,另產生 chm 必須安裝 HTML Helper。doxygen 設定方面注意以下幾點

<a> 「Wizard -> Output」 ,「Select the output format(s) to generate」,「HTML」改勾「prepare for compress HTML (chm)」,with search function 也要勾。

<b>  「Expert -> HTML」,「GENERATE_HTMLHELP」勾起來;「CHM_FILE建議用絕對路徑才不會找不到,甚至直接用它的 folder viewer 方式做設定較佳,如設定「D:/rst.chm」;「HHC_LOCATION」選「C:/Program Files/HTML Help Workshop/hhc.exe」(可能依安裝路徑有所不同);「GENERATE_CHI」也勾起來。

注意到,上面的路徑名稱用的斜線和一般 windows 上的習慣是不一樣的;windows 上是以 \ 為分割;但 doxygen 是以 / 為分隔,確定設好之後就可以去 run 了。

 

(3) 中文亂碼問題

 

上述所有步驟都省掉了編碼問題,若註解或程式碼裡具有中文時必須多一個動作:把所有的 source code 以記事本開啟,轉存成 UTF-8 編碼。也可用 Covert Z 做批次編碼,另在 doxygen 那裡,「Expert->Input」,「INPUT_ENCODING」預設應是 UTF-8,別去動它,會看到說要改 GB2321 之類的,是因為那是簡字。

 

若是產生出來之 document 要以中文為介面的話,在「Expert->Project」,「OUTPUT_LANGUAGE」選「Chinese-Traditional」,但注意,除了英文版之外,其他語言產生之文件,在「日期」處都會是亂碼。

 

(4) 註解風格

 

承如上述所說,doxygen 本身是由註解而產生說明文件的軟體,故要使用此軟體時必須了解註解風格。C 語言 有份範例 可供參考,檔名為 doxygen_c_sample.rar。

C++ 我還來不及寫完整 sample,有興趣可連到這份網站做參考。

程式碼、註解有兩個注意地方。

 

<a> 不能用斷行符號 ,否則格式會出包。

<b> 註解內不可有 class 字樣,在產生文件時也會被誤判。

 

其他部份有興趣可上官網 K 使用手冊,這些便不再贅述。 

 

(5) VAX 輔助

 

由於 doxygen 註解風格,故在 VAX 中我多設了這幾組 code Snipptes ( 在 VAssistX -> Tool -> Edit VA Snipptes )。

 

?cl   < class 註解 >

/**
* @brief $end$
* @note
*/

 

?fi    <  file 註解  >

/**
* @file $FILE_BASE$.$FILE_EXT$
* @brief $end$
* @author EdisonX < Edison.Shih >
* @date $YEAR$.$MONTH$.$DAY$
*/

 

?fn    < function 註解 >

/**
* @brief $brief$
* @param $param1$
* @param $param2$
* @return $return$
* @retval $retval$ $end$
* @note $note$
*/

 

?fi2      <file 註解 2 >

/************************************************************************/
/* */
/* file : $FILE_BASE$.$FILE_EXT$ $end$ */
/* date : $YEAR$.$MONTH$.$DAY$ */
/* compiler : Visual C++ 2010 */
/* author : EdisonX / Edison.Shih */
/* description : */
/* */
/* */
/************************************************************************/

 

?fn2     < function 註解 2 >

/**
* @brief $end$
* @param
* @param
* @return
* @retval
* @retval
* @note
*/

 

?ma      < 製作 main page >

/** @mainpage
*
* @section Author
* EdisonX < Edison.Shih >
* <br>
*
* @section Library Introduction
* $end$
* <br>
*
* - [filename1]
* -# [class1]
* -# [class2]
* -# [class3]
*
*
* - [filename2]
* -# [class1]
* -# [class2]
* -# [class3]
* <br>
*
*
* @section Notice
*
* <ul>
* <li> [Notice1] </li>
* <li> [Notice2] </li>
* <li> [Notice3] </li>
* <li> [Notice4] </li>
* </ul>
*
* @bug
*
* [bug description]
*
* <ul>
* <li> [bug1] </li>
* <li> [bug2] </li>
* <li> [bug3] </li>
* </ul>
*
* @todo
* [todo list description]
*
* <ul>
* <li> [todo1] </li>
* <li> [todo2] </li>
* <li> [todo3] </li>
* </ul>
*
*/

 

 * 16 profiler

profiler 工具主要目的是要檢測整份專案瓶頸效率是卡在哪。目前 profiler 大多是以 CPU time 方式取樣本點再進行分析。

Code Snippet
  1. int main()
  2. {
  3.     const unsigned MAX = 50000;
  4.     unsigned i, cnt;
  5.  
  6.     for(cnt=0, i=2; i<MAX; ++i)
  7.         cnt = cnt + is_prime1(i);
  8.     cout << "is_prime1 : " << cnt << endl;
  9.  
  10.     for(cnt=0, i=2; i<MAX; ++i)
  11.         cnt = cnt + is_prime2(i);
  12.     cout << "is_prime2 : " << cnt << endl;
  13.  
  14.     for(cnt=0, i=2; i<MAX; ++i)
  15.         cnt = cnt + is_prime3(i);
  16.     cout << "is_prime3 : " << cnt << endl;
  17.  
  18.     return 0;
  19. }

 

以上面這份 source code 而言,傳統想知道在 main 裡面哪個部份執行得最久,大多是下計時器去計算,但這樣下來當專案一大、程式一複雜時,還要再改寫程式碼,此動作就變得麻煩,此時便是 profiler 適用時機。

vc profiler 需 Preminu 版本以上,在「分析->啟動效能精靈」,一般是選做「CPU 取樣」。以上為例,分析結果如下參考。

 

tt-001

 

上圖而言,可找出最花時間是在 is_prime1 副函式裡,佔了整體效能 99.15 %。另做得好點之 profiler,也會提供效比較報告。 

目前這塊在 Windows 上也有免費的軟體,Very Sleepy,做出來的分析不輸給 VS 內建,有興趣可前往下載使用。

 

* 17. Code Metric ( 程式碼量度 )

Code Metric 主要是用來衡量程式碼 (專案) 品質,目前此軟體大多含有幾項分析:

程式碼行數、statement、braches、comments、繼承深度、Block 深度 ( 大括號的深度 )、類別數、類別繼承深度、函式數、函式呼叫深度等。

vc 本身在「分析」裡,有「計算方案的程式碼度量」選項,但只能分析 Management C++ 或 C# 。

幸運的是 Windows 上有另一套免費軟體,Source Monitor ,下載安裝後,可先看主程式 「help->help topioc」 裡面的 「Explation of Lanlage Metrics」了解程式語言怎麼定義項目之計算。

目前程式碼量度軟體大多是把上述幾個項目的數值拉出來做顯示,並不會為這份專案給一個實際的分數 < 這也是筆者認為較合理的方式 >,因不同團隊所計算之量度可能不盡相同,故這種軟體大多只是輔助,把屬性列出來,至於得方之計算方式,確實應由決策者決定較佳。相關的知識可能包含了商管類的平衡計分卡。

 

* 18. other uilty tools

 

另有兩種 tool 是我近期才知道的,甚至我覺得可能有更多 tool,只是我沒機會碰過而已,做過紀錄。 

(1) 程式碼重覆率查詢:一些 re-use 的程式碼可包成 function / class,這種軟體便在查這件事。

(2) code-style 管理:開發團隊若對於 code-style、註解方式有所限制,這類軟體會在編輯或執行時,提出警告。

版本管控、程式碼比較也有相關軟體,唯筆者這兩份較少用到,於此打住。

arrow
arrow
    全站熱搜

    edisonx 發表在 痞客邦 留言(0) 人氣()