程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 我開發Linux服務程序的工作環境搭配

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

編輯:關於C語言

嗯,這是和平同學的點題作文了,呵呵,他非要了解我是怎麼開發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環境有幾個優點,非常突出:
1、工程管理,甭管什麼語言的源代碼文件,可以直接建立一個工程來管理,這很方便,我一個游戲十幾萬行,分屬在上百個asm文件裡面,如果不管理,會死人的。
2、自定義關鍵字高亮度顯示,這個很重要,我使用的是6502宏匯編,VC肯定是沒有這個關鍵字的,不過,我寫了個自定義的文件,導入進去,就ok了,看起來很漂亮和醒目,關鍵是,自己不容易看錯。嗯,有個細節,我當時主要還在用BASIC語言,就是VB啦,對於BASIC語法很熟,我以前講過,我利用宏,做了一整套BASIC語言的宏,方便書寫匯編語言,搞得我6502匯編語言裡面,全是FOR、NEXT、PRINT什麼的,我把這些Basic的關鍵字也做了高亮,很好看。
3、外部編譯工具,VC肯定是沒有辦法做這個6502交叉編譯的,不過,它提供了自定義工具,允許一鍵調用外部的“bat”批處理,實現編譯,這個很方便,嗯,我當時把它的快捷鍵都攔截成“Alt-F7”了,確實很舒服。
4、支持矩形塊拷貝,一般的編輯器,都是行拷貝,即只能選擇一行或者幾行拷貝,但是,很多時候,我們在復制結構體的時候,或者很多有規律排列的文字的時候,比如,《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行,再來挑著刪除,這也是一個很常用的功能,很方便。
5、最重要的來了,VC4.2允許錄制和回播鍵盤宏,這個功能很重要,很多時候,我們輸入大量的內容,需要用復制、粘貼命令,但是,如果這大量的資料,每筆之間只差一小點,但是又符合規律,怎麼辦?這就需要鍵盤宏。 這裡舉個例子吧,可能有點復雜,大家仔細看:
比如我在數組中輸入Item000、Item001、、、Item999,共計1000個這種內容,拷貝肯定不行。我的做法如下:
  Code:

  1. 1、先准備10行Item000~Item009,每個占1行   
  2. 2、把這10個拷貝10份,就有了100個。   
  3. 3、我把光標弄到第二個Item000,即應該是Item010的位置。把光標放到行首。   
  4. 4、重要的來了,我開始錄制鍵盤宏,然後一點點把光標挪到Item000的第二個0的位置,把0替換為1,即獲得一個Item010,然後,我把光標調到下一行的行首。然後停止錄制宏。   
  5. 5、大家發現我獲得什麼沒有?我獲得了一個鍵盤宏,可以把Item00x的第二個0,改成1的宏。同時,我精心設計了光標位置,使每次播放宏後,光標位置恰好是下一次播放宏的起始點,這很重要。   
  6. 6、然後,我把這個宏播放9次,喏,大家可以推測,我獲得了Item010~Item019這十個對象。   
  7. 7、如法炮制,把0改1換成0改2,2x系列也有了,一直到9x。   
  8. 8、把這100個拷貝10份,就有了1000個對象,每100個內部的單元都是按順序,000~099排列好的。   
  9. 9、重要的又來了,我如法炮制,把光標挪到第二個Item000處,即應該是Item100這個位置。   
  10. 10、做個鍵盤宏,把0xx改成1xx,重復99次,1xx系列就好了。   
  11. 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. 1、使用VSIDE編程,制作makefile。   
  2. 2、使用VM運行一個Linux虛擬機,我一般喜歡用Fedora9,在裡面安裝arm-linux-gcc編譯環境   
  3. 3、ftp到linux下的home   
  4. 4、putty登錄,到目錄下去make   
  5. 5、從linux控制台,再ftp登錄arm9的linux,把編譯好的可執行文件上傳過去   
  6. 6、arm小機器不支持ssh,我就從windows的超級終端,或者linux的控制台,二次telnet登陸arm機器,run程序。   
  7. 7、完成工作,呵呵,大家看麻不麻煩?不過,這樣也做成了一些工程。我的0bug工程庫在arm機器下驗證就是這麼做的。   
就是這麼簡單,由於我始終用我熟悉的幾個工具,到哪個平台都沒有變過,因此,我程序代碼的敲入速度始終比較恆定,算比較快的。 這不像有些朋友,一說到Linux下,就必須得用vim什麼的,偏偏vim比較老,對於現代程序編輯器的一些功能,比如鍵盤宏什麼的支持不好,很多需要配置,編程序,很麻煩,我是程序員,寫程序是第一要務,沒有那麼多時間跑去學工具,所以就沒有學啦,呵呵。 嗯,但是,我以前的項目組,有幾個同事,就是堅持用vim,我沒說啥,畢竟,用啥工具是自己的自由,看他們編程序的時候,十個指頭像蝴蝶一樣在鍵盤上飛,也煞是好看。不過,就是效率太低,出錯率高,很多時候,項目進度都受影響,後來我勸他們,沒必要耍酷,還是用VC吧,好用得多,他們也慢慢都調整成我上面的習慣了,現在效率好多了。 就這麼簡單,呵呵。 這裡面還有個需要提醒大家的地方,在VC下,我們有很方便的調試工具,什麼單步追蹤什麼的,但是,gcc下除非用gdb,否則基本沒戲。這就麻煩了,arm9機器支不支持gdb我還不知道呢,事實上,gdb我一直就沒有學,為啥?我覺得不好用。 其實程序調試這件事,抽象來看,我認為一個取決與設計,一個取決與檢查中間值,沒多復雜。
1、所謂設計,表示程序員需要精確控制自己的程序思想,走到哪一步,一個變量應該是什麼值,要心中有數,這樣才能確定程序運行時正確與否。
2、所謂檢查,表示程序員要有手段“看到”變量的中間值,以便比較對錯。
大家去想,程序調試是不是這麼回事? 設計這個不好說,取決與程序員本身的能力,但“看到”,這個方法就太多了,沒有哪個法律規定,一定要依賴IDE開發環境才能“看到”變量中間值,我和同事一般都使用“print-大-法”,呵呵,這個《0bug-C/C++商用工程之道》書上有講的,大家以為我在書中專門花了兩個章節,做了個Debug類和一個Syslog類,是做什麼,其實就是自己做調試工具,隨時可以把感興趣的變量中間值打印到屏幕上或者磁盤上,方便回過頭來比較,檢查bug。
這個Debug類甚至是整個工程庫的基礎,它是最底層的類,它的對象,在進程一起動就實例化,在所有其它模塊退出完成後析構,其重要性,不言而喻。
跟大家說句老實話吧,這麼多年,其實我雖然一直用VCIDE在開發,但真沒怎麼去依賴F9、F10什麼調試功能,基本上都是依賴自己的Debug類實現的調試。 原因很簡單,我做的是高速服務器,高性能數據內核,並行系統,系統運行時,網絡上幾百上千個報文隨時在跑著,幾十上百條線程,進程,甚至服務在工作,很多時候,bug都是這麼多因子互相影響的結果,而不是某個單獨程序的bug,我跑去單步跟蹤,這邊一句話沒有跑完,那邊幾百個信令都過去了,可以說,一個現場在被我看到的時候,已經被宣告無效了,我一直說單步跟蹤在並行環境調試中無效,就是這個道理。 那怎麼辦?“print-大-法”呗,運行時不去影響程序的工作,不中斷,不阻塞,所有的變量全部打印到日志文件裡面,事後來分析,可以說,我最近幾年的debug,都是這麼分析解決的,肯定不能用單步跟蹤。這就是為什麼我從來不學習gdb的原因,因為沒用。 嗯,當我自己有一套很完善的程序輸入習慣環境,同時自己的工程庫也提供很完善的自校驗機制,大家覺得我跨平台開發還難嗎?呵呵。 喏,上面就是我自己的一點心得,包括我自己做開發,嗯,現在我計算機上正在做的一個HashCache,就是以上面講的工作模式開發,習慣了,速度也很快。 好了,先說到這裡吧,大家有問題可以再問。 =======================================================
在線底價購買《0bug-C/C++商用工程之道》
直接點擊下面鏈接或拷貝到浏覽器地址欄)
http://s.click.taobao.com/t_3?&p=mm_13866629_0_0&n=23&l=http%3A%2F%2Fsearch8.taobao.com%2Fbrowse%2F0%2Fn-g%2Corvv64tborsvwmjvgawdkmbqgboq---g%2Cgaqge5lhebbs6qzlfmqmttgtyo42jm6m22xllqa-------------1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10%2C11%2C12%2C13%2C14%2C15%2C16%2C17%2C18%2C19%2C20---40--coefp-0-all-0.htm%3Fpid%3Dmm_13866629_0_0 肖舸

本文出自 “肖舸的blog” 博客,請務必保留此出處http://tonyxiaohome.blog.51cto.com/925273/304769

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved