标签 ‘编译’

222009

项目的rc文件这两天出了大问题:持续不断的增长。
而且还是以每次改动10M的数量级增长。
编译出来的文件也从开始的400k暴涨到9.5M。

于是打开rc文件查探缘由。发现两个用到MS FlexGrid 6.0的控件资源有问题,一个长达8M,另一个更是达到了恐怖的20多M。

于是搜索解决途径。在CSDN上有人说也遇到了类似问题,是采取不用这个控件的方法解决的。不甘心,也不可能采取这样的方案。于是继续换英文关键字查找。终于找到了。里面一哥们说,把成串的0删掉就可以了。

于是动手尝试。发现对于比较少的0,确实有效。但是一次删除上kw的,就怎么也不能正常加载控件。

转回头尝试CSDN上的方法,先把超长的控件从Dialog中删除,保存RC。发现RC文件骤降到几十K,果然有效。再重新添加之后,RC也只不过长了数百字节。修改成功!!

所以,对付这种情况最有效的办法就是:
1.记住出错的FlexGrid控件的主要属性。
2.删除FlexGrid控件实例。保存RC文件。
3.重新添加FlexGrid控件,恢复属性。
4.大功告成!!

092007

目前在日本項目組,用正體寫注釋(簡體經常出現無法顯示的情況),再由PL翻譯成日文.因此就懶得切換了(本文在溜號時間斷斷續續做成).看不懂的可以提問,但是俺不保證會回答.

干鳥快兩年的QA,對于質量保證沒學會多少,卻沾上了不少嘴高手低,橫挑鼻子豎挑眼滴毛病.這回換組真正碼的時候,才發現遇到好多雞零狗碎的問題.簡單記錄一下,怕忘.再說,中年妇女心得,我便心不得?

1) LINK2001失敗
可能原因:
α,類聲明時,頭文件裏的函數的參數類型定義與實現時的不符(某些時候不會報錯,但是會導致聲明該類的時候鏈接錯誤)
β,類不是MFC擴展類(AFX_EXT_CLASS)
γ,大小寫問題導致.其實與第一個是同一回事,比如在類裏聲明的是GetValue(),而在別處想以Getvalue調用,編譯不會出錯,但是在鏈接的時候會出錯.
δ,靜態變量未聲明
ε,目標/lib或/dll路徑只讀
ζ,Debug版試圖引用Release版lib,或者Release版試圖引用Debug版lib時
η,使用unicode卻沒有在unicode選項下編譯
θ,使用靜態庫卻沒有把庫加入工程

2) 調試時候的內存錯誤
α,聲明的指針沒有初始化,是最好找的問題
β,資源重復釋放(重復刪除句柄),也是很好找的問題
γ,數組下標越界
δ,引用空指針/野指針
ε,錯誤的函數調用,比如誤把itoa()的返回值當成字符串
ζ,錯誤的返回值.比如返回值類型string的函數,返回false也能夠編譯通過,但是別人在使用這個函數時會立刻報內存錯誤
η,類中有錯誤,只要引用了頭文件,即時沒有調用類裏的任何方法,也可能會導致內存錯誤.之前一次連入口都進不去,就是因為引用的類裏有錯誤ε
θ,alloc/free;new/delete的配對.俺們的客戶經常犯這種錯誤
ι,&和*的濫用,比較難找的一種問題

3) 注意大小寫.某些情況編譯不報錯,查找時相當的惡心
4) 注意生存周期.在不考慮速度和效率的情況下,用new的可以更好的控制你寫的東東的生存周期.當然要注意delete
5) 注意日文和某些字符,刪除的時候可能會刪一半,這樣就可能會出現無法通過編譯的字符
6) 有些東東能不往工程裏加就不要往工程裏加,能在頭文件和源文件裏寫出來就寫在那裏.不然改的時候不好改,別人想看得時候也找不到
7) 編碼規范說注釋很重要,但是明確的英文更重要.如果能夠在函數名和成員名裏都說清楚了,基本上不需要那么多的注釋,如果給自己看的話.要不不常用API函數名字怎么一個賽一個的長呢?
8) 協同工作的時候,要注意把工程文件一起checkout出去.雖然它可能直到交付都不會變
9) 引用的頭文件的位置很重要,有的時候編譯不過,試著改改stdafx.h裏頭文件的排列順序
10) 變量聲明的時候順手賦個初值. = 0; =”"并不難寫,卻可以省不少麻煩
11) 記得要存檔,記得要存檔,記得要存檔!你用的不管是不是正版VC6,它愛自己死掉卻是不爭的實事.有的時候還會莫名其妙的丟文件.所以一定要適時存
12) VC6死掉的時候,要動用taskmanager殺進程.而且要在application裏殺,而不是process裏,不然再启动以后也木有办法編譯鳥
13) 調試滴時候,F10是單步,F11是進入,F5是跳到下一個斷點.前提是你編譯的是Debug版本.