2008å¹´8月18日的ä¸çœ 夜最终æˆä¸ºäº†éš¾å¿˜çš„时刻。看æ¥å›½äººé’çæ•°å—8也许真的ä¸æ˜¯å®Œå…¨æ²¡æœ‰é“ç†ã€‚
Â
Memory leak,而且是AddReftå’ŒRelease带æ¥çš„memory leakã€‚å½“ä½ é¢å¯¹286ä¸ªè°ƒç”¨æ ˆçš„æ—¶å€™ï¼Œä½ å°±èƒ½ä½“ä¼šåˆ°äººä¸Žç¥žä¹‹é—´çš„åŒºåˆ«ã€‚
Â
讨论,和XLçƒçƒˆåœ°è®¨è®ºã€‚决定写一个工具æ¥å¸®åŠ©æˆ‘解决当å‰çš„问题——ä¸çŸ¥é“å‰æ™¯å¦‚何,但似乎感觉到这是唯一的选择。
Â
第一次的结果出æ¥ï¼Œç‰äºŽç™½å¹²ï¼Œæ²¡æœ‰ä»»ä½•æœ‰ç”¨çš„ä¿¡æ¯ã€‚下ç时间到了,简å•åœ°åŽ»äº†teriyaki。然åŽèµ¶å›žæˆ‘çš„window office,继ç»æˆ˜æ–—。
Â
深刻地体会了一把什么å«åšâ€œç†è®ºè”系实际â€ã€‚ç†è®ºçŸ¥è¯†æˆ‘认为自己还是充足的,è¦ä¸ä»–们为什么ä¸hire一åšå£«ç”Ÿå‘¢ï¼Ÿè¿™è‡³å°‘说明我的è€æ¿ä»¬è¿˜æ˜¯è§‰å¾—我的知识是够用的。花了些时间分æžäº†ä¸€ä¸‹å®žé™…的问题。çªç„¶ï¼Œæƒ³åˆ°äº†ä¸€ä¸ªå…³é”®çš„æ•°æ®ç»“构——éžå¸¸é€‚åˆå½“å‰è¿™ä¸ªé—®é¢˜çš„æ•°æ®ç»“构。于是,ç†è®ºå¼€å§‹å’Œå®žé™…结åˆã€‚事实è¯æ˜Žï¼ŒåŽé¢çš„è·¯å› æ¤è€Œå¥½èµ°äº†è®¸å¤šã€‚当build出了这个数æ®ç»“构之åŽï¼Œåˆå¦‚何下手åšåˆ†æžå‘¢ï¼Ÿæˆ–者说,我用什么办法让我的工具告诉我问题出在哪里呢?å„ç§â€œæƒ³åƒâ€ä¸çš„ç†è®ºéƒ½æ¶ŒçŽ°å‡ºæ¥äº†ï¼Œä½†æ˜¯æ²¡è§åˆ°æœ‰ä»€ä¹ˆå¥½çš„æ€è·¯ã€‚åªå¥½åå¤æ£€éªŒæ•°æ®ç»“构,看看实际的数æ®åˆ°åº•æœ‰ä»€ä¹ˆç‰¹ç‚¹ã€‚终于,放弃对最“完备â€çš„解决方案的追求,改为基于最å¯èƒ½çš„情况的å‡è®¾ã€‚
Â
这次写工具用的是C#,一个å¯ä»¥è®©ä½ 完全集ä¸äºŽå…·ä½“问题,而ä¸æ˜¯å„ç§åŸºç¡€æ•°æ®ç»“构的超级è¯è¨€ã€‚事实上,这是一个å‰æ‰€æœªæœ‰çš„ç¼–ç 体验。按ç†è¯´ï¼Œç¼–ç çš„ç»éªŒä¹Ÿä¸å°‘了,但这一次真的是实践了XLä¸æ–å‘我介ç»çš„,从è€æ¿é‚£é‡Œå¦æ¥çš„ç¼–ç 秘ç±ã€‚用他的è¯è¯´ï¼Œå«åšâ€œæ£è§„军,阵地战â€ï¼ˆå½“我å¬åˆ°â€œé˜µåœ°æˆ˜â€è¿™ä¸ªè¯çš„时候,脑å里浮现的是å¦å…‹é…æœºæžªå…µåŠ MM)。所有的编ç 基于必è¦çš„å‡è®¾ï¼Œç”¨Assertå‘所有ä¸æ»¡è¶³å‡è®¾çš„情况说“Noâ€œã€‚è¿™æ ·åšçš„结果,就是我竟然没有调试过我的工具。出现了Assertå°±æ„味ç€è¾“å…¥ä¸è§„范或者是必è¦çš„改动。ä¸æ˜¯æˆ‘刻æ„地ä¸åŽ»è°ƒè¯•ï¼Œè€Œæ˜¯è¿™æ ·çš„“阵地战â€ï¼Œä¸€ä¸‹å就知é“问题出在哪里,没有调试的必è¦ã€‚
Â
当消ç了所有的Assert之åŽï¼Œæˆ‘的工具å‘我展示了它的æˆæžœï¼šä»Ž286ä¸ªè°ƒç”¨æ ˆä¸ï¼Œæ‰¾åˆ°äº†6个å¯ç–‘çš„æ ˆã€‚è€Œè¿™6个å¯ç–‘çš„æ ˆä¸ï¼Œæœ‰5ä¸ªæ ˆé¡¶éƒ½æ˜¯éžå¸¸åŸºç¡€çš„函数,没有什么ç†ç”±ä¼šå¼•å…¥memory leak或者说,它们ç†åº”如æ¤ï¼šå› 为它们å¯èƒ½å°±æ˜¯ä¸ºäº†åˆ›å»ºæˆ–清ç†å¯¹è±¡ï¼Œä»Žè€Œæ˜¯memory leak的疑似患者。åªå‰©ä¸‹æœ€åŽä¸€ä¸ªã€‚当时我并没有对这个工具抱多大的信心。但当我查看这最åŽä¸€ä¸ªæ ˆçš„æ ˆé¡¶å‡½æ•°çš„ä¿®æ”¹è®°å½•æ—¶ï¼Œçªç„¶å‘现有若干Releaseè¢«åŽ»æŽ‰ã€‚ä¼¼ä¹Žæ˜¯æ–°åŠ å…¥çš„ä»£ç 没有完全清ç†å¹²å‡€ã€‚事实è¯æ˜Žï¼Œæœ€åŽçš„修改éžå¸¸ç®€å•ï¼Œåˆç†ï¼Œè€Œä¸”æ£æ˜¯åœ¨é‚£ä¸ªæ ˆçš„æ ˆé¡¶å‡½æ•°é‡Œé¢ã€‚
Â
如果用一å¥è¯æ¥å½¢å®¹å½“时的感觉,那一定是康托的å言:“Je le vois, mais je ne crois pas.†(I see it but I cannot believe it) 。康托说这è¯ï¼Œæ˜¯å› 为他è¯æ˜Žäº†ä¸€ä¸ªæ£æ–¹å½¢ä¸Šçš„点和它一æ¡è¾¹ä¸Šçš„点的个数一边多。我说这è¯ï¼Œæ˜¯å› 为在我还没有完全明白为什么我的工具能有效之å‰ï¼Œå°±å·²ç»è¢«å®ƒçš„效果所震撼。
Â
今天白天,è§åˆ°äº†è€æ¿ï¼Œå‘他介ç»äº†æˆ‘的工作。è€æ¿æžœç„¶æ˜¯æŠ€æœ¯ç‹‚类型。平时的事情他都少有时间多èŠï¼Œè¿™æ¬¡åˆ™å¾ˆæœ‰å…´è‡´åœ°è®¤çœŸå¬æˆ‘介ç»ã€‚他很高兴,特别是这个leak并ä¸åœ¨æˆ‘们组负责的模å—里。他也å¦è¨€ï¼Œåœ¨ä¸€ä¸ªä¸ç†Ÿæ‚‰çš„模å—里找memory leak确实是nightmareã€‚ä¹Ÿè®¸è¿˜æœ‰ä¸€ä¸ªåŽŸå› ï¼šè¿™ä¸ªé—®é¢˜æ˜¯ä»–çš„è€æ¿å¼•å…¥çš„。
Â
这件事情给我带æ¥äº†ä»¥ä¸‹çš„å¯å‘:
- å¾ˆå¤šæ—¶å€™ï¼Œä½ æ˜¯ä¸çŸ¥é“ä½ æ‰€æŽŒæ¡çš„知识什么时候å¯ä»¥å¸®åŠ©ä½ 。所以对å„ç§çŸ¥è¯†ï¼Œè¦ä¹ˆæŠ•èµ„,è¦ä¹ˆæ”¾å¼ƒã€‚ä¸å¯æŠ•æœºã€‚
- ä¸è¦æƒ³ç€â€œç»ˆæžâ€è§£å†³æ–¹æ¡ˆï¼Œè‡³å°‘å¯¹å·¥ç¨‹å¸ˆæ˜¯è¿™æ ·çš„ã€‚ä»Žæœ€å¸¸è§çš„å‡è®¾ï¼Œè€Œä¸æ˜¯æœ€çº¯ç²¹çš„å‡è®¾å‡ºå‘ï¼Œä½ ä¼šèµ°å¾—æ¯”æƒ³åƒçš„æ›´è¿œ
- è¦â€œæ£è§„军,阵地战â€ã€‚(机械化?)
- è¦å…·ä½“问题,具体分æžã€‚所谓具体,ä¸æ˜¯è¯´â€œè¿™ä¸€ç±»é—®é¢˜â€ï¼Œè€Œæ˜¯è¯´â€œè¿™ä¸€ä¸ªé—®é¢˜â€ã€‚了解具体问题的特点,算是知己知彼。解决一个问题,胜过解决ä¸äº†ä»»ä½•é—®é¢˜ã€‚
- 终于想到了如何è¯æ˜Žæ£æ–¹å½¢æ‹¥æœ‰å’Œå®ƒä¸€æ¡è¾¹ä¸€æ ·å¤šçš„点。下次blogå†å†™å¦‚何è¯æ˜Žï¼Œæœ‰å…´è¶£çš„朋å‹è°ˆè°ˆä½ 的想法啊。
The people bowed and prayed to the XML God they made.
                                                                  — tianlynn
《æ¥æ¥ä¸ºè¥ï¼Œæžå®šç¬¬ä¸€ä¸ªmemory leak》有 1 条评论