Group Meeting - Some tracing tools Dept. Computer Science and Information Engineering, NTU 20081125 Yi-Siang Huang
Group Meeting- Some tracing tools
Dept. Computer Science and Information Engineering, NTU
20081125
Yi-Siang Huang
Outline
Trac e c o d e …
讀書心得
Trac e c o d e …
讀書心得
Saying First
我們身邊有總是滿坑滿谷的 co d e …
為了人類的進步跟世界的和平 苦命工程師通常要「懂 」那些亂七八糟的 c o d e 到底在幹麼
怎樣 trac e c o d e 比較有效率呢 ???
Saying First (cont.)
其實有些吐喔可以給我們一隻手 !
GU I ?? 非 GU I ?????
Vim + plugin
大致有下面幾種- C tags , C s c o p e , taglis t, …
e m ac s 也有支援 ( 非 vim - o nly)
ub untu 都可以用 ap t- ge t 取得
Vim + plugin (cont.)
先來談談 vim …
- ctrl+w n … 分割視窗- ctrl+w s (:sp) … 開啟同一檔案在新分割視窗 (:e 可開別的檔案 )
- ctrl+w q (:q) … 關閉視窗
- ctrl+w [↑|↓] … 切換視窗- ctrl+w [+|-] … 調整視窗大小
- [[ / ]] … 跳到前 / 後一個函數
- [I / ]I … 放在關鍵字上可跳到同檔案中上 / 下次出現的位置
- gf … 放在 include 的檔案名稱上時即可開啟該檔案
( :set path+=/usr/include ) ctrl + O 回到原檔案
- [D … 承接上面的 gf, 可展示出 macro 的定義
- :set cursorline … 在 vim 中開啟基準線
Vim + plugin (cont.)
C tags
• 幫我們快速找到變數和函數宣告的地方 !
• apt-get ctags 即可安裝
• 產生檔案列表 :find . –name “*.c” –o –name “*.h” > ctags.files產生 index : ctags –L ctags.files
• 使用 :
Ctrl + ] … 跳到 function body( 可跨檔案 )
Ctrl + t … 回到上一次
:help tags … 查看說明
Vim + plugin (cont.)
C s c o p e
• 可以看成是 Ctags 的加強版 !
• 下載 cscope_maps.vim 到 ~/.vim/plugin 即安裝完成
• 產生檔案列表 :find . –name “*.c” –o –name “*.h” > ctags.files產生 index : ctags –bq –i ctags.files
• 使用 :
:cs find … 搜尋 functon ( 還有很多功能 )
Ctrl + O … 回到上一次
:help cscope … 查看說明
Vim + plugin (cont.)
taglis t
• 讓 vim 出現新分割視窗協助搜尋 ( 加強 ctags 功能 本質上仍是 ctags)
• apt-get excberant-ctags 並下載 taglist.vim 到 ~/.vim/plugin 即安裝完成
• 產生檔案列表以及產生 index 同 ctags
• 會列出該檔案中所有變數以及函數名稱
• 使用 :
:TlistToggle … 開啟輔助視窗
Ctrl + w + [←|→] … 切換視窗方式
Vim + plugin (cont.)
glo b al
• 可和 vim 結合 但比較特別的是可以產生網頁格式的樹狀結構網頁 !
• 支援多種語言 (php, perl, pyhton, …)
• apt-get global 即安裝完成
• 在要產生程式碼樹的地方下 gtags 即可產生索引檔接著下 htags –Fnsa 產生程式碼樹 其後會看到 HTML 目錄
GUI tools
大致有下面幾種- Ks c o p e , Anjuta, Kd e ve lo p , …
大致上差異不大( 都宣稱和 s o urc e in s igh t 差不多強 )
geany – 一個在程式語法上加強的編輯器
人月神話 :軟體專案管理之道
1975 年初版1995 年發行紀念版
…我們常常碰到 容易 d e lay 而且有抓不完的 b ug
老闆或組長要你畫押進度 但是你不敢
不斷不斷的加班 持續很長的一段時間
意志消沈 不幸的事情一再發生
浪費時間 一堆聰明人淨幹些蠢事
…想逃但是逃不出來
「對航海的人來說 擱淺的船就是燈塔」< 荷蘭諺語 >
但是「你所得到的權力並不足以承擔你所扛下的責任 」 < 管理學 >
把事情做好 得到更大的權力 承擔更大的責任
…焦油坑
…有些糟糕的事情總會發生 一切都會進行的順利 ! …真的嗎
… 雖然畫押了 但我真的做的到嗎 ?
人月神話 !!!
Delay 了 ! 快來人啊啊啊啊啊啊啊啊啊 !!!!
… 事實上Brooks 定律「在一個已經 delay 的 project 中增加人手
只會讓他更落後 !」
「人月神話」的迷思 花費的時間
- 專案有多少連續性限制投注的人力
- 可以被切分成多少獨立的子工作
… 優秀的團隊 ? 程式設計師間的生產力差異極大 !
經驗多寡 … 影響不如想像中大
兩難在於要兼顧工作效率跟概念整體性
H arle n Mills 的架構- 如外科手術團隊- 短小精悍的團隊比較棒
所以要專制還是民主 ?
保持概念整體性最好的方式就是其出自少數人的一致決定
架構是「做什麼」而實做是「如何做」
「第二系統」的出現 !
巴別塔為何失敗 ?
根據記載 巴別塔成功的條件明確目標 有人力 很多材料 足夠時間 沒有限制技術 足夠
缺少的是溝通和組織 !
要是失敗了該怎辦 ?不需要煩惱是否該先做一個試探性的系統
然後將之丟棄 目的只是吸收經驗因為你一定會丟掉第一次做出來的東西「把必然的一次失敗納入正式計畫之中」
放心 !
現在在你面前的 s p e c 一定會改變 !
…失敗失敗失敗 修好的 b ug 很可能會導致其他 b ug 出現 !
Pas c al :
「任何事物總是在最一開始的時候最完美」
…大災難啊為什麼專案會落後一年
因為每次都落後一天
程式除了寫給電腦看之外 也是寫給人看的請維持良好的寫作習慣 !
有沒有銀彈 !?
軟體開發的本質性和附屬性
因為本質性 大幅提昇開發速度有難度
軟體是人寫的 不是上帝 !
人月神話二十年勿忘初衷 !
架構設計師要綜觀全局而非細節
社會性問題通常超過技術性問題
一些反思- 即使知道這些 開發真能變得更順利 ?
- 真的沒有銀彈 ??