我開發Linux服務程序的工做環境搭配

嗯,這是和平同窗的點題做文了,呵呵,他非要了解我是怎麼開發Linux程序的,主要是這個工做環境是如何的?
原始問題以下:
問:
老師,能夠寫一篇文章介紹一下如何使用vim搭建好用的linux開發環境嗎?(好比vim如何設置快捷鍵能夠作到一鍵編譯和運行,經常使用的插件如何安裝等)
答:
我不會用vim,也從不用。
問:
據說實際工程中,能夠在windows下寫代碼而後放到linux下編譯,可是每改一個文件就要上傳到linux,好像很麻煩,肖老師能夠寫一篇文章介紹一下如何在windows寫linux下軟件的代碼的文章嗎?主要是如何管理文件。謝謝。
答:
嗯,好吧,我把我本身的工做習慣寫篇文章給你們看看。
個人回答:
和平同窗你好,嗯,看了你的問題,感受你很細心,由於不多有朋友會就開發環境,單獨提出問題,不過呢,不能否認,咱們開發軟件,首先碰到的就是開發環境,這個搞不順,後面的開發工做每每會受到很大影響,甚至,直接影響本身的工做效率和效果,所以,這也確實是一個須要仔細探討的話題。
那這裏,我就寫篇文章來說講個人開發習慣,先說啊,個人開發習慣有不少背景在裏面,是長期造成的一套開發習慣,本身以爲好用就行,我相信不少朋友都有本身的開發習慣,我呢,沒說我這個是聖旨,不能改的,你們徹底能夠結合本身的工做實際,總結本身的習慣。一句話:「合用就好!」
我呢,最開始學習C是用的TurboC2.0,那是DOS下的事情,90年吧,你們知道,TurboC2.0是有集成開發環境的,所以,初期我作C程序,基本上仍是習慣在IDE的輔助下工做,包括編譯和調試。
不過呢,95年開始,我使用6502宏彙編語言開發,這就完蛋了,我找不到一個好用的開發環境,沒有IDE,並且,因爲是交叉彙編,在5x86機器上寫代碼,利用交叉編譯器,編譯成6502的二進制代碼,而後傳到仿真器上,仿真器上有塊卡,能夠插在真實的任天堂遊戲機上,其實就是仿真了遊戲機的ROM卡部分,而後,遊戲機Reset,就開始工做,就能看到輸出結果。
這就帶來一個問題,我沒有好用的編輯器啊,96年整整一年,我都在打爛仗,這個用點,那個用點,嗯,用NotePad最多,當時都想哭了,呵呵。
還好,到了97年,微軟公司那會把MSC7.0生了級,升級到VC++4.2,這個但是一代經典,不管是MFC,Win32的支持,仍是IDE自己的特性,給咱們的感受都無與倫比,漂亮。我一下就愛上它了,呵呵。當即轉到這上面作開發工做。嗯,順便說一句,我正式轉到Windows95上工做,是96年末。之前的Windows3.1很差用,主要仍是在DOS下使用。
VC4.2的IDE環境有幾個優勢,很是突出:
一、工程管理,甭管什麼語言的源代碼文件,能夠直接創建一個工程來管理,這很方便,我一個遊戲十幾萬行,分屬在上百個asm文件裏面,若是無論理,會死人的。
二、自定義關鍵字高亮度顯示,這個很重要,我使用的是6502宏彙編,VC確定是沒有這個關鍵字的,不過,我寫了個自定義的文件,導入進去,就ok了,看起來很漂亮和醒目,關鍵是,本身不容易看錯。嗯,有個細節,我當時主要還在用BASIC語言,就是VB啦,對於BASIC語法很熟,我之前講過,我利用宏,作了一整套BASIC語言的宏,方便書寫彙編語言,搞得我6502彙編語言裏面,全是FOR、NEXT、PRINT什麼的,我把這些Basic的關鍵字也作了高亮,很好看。
三、外部編譯工具,VC確定是沒有辦法作這個6502交叉編譯的,不過,它提供了自定義工具,容許一鍵調用外部的「bat」批處理,實現編譯,這個很方便,嗯,我當時把它的快捷鍵都攔截成「Alt-F7」了,確實很舒服。
四、支持矩形塊拷貝,通常的編輯器,都是行拷貝,即只能選擇一行或者幾行拷貝,可是,不少時候,咱們在複製結構體的時候,或者不少有規律排列的文字的時候,好比,《0bug-C/C++商用工程之道》,裏面的任務池的任務,因爲採用程序三段論,通常定義TaskInit,TaskLoop,TaskExit,通常一排列就是以下模式:
static bool TravelTaskInitCallback(void* pCallParam,int& nStatus);
static bool TravelTaskLoopCallback(void* pCallParam,int& nStatus);
static bool TravelTaskExitCallback(void* pCallParam,int& nStatus);
你們看整齊不整齊?不過,問題來了,若是咱們只拷貝TravelTaskxxxxCallback這部份內容,矩形塊拷貝就很方便了,這在VC中一直沒有變過,就是按住Alt鍵拉塊,而後Ctrl-C拷貝就行了,而不須要拷貝3行,再來挑着刪除,這也是一個很經常使用的功能,很方便。
五、最重要的來了,VC4.2容許錄製和回播鍵盤宏,這個功能很重要,不少時候,咱們輸入大量的內容,須要用複製、粘貼命令,可是,若是這大量的資料,每筆之間只差一小點,可是又符合規律,怎麼辦?這就須要鍵盤宏。
這裏舉個例子吧,可能有點複雜,你們仔細看:
好比我在數組中輸入Item000、Item00一、、、Item999,共計1000個這種內容,拷貝確定不行。個人作法以下:
 
Code:
  1. 一、先準備10行Item000~Item009,每一個佔1行   
  2. 二、把這10個拷貝10份,就有了100個。   
  3. 三、我把光標弄到第二個Item000,即應該是Item010的位置。把光標放到行首。   
  4. 四、重要的來了,我開始錄製鍵盤宏,而後一點點把光標挪到Item000的第二個0的位置,把0替換爲1,即得到一個Item010,而後,我把光標調到下一行的行首。而後中止錄製宏。   
  5. 五、你們發現我得到什麼沒有?我得到了一個鍵盤宏,能夠把Item00x的第二個0,改爲1的宏。同時,我精心設計了光標位置,使每次播放宏後,光標位置剛好是下一次播放宏的起始點,這很重要。   
  6. 六、而後,我把這個宏播放9次,喏,你們能夠推測,我得到了Item010~Item019這十個對象。   
  7. 七、如法炮製,把0改1換成0改2,2x系列也有了,一直到9x。   
  8. 八、把這100個拷貝10份,就有了1000個對象,每100個內部的單元都是按順序,000~099排列好的。   
  9. 九、重要的又來了,我如法炮製,把光標挪到第二個Item000處,即應該是Item100這個位置。   
  10. 十、作個鍵盤宏,把0xx改爲1xx,重複99次,1xx系列就行了。   
  11. 十一、如法炮製,製做2xx~9xx,任務完成。   
你們以爲累不累?呵呵,其實這已經很輕鬆了,固然,做爲程序員,咱們還有一個辦法,本身寫段程序來生成上述文件,這天然能夠,不過,我當時水平不夠啊,呵呵,還沒想到用程序辦法呢,另外,這裏論述使用純粹的輸入技巧,來完成大量類似數據的輸入工做。這算個技巧吧,你們學學,我以爲有好處。
由於我以爲,一個好的程序員,首先要作個好的打字員。畢竟,我沒據說過哪一個公司爲每一個程序員配置一個祕書兼打字員的,呵呵。什麼東東都得本身敲進去。
上面的方法很重要,我作《隋唐演義》,裏面幾百個武將文官的屬性值,差很少接近60k的數據,我都是用上述方法輸入的,一個上午搞定。
這直接致使了,我之後評價程序編輯器,首先就看有沒有鍵盤宏功能,沒有就不用,很奇怪,VC6.0之後,引入了多個鍵盤宏錄製的概念,這致使錄製鍵盤宏不方便,無法作到一鍵錄製,一鍵回播。因此,我又找了第二個工具,UltraEdit32,這個工具的鍵盤錄製宏和播放容許自定義熱鍵,我通常習慣於定義Ctrl-Q爲錄製,Ctrl-W爲結束錄製,Ctrl-A爲回播1次,嗯,它還有個很大的好處,Ctrl-L,能夠指定回播次數,這樣,上面的實驗,我能夠直接寫個100,就回播100次,就省事多了。
所以,這麼多年,我寫程序,一直是VSIDE+UltraEdit32模式,基本就夠了。
嗯,說到用VSxxxxIDE,好比我如今用的是VS2008IDE,這裏面有個工具不能不提,Visual Assist這個工具必不可少,這個我原來沒用,是來西安後,這邊的同事推薦的,這是個好東東,幾乎能把全部命名空間相關的信息,如類中的方法,成員變量,都自動在輸入中彈出來,供你選擇,編寫基於類的C++程序就變得很方便。
嗯,這幾個,就算個人基本開發環境吧,這麼多年基本沒變過。
到了西安之後,因爲主要開發Linux程序,這個時候問題就來了,我不會vim咋辦哦?呵呵。
後來我看了一下,gcc要編譯的仍是.h和.cpp文件嘛,這個文件我是在哪一個系統編寫的,有什麼關係?我啊,接着用VSIDE來組織工程,編寫文件。
而後呢,我在Linux服務器上開個ftp服務,以及一個ssh服務,每次編寫好了,就ftp上傳到Linux服務器的個人home下,而後makefile好了,《0bug-C/C++商用工程之道》裏面講了個如何寫Makefile的故事,就是這麼來的,呵呵。
固然,文件都上去了,我putty,登陸ssh,而後轉到個人home目錄下,make,不就ok啦?
至於ftp工具,我其實沒用業界經常使用的湯姆貓什麼的,我本身一直習慣使用NortonCommand這個工具,從DOS就開始用,到了Widnows下,如今是TotalCommand,這個工具用來看文件(F3),編輯文件(F4),拷貝(F5)和轉移/更名(F6)很方便,一直就用着,嗯,從開始到如今,差很少也二十多年了。
這個TotalCommand從4.x版本就開始支持ftp了,雖然不是很完美,可是,做爲傳輸一點程序代碼文件是夠了,我一直就用這個工具。
其實我開發就這麼簡單,上述幾個簡單工具,再加上點技巧,就ok了。這裏面我就養成一個習慣,每次敲完程序,通常在VC下就是一個F7,先編譯一下看看,再上傳Linux作二次gcc的make,這樣長此以往,我寫的代碼老是先用VC編譯運行檢查,再用gcc編譯運行檢查,因此,《0bug-C/C++商用工程之道》說個人工程庫是跨平臺的,不是開玩笑的,真的都是兩個平臺都run過。
實際上是3個平臺啦,我買過一個arm9試驗板,它也是交叉編譯,就是得在Linux環境下,使用arm-linux-gcc編譯,再傳送過去運行,我是這麼作的:
 
Code:
  1. 一、使用VSIDE編程,製做makefile。   
  2. 二、使用VM運行一個Linux虛擬機,我通常喜歡用Fedora9,在裏面安裝arm-linux-gcc編譯環境   
  3. 三、ftp到linux下的home   
  4. 四、putty登陸,到目錄下去make   
  5. 五、從linux控制檯,再ftp登陸arm9的linux,把編譯好的可執行文件上傳過去   
  6. 六、arm小機器不支持ssh,我就從windows的超級終端,或者linux的控制檯,二次telnet登錄arm機器,run程序。   
  7. 七、完成工做,呵呵,你們看麻不麻煩?不過,這樣也作成了一些工程。個人0bug工程庫在arm機器下驗證就是這麼作的。   
就是這麼簡單,因爲我始終用我熟悉的幾個工具,到哪一個平臺都沒有變過,所以,我程序代碼的敲入速度始終比較恆定,算比較快的。
這不像有些朋友,一說到Linux下,就必須得用vim什麼的,恰恰vim比較老,對於現代程序編輯器的一些功能,好比鍵盤宏什麼的支持很差,不少須要配置,編程序,很麻煩,我是程序員,寫程序是第一要務,沒有那麼多時間跑去學工具,因此就沒有學啦,呵呵。
嗯,可是,我之前的項目組,有幾個同事,就是堅持用vim,我沒說啥,畢竟,用啥工具是本身的自由,看他們編程序的時候,十個指頭像蝴蝶同樣在鍵盤上飛,也煞是好看。不過,就是效率過低,出錯率高,不少時候,項目進度都受影響,後來我勸他們,不必耍酷,仍是用VC吧,好用得多,他們也慢慢都調整成我上面的習慣了,如今效率好多了。
就這麼簡單,呵呵。
這裏面還有個須要提醒你們的地方,在VC下,咱們有很方便的調試工具,什麼單步追蹤什麼的,可是,gcc下除非用gdb,不然基本沒戲。這就麻煩了,arm9機器支不支持gdb我還不知道呢,事實上,gdb我一直就沒有學,爲啥?我以爲很差用。
其實程序調試這件事,抽象來看,我認爲一個取決與設計,一個取決與檢查中間值,沒多複雜。
一、所謂設計,表示程序員須要精確控制本身的程序思想,走到哪一步,一個變量應該是什麼值,要心中有數,這樣才能肯定程序運行時正確與否。
二、所謂檢查,表示程序員要有手段「看到」變量的中間值,以便比較對錯。
你們去想,程序調試是否是這麼回事?
設計這個很差說,取決與程序員自己的能力,但「看到」,這個方法就太多了,沒有哪一個法律規定,必定要依賴IDE開發環境才能「看到」變量中間值,我和同事通常都使用「print-大-法」,呵呵,這個《0bug-C/C++商用工程之道》書上有講的,你們覺得我在書中專門花了兩個章節,作了個Debug類和一個Syslog類,是作什麼,其實就是本身作調試工具,隨時能夠把感興趣的變量中間值打印到屏幕上或者磁盤上,方便回過頭來比較,檢查bug。
這個Debug類甚至是整個工程庫的基礎,它是最底層的類,它的對象,在進程一塊兒動就實例化,在全部其它模塊退出完成後析構,其重要性,不言而喻。
跟你們說句老實話吧,這麼多年,其實我雖然一直用VCIDE在開發,但真沒怎麼去依賴F九、F10什麼調試功能,基本上都是依賴本身的Debug類實現的調試。
緣由很簡單,我作的是高速服務器,高性能數據內核,並行系統,系統運行時,網絡上幾百上千個報文隨時在跑着,幾十上百條線程,進程,甚至服務在工做,不少時候,bug都是這麼多因子互相影響的結果,而不是某個單獨程序的bug,我跑去單步跟蹤,這邊一句話沒有跑完,那邊幾百個信令都過去了,能夠說,一個現場在被我看到的時候,已經被宣告無效了,我一直說單步跟蹤在並行環境調試中無效,就是這個道理。
那怎麼辦?「print-大-法」唄,運行時不去影響程序的工做,不中斷,不阻塞,全部的變量所有打印到日誌文件裏面,過後來分析,能夠說,我最近幾年的debug,都是這麼分析解決的,確定不能用單步跟蹤。這就是爲何我歷來不學習gdb的緣由,由於沒用。
嗯,當我本身有一套很完善的程序輸入習慣環境,同時本身的工程庫也提供很完善的自校驗機制,你們以爲我跨平臺開發還難嗎?呵呵。
喏,上面就是我本身的一點心得,包括我本身作開發,嗯,如今我計算機上正在作的一個HashCache,就是以上面講的工做模式開發,習慣了,速度也很快。
好了,先說到這裏吧,你們有問題能夠再問。
肖舸
相關文章
相關標籤/搜索