實踐難度:★★☆☆☆
實用性 :★★★★☆
你還在采用純手工開發嗎?
你還在采用本地開發,ftp到遠程主機進行編譯的繁瑣方式嗎?
你還在為不斷的切換編輯窗口,ftp窗口,ssh窗口而感到郁悶嗎?
你還在為不能夠熟練使用linux下那命令龐雜的vi,gdb而苦惱嗎?
你還在為不能使用現代化的IDE而擔憂嗎?
……
作為與你一樣的linux C/C++程序員,我也對這一切感到郁悶。一直很羡慕Java程序員擁有如Eclipse,Netbeans這般人性化的IDE(內嵌的代碼模版、代碼格 式化、自動完成、代碼重構等功能對於程序員來說都是有效提高開發效率的必備利器)。雖說Visual Studio,Borland Builder,Code::Block對於C/C++語言開發也是非常的方便,linux端也不乏優秀的IDE,但當碰到我們”本地開發,遠程編譯,遠 程運行”的開發模式時,一切都變得不再那么友好。IDE自身的特性要么無法完整發揮,要么需要通過繁瑣的個性化配置,使用大量的外掛插件才能實現類似的效 果。我們不能像那些大牛們,用的不爽就自己寫一個出來用。一則大多數人都沒有這個功力,二則業界一定有針對此類情況的解決方案了,我們只需找到一個適合自 己的就好。終於,在不斷地尋找中,我找到了這么一款能夠幫助我們”解放雙手,解放生產力”的IDE—NetBeans7.1。網上關於遠程開發的資料為數 不多,而且大多數即使你照着操作,到最后也不一定成功。本文我將會通過一個完整的示例向各位介紹NetBeans那強大,實用的遠程開發功能。
測試環境 |
||
|
本地主機 |
遠程主機:
|
操作系統 |
XP Professional
|
Linux 2.6.9-42.EL
|
其他軟件 |
Java-JDK 1.7.0_05 NetBeans 7.1 |
GCC 3.4.6 GDB 7.4 (遠程調試必須使用gdb6.8+) |
1 現狀分析
在開始之前,讓我們先看看現在的linux C/C++程序員的工作方式吧。
由於使用linux端的圖形化開發環境需要消耗很大的資源,且大多數情況下我們不允許使用這樣的開發方式。使用vi開發又要配置各種插件,熟悉各種命 令。我們是程序員,不是內存條,我們厭惡記憶那些詭異的命令。於是大多數程序員采用的開發方式都是:在本地編輯代碼,然后ftp到遠程主機,在遠程主機進 行編譯,調試。發生錯誤時,則切換回本地環境修改代碼,在ftp,編譯,調試。如果問題依然存在,重復上述操作。若程序邏輯復雜,這樣的過程可以持續到要 么程序員奔潰,要么程序奔潰。
目前大多數程序員使用的基本是UltraEdit和SourceInsight這兩款工具,下圖從幾個維度進行了比對。
|
UltraEdit |
SourceInsight |
格式化 |
無 |
無 |
代碼瀏覽 |
無 |
完美支持 |
重構 |
不支持 |
支持 |
自動補全 |
簡單支持 |
完美支持 |
代碼模版 |
無 |
無 |
版本控制 |
需通過自定義外部工具實現 |
基本支持 |
遠程開發 |
不支持 |
不支持 |
遠程編譯 |
不支持 |
不支持 |
遠程調試 |
不支持 |
不支持 |
從上圖可以看出,這兩款編輯器的功能相對一款IDE來說還顯得有些稚嫩。(當然他們本身也不是打着IDE的旗號在出售,進行這樣的評價多少有些不公)
2 方案比對
在最終確定推薦NetBeans之前,我也試用了多款聲稱支持遠程開發的IDE。下表對這些IDE進行了對比,以證明我向各位推薦的NetBeans的確是目前最佳的選擇。
遠程開發方案對比表 |
|||
|
Eclipse C/C++ |
Netbeans C/C++ |
MagicUnix |
格式化 |
支持 |
支持 |
支持 |
代碼瀏覽 |
支持 |
完美支持 |
支持 |
重構 |
支持 |
完美支持 |
不支持 |
自動補全 |
支持 |
完美支持 |
支持 |
代碼模版 |
支持 |
支持 |
不支持 |
版本控制 |
支持—(測試存在問題) |
完美支持 |
支持 |
依賴插件 |
RDT,PTP |
無 |
無 |
依賴服務 |
Perl,Java,SSH,RDT-Server |
SSH |
SSH |
遠程開發 |
支持 |
支持 |
支持 |
遠程編譯 |
支持 |
支持 |
支持 |
遠程調試 |
支持--(測試存在問題) |
完美支持 |
完美支持 |
離線支持 |
不支持 |
支持 |
不支持 |
綜合評價 |
基於Eclipse框架的遠程開發方案由IBM和HP共同參與,但是開發出的產品實是不甚好用。依賴太多,現有bug也比較多。 |
基於Netbeans框架的遠程方案應該是目前最為理想的方案了,雖然也存在不少bug,但只要合理使用,還是能發揮其特性的。 |
由國人開發的收費軟件,最近已停止更新,界面類似VC6,遠程功能比eclipse好用,唯一不足的就是不支持離線開發。 |
接下來我就詳細介紹下Netbeans的遠程開發功能吧。
3 遠程開發
(注:關於NetBeans本身就不介紹了,感興趣的話可以看看官網的介紹。基本操作由於篇幅限制也不做介紹了,多使用幾次自然就熟悉了)
安裝NetBeans
- 進入http://netbeans.org/ NetBeans官網下載NetBeans 7.1.2
- 安裝(具體過程相信不用我多說了吧)
開啟下載功能
- 桌面右擊NetBeans快捷方式,選擇屬性—>快捷方式
- 在目標一欄 后面添加
-J-Dcnd.remote.download.project.action=true
3. 確定
下面我們就正式開始我們的遠程開發之旅吧。
- 打開NetBeans
- 創建項目文件
工具欄—>文件—>新建項目
(注:選擇基於現有源代碼和基於二進制的項目,后期添加的文件將存在上傳bug。)
填寫項目名稱等基本信息,生成主機選擇localhost
點擊完成,項目創建成功
- 導入現有源代碼或添加源代碼
項目名稱右擊—>從文件夾添加現有項
(注:新建文件夾無法自動加入項目,需要關閉項目,重新打開。建議采用預先創建好源碼目錄結構然后一次導入的方式,若中途需要添加新的文件夾,可以在外部添加好,然后右擊項目名稱—>刪除,重新添加一次即可。)
- 添加遠程主機
既然是遠程開發,那么必須配置好遠程開發的環境,這樣IDE才能夠提供代碼完成,代碼分析等功能。
項目名稱右擊—>設置遠程生成主機—>管理主機
點擊管理組件后,將出現生成主機管理器界面
點擊添加按鈕,出現新建遠程生成主機界面,填入主機名(IP)。
點擊下一步,更改登錄用戶名,驗證方式選擇口令方式(若遠程端為SSH密鑰方式,則選擇SSH密鑰文件。
點擊下一步—>輸入用戶密碼
點擊確定,NetBeans開始自動搜索遠程主機開發環境
(注:若自動搜索到的路徑與實際路徑不符,或者想自定義執行路徑,可在遠程主機創建完畢之后。選擇工具欄—>工具—>選項—>C/C++à生成工具,開發主機選擇欲配置的主機,編輯工具執行路徑,編輯完畢,確定即可)
點擊下一步,選擇項目文件訪問方式為“系統級別文件共享(NFS、Samba等)”
(注:訪問方式必須選系統級別文件共享)
點擊完成。
點擊路徑映射器,建立本地源碼與遠程主機源碼之間的映射關系
本地路徑填入本地源代碼所處路徑,遠程路徑填入想存放源代碼的目錄。
至此遠程主機添加完畢。
- 添加頭文件路徑
為了能夠正常解析源代碼之間的包含關系,提供代碼的自動補全功能,配置額外的頭文件路徑是必不可少的步驟。
工具—>選項—>C/C++—>代碼幫助
點擊添加按鈕將常用頭文件路徑加入,若存在系統未解析的宏也可通過加入宏定義解決。
(注:若自定義頭文件路徑過多時,添加顯得過於繁瑣,可通過更改配置文件實現。由於操作冗長,故此處不贅述)
路徑添加完畢后,點擊確定即可。
- 項目配置結束。
項目配置結束后,我們就可以進行正常的源碼編輯,創建工作了。
(注:項目源代碼默認編碼為UTF-8,若導入的源碼編碼格式不符,在試圖打開源代碼是會彈出“無法使用編碼UTF-8安全地打開該文件..”的對話框。
此時需要修改項目默認編碼。
具體步驟:項目名稱右擊—>屬性—>常規
4 遠程編譯
在源碼編輯結束后,我們需要進行源代碼的編譯工作了。
項目源代碼目錄右擊-->上傳至….
(注:上傳過程中可能提示源代碼映射路徑不存在,按照提示進行配置即可)
代碼上傳完畢之后,選中makefile文件右擊—>make目標即可執行編譯工作。
若編譯失敗,需安照提示錯誤進行源代碼修改,然后點擊修改源代碼選擇上傳,重新運行編譯即可。
5 遠程調試
在代碼成功編譯后,若執行結果與預期不符,我們就需要進入代碼調試階段了,有人說,好的代碼不是寫出來的,是調出來的,可見調試工作也是相當的重要。
對於普通應用程序的調試,由於其比較簡單只需通過菜單欄的調試按鈕即可進行,此處不進行描述。此處僅對本人常用的動態庫調試功能進行簡述。
既然是動態庫調試,那么就要選擇運行的主程序了,通過調試—>連接調試器,連接到主程序進程。
點擊連接調試器,出現連接界面,選擇要連接的進程,選擇項目為當前項目。
點擊確定,即可連接到遠程進程。
在預調試的代碼上開啟斷點功能。
觸發主程序
程序已經入調試階段,可通過添加自定義變量,觀察當前變量的情況。
調試結束后,選擇調試—>完成調試器會話終止調試即可。
6 總結
以上介紹了遠程開發,遠程編譯,遠程調試三大主要功能了。不過為了更好的使用NetBeans,我們還可以通過自定義快捷鍵,自定義代碼模版,添加版本 控制等操作進一步提升我們的效率(由於篇幅限制就不一一介紹了)。雖然NetBeans已經能夠提供遠程開發所需的大部分功能了,可依然存在不少問題,如 編譯輸出窗口不支持中文,不支持新增文件夾立即生效等等問題,希望在新版本的NetBeans中能夠有所改觀。
參考資料
http://en.wikipedia.org/wiki/NetBeans
(zuoca 原創文章,轉載請注明出處http://www.cnblogs.com/zuoca/articles/2582833.html)