C++編譯器已與另一個編輯器和其他程序捆綁進一個交互的開發環境IDE中,要進行C++開發,第一件事情就是選擇一個合適的C++編輯器。C++編輯器選擇有幾個要素:
1)減少不必要的編輯動作,減少編輯的時間。一切能夠無二義性描述出來的編輯任務,都可以而且應該能被自動化。例如,每一個C++程序都會有一個main函數;我們在定義.h文件時,都希望加入一些預處理指令#define來幫我們解決重復引用同一個頭文件而帶來的麻煩。
鼠標操作總是比鍵盤操作要慢的。這方面EMACS做得可算是到了極致。所以, EMACS用戶經常會吹噓:他們編輯的速度等同於他們思考的速度。
2)可擴展性高。
程序員預期的C++編輯器應該能提供一些編程的幫助,例如,語法高亮,自動補齊,自動排版,語法檢查等等。留心觀察一下gedit, vim, emacs, ultraEdit,就會發現它們提供的遠不是windows 記事本,寫字板提供的那麼簡陋的功能。
對於一種新的語言,新的語法,它們應該能很方便地提供支持,而不停留在一種或幾種固定的語言上。
3)用戶可定制性高。
如果想長期從事研發, 特別是linux/unix下研發的話,那麼你很有必要學好一個功能足夠的C++編輯器。有這麼一句話:Linux下程序員分為三種,使用emacs的,使用vi的,還有其它。
EMACS是Stallman用lisp語言寫的一個GPL的C++編輯器。我們這裡所說的emacs指的是GNU emacs,而非Xemacs。由於它的開放性,我們可以把它打造成一個功能強大的IDE。我們在安裝好CGYwin之後,也可以在Windows系統下使用 EMACS。CGYwin和MINGW是第三方寫的一個在Windows系統上模擬POSIX系統的工具。
EMACS與其說的是一個C++編輯器,倒不如說它是一個操作系統。我們可以用它來寫編程,寫wiki,收發郵件等等。EMACS主要是通過兩種方式來進行擴展:el腳本(elisp是lisp的一種方言)和第三方擴展包。EMACS的入門成本很高。
C++編譯器首選GCCGNU COMPILER COLLECTION)。原因有兩個,它是GNU開源的,同時它對標准C++的支持度高達96.15%。而VC++6.0的支持度只有83.43%。 GCC不僅是通常意義上的C或C++的C++編譯器,它還可以編譯java等其它語言。gcc是gnu c的C++編譯器,g++是gnu c++的C++編譯器, 而EGCS(Enhanced GNU Compiler Suite)可以認為是gcc的改進版。
我們可以通過一條編譯指令來完成所有步驟。也可以分步執行。gcc有三個重要選項-E(只進行預處理), -S(生成匯編代碼), -g(生成帶原代碼調試符號的可執行文件,如果想用gdb調試的話,就應該在編譯時打開這個選項)。
GCC可以看作一個軟件包,除了編譯工具,它還集成了調試器gdb,性能分析工具gcov, gprof。
只要我們裝好了GCC,這些強大工具就可以直接使用了。通過gcov,我們可以查看一個程序,源代碼中每行代碼的運行次數。我們優化運行次數最多的代碼,那麼就可以大大優化程序。使用gcov時,需要打開 GCC的fprofile-arcs和ftest-coverage兩個選項。gcov中常用的選項有-b分支統計信息。
通過gprof工具,我們可以查看函數之間的調用順序,及各個函數運行的時間。我們可以將gprof理解為linux/unix自帶工具time的加強版。使用gprof時,需要打開GCC的pg選項。
gcov和 gprof的共同點是在編譯程序時,加入自己的一些輔助信息,由此來進行程序診斷。除了,這些優化手段,我們還可以使用一些內存洩漏工具,來減少野指針,未釋放的內存空間。
GDB即GNU的調試器,它是GCC附帶的一個性能優質的調試器。通過GDB和腳本結合,我們可以很好的實現回歸測試。
GDB可以運行於CLI和GUI兩種模式。
默認GDB是CLI模式的,我們可以去下載和安裝GUI模式的GDB,例如xxgdb, ddd等。一個更好的方式是在 EMACS中使用GDB。
C++編輯器包括visual studio工具的所有調試功能,還包括它沒有的功能。它除了支持,我們一般的設置斷點,單步跟蹤,step in, step out, step over等,還有一些強大的功能。在gdb中,我們可以有以下幾種暫停方式:斷點BreakPoint)、觀察點WatchPoint)、捕捉點CatchPoint)、信號Signals)、線程停止Thread Stops)。