作者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