作者giive (lala)
看板CSSE
標題Re: [問題] Tracking code 的工具?
時間Sat Jul 2 09:01:47 2005
reader大討論的議題很大
我就只回小一點的議題:p
[恕刪]
※ 引述《reader (讀者)》之銘言:
: 好像又離題了,總之,對於除錯這件事,我的結論是要用整體的觀點來做
: 系統化的有效管理,不要去依賴除錯工具,這樣我們將永遠也不能學會讓
: 程式碼寫得嚴謹。
這點我相當的贊同
: 至於如何有效閱讀程式碼,我的結論是,買高解析度的大螢幕才是正道,
: 沒有任何軟體工具比得上大螢幕的巨大而直接的效用,我現在使用 19 吋
: TFT 螢幕,解析度 1280 * 1024, 用 proggy tiny 字型在 EditPlus 下
: 可以有超過 200 字元的寬度,超過 80 行的高度。
這個我反而不是很喜歡
以前覺得螢幕大,code應該一次看的比較多
但是當我使用17'LCD之後
我發現到其實看的code變多,其實並不會增加performance
因為資料量變多,search的時間相對也會變慢
人的眼睛能注意的東西是有限的,放那麼多code只會增加眼睛的overhead
目前採用vim的folding,跟註解技巧
他可以讓螢幕顯示該顯示,以及我想看到的東西就好
舉個例子, 假設我在改ls的code裡面一個叫做mastercmp的function
他是位於ls.c裡面的730行左右
當我利用folding改良之後
+--131 lines: 宣告跟include-------------------------------------------------------
+---288 lines: int main(int argc, char *argv[])-----------------------------------
+-- 69 lines: static void traverse(int argc, char *argv[], int options)-----------
+--242 lines: static void display(FTSENT *p, FTSENT *list)------------------------
+-- 6 lines: mastercmp 的註解----------------------------------------------------
static int
mastercmp(const FTSENT **a, const FTSENT **b)
{
int a_info, b_info;
a_info = (*a)->fts_info;
if (a_info == FTS_ERR)
return (0);
b_info = (*b)->fts_info;
if (b_info == FTS_ERR)
return (0);
if (a_info == FTS_NS || b_info == FTS_NS)
return (namecmp(*a, *b));
if (a_info != b_info &&
(*a)->fts_level == FTS_ROOTLEVEL && !f_listdir) {
if (a_info == FTS_D)
return (1);
if (b_info == FTS_D)
return (-1);
}
return (sortfcn(*a, *b));
}
+-- 18 lines: static u_quad_t makenines(u_long n)---------------------------------
注意到了嗎?
上述的只有30行的大小,但是他其實包含了780行的code
而且除了我正在改的function是詳細顯示之外
function其他就用一行帶過
但是其實在coding時,我也只需要那一行 input and output的資訊即可
善用這個技巧,我寫程式很少用page UP/DOWN的
因為再大的code我都只需要一到兩個畫面就可以完整顯示
: 並且我極用力地精減程式碼,使用大量的巨集和 inline function, 它們
: 基本上都可以寫在一行裡 (200 字元的寬度往往足夠寫下 10 行敘述),
: 到最後幾乎所有模組,都在一兩個畫面中就完全呈現。
: 至此,我已不需要任何輔助工具,再怎樣也不會比眼睛一掃來得快,並且
: 區塊之間,也都會手動加上輔助用的、長短不一的區隔線,不同的長度有
: 不同的意思,並不會很容易看到眼花。
reader大可不可以show一下你的code
還蠻好奇長的什麼樣子的:p
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.207.173