标签 ‘编程’

十一 142008

为了对抗危机,日本客户对我们提出了新要求。
原来编码每行78字放宽为每行80字。
:mad:

十二 102007

俺自己出滴.好像反应说有点难.
这里下载.

142007

昨天和今天遇到的奇怪問題是,在偶的exe當中調用其他人編寫的dll文件,都只能創建不能銷毀.程序一調到這些MFC擴展類的析構函數時,在return的時候就會報內存錯誤.具體查看的話,發現在要銷毀的時候,自身的指針會發生變化,所以在delete這種指針甚至在堆(heap)里銷毀的時候,就找不到自身指針.這樣當然會發生內存錯誤.
經過近兩天的調試,最終找到了原因:偶滴工程設置有問題!!
在工程的project–>Setting–>General選項卡當中.第一欄Microsoft Foundation Classes裏,偶選中滴是第一項不知什么時候變成鳥Not Using MFC.而剩下的選成無論哪個,都可以調用MFC類.
最后,為了跟其他人統一,用了第三個.雖然俺不生成dll文件.
所以,以后找bug,一定要先查一下工程的設置是不是有問題.
:mrgreen:

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版本.