You are on page 1of 10

Kha Hm Th Visual Basic 6.

0
Chng Chn - Debug

Bugs l nhng li lm ca program m ta pht hin khi chy n. Debug l


cng vic loi tt c nhng li lm trong chng trnh n chy m xui trong mi hon cnh. Thng thng mun fix mt ci bug no trc ht ta phi tm hiu l do khin n xut hin. Mt khi bit c duyn c ri ta s ngh ra cch gii quyt. Ni chung, c hai loi bugs:

1.

Hoc l program khng lm ng chuyn cn phi lm v programmer hiu lm Specifications hay c cho tin tc sai lc, hoc l program b st chi tit cn phi c. Trng hp ny ta gii quyt bng cch gim thiu s hiu lm qua s nng cp kh nng truyn thng. 2. Program khng thc hin ng nh programmer mun. Tc l programmer mun mt ng m bo chng trnh lm mt ng v v tnh khng vit lp trnh ng cch. Trng hp ny ta gii quyt bng cch dng nhng Software Tools (k c ngn ng lp trnh) thch hp, v c nhng qu trnh lm vic c h thng. Trong hng xe hi ngi ta dng t Quality Control ni n vic ch ra chic xe khng c li lm g c. t mc tiu y, chng nhng cn c ngi kim phm m chnh cc nhn vin lp rp thn trng cng vic chnh ca ngi kim phm l xc nhn kt qu tt ch khng phi tm li lm. C nhiu yu t nh hng n cht lng ca mt program nh chc nng ca program, cu trc ca cc b phn, k thut lp trnh v phng php debug. Debug khng hn nm giai on cui ca d n m ty thuc rt nhiu vo cc yu t k trc trong mi giai on trin khai.

Chc nng ca chng trnh (Program Specifications)


Du program ln hay nh, trc ht ta phi xc nhn r rng v t m n cn phi lm g, bao nhiu ngi dng, mng nh th no, database ln bao nhiu, phi chy nhanh n mc no .v.v.. C nhiu chng trnh phi b thay i na chng v programmers hiu lm iu khch hng mun. Kh nht l lc gn giao hng mi khm ph ra c nhiu im trong chng trnh khch mun mt ng m ta lm mt ng. Do

trong s lin h vi khch hng ta cn phi hi i, hi li, phn hi vi khch hng nhiu ln iu ta hiu bng th t, ti liu, khch xc nhn l ta bit ng h trc khi xc tin vic thit k chng trnh. Nu sau ny khch i , l quyn ca h, nhng h phi tr tin thay i (variation).

Cu trc cc b phn
Program no cng c mt kin trc tng t nh mt cn nh. Mi b phn cng n gin cng tt v cch rp cc b phn phi nh th no ta d th. Trong khi thit k ta phi bit trc nhng yu im ca mi b phn nm u ta chun b cch th chng. Ta s khng h tin b phn no hon ho cho n khi th n, d n n s n u. Nu ta mun dng mt k thut g trong mt hon cnh no m ta khng bit chc n chy khng th nn th ring r n trc. Phng php y c gi l Prototype. Ngoi ra, ta cng nn k hoch cho nhng trng hp bt ng, in hnh l bad data - khi user bm lung tung hay database cha rc rn. Nu chng trnh chy trong real-time (tc l data thu nhp qua Serial Comm Port, Data Acquisition Card hay mng), bn cn phi lu nhng trng hp khc nhau ty theo vic g xy ra trc, vic g xy ra sau. Lc by gi Logic ca chng trnh s ty thuc vo trng thi (State) ca data. Tt nht l ngh n nhng Scenarios (din tin ca nhng hon cnh) c th th tng giai on v tnh hung. Ngy nay vi k thut i Tng, giai on thit k ny l lc quyt nh cc Data Structures (tables, records ..v.v.) v con s Forms vi Classes. Nh rng mi Class gm c mt Data Structure v nhng Subs/Functions/Properties lm vic (operate) trn data y. Data structure phi cha y nhng chi tit (data fields, variables) ta cn. K l nhng cch chng trnh process data. Subs/Functions no c th cho bn ngoi gi th ta cho n Public, cn nhng Subs/Functions khc hin hu phc v bn trong class th ta cho n Private.

K thut lp trnh
Cn bn ca programmers v cc thi quen ca h rt quan trng. Ni chung, nhng ngi hp tp, nhy vo vit chng trnh trc khi suy ngh hay cn nhc chnh chn th sau ny bugs li ra khp ni l chuyn t nhin.

Dng Subs v Functions


Nu giai on thit k kin trc ca chng trnh ta chia ra tng Class, th khi lp trnh ta li thit k chi tit v Subs, Functions .v.v.., mi th s cn phi th nh th no. Nu ta c th chia cng vic ra tng giai on th mi

giai on c th m mt call n mt Sub. Th g cn phi tnh ra hay ly t ni khc th c th c thc hin bng mt Function. Th d nh cng vic trong mt tim git i c th gm c cc bc sau: 1. 2. 3. 4. 5. 6. 7. 8. Nhn hng Phn chia tng loi Ty Git i V bao Tnh tin Giao hng

Trong cc bc 1,2,6 v 8 c th l nhng Subs. Cn cc bc 3,4,5 v 7 nhng Functions, th d nh khi ta giao cho Function Git mt ci o d ta s ly li mt ci o sch. Nh rng im khc bit chnh gia mt Sub v mt Function l Function cho ta mt kt qu m khng lm thay i nhng parameters ta a cho n. Trong khi , du rng Sub khng cho ta g mt cch r rng nhng n c th thay i tr s (value) ca bt c parameters no ta pass cho n ByRef. Nhc li l khi ta pass mt parameter ByVal cho mt Sub th ging nh ta a mt copy (bn sao) ca variable cho Sub, Sub c th sa i n nhng n s b b qua, khng nh hng g n original (bn chnh) variable. Ngc li khi ta pass mt parameter ByRef cho mt Sub th ging nh ta a bn chnh ca variable cho Sub n c th sa i vy. Do trnh trng hp v tnh lm cho tr s mt variable b thay i v ta dng n trong mt Sub/Function bn nn dng ByVal khi pass n nh mt parameter vo mt Sub/Function. Tht ra, bn c th dng ByRef cho mt parameter pass vo mt Function. Trong trng hp d nhin variable y c th b sa i. iu ny gi l phn ng ph (side effect), v bnh thng t ai lm vy. Do , nu bn tht s mun vt ngoi qui c thng thng th nn Comment r rng cnh co ngi s c chng trnh bn sau ny. Ngoi ra, mi programmer thng c mt Source Code Library ca nhng Subs/Functions ng . Bn nn dng cc Subs/Functions trong Library ca bn cng nhiu cng tt, v chng c th nghim ri.

ng s Error
Mi khi chng trnh c mt Error, hoc l Compilation Error (v ta vit code khng ng vn phm, ng vng), hoc l Error trong khi chy chng trnh, th bn khng nn s n. Hy bnh tnh c ci Error Message xem

n mun ni g. Nu khng hiu ngay th c i c li vi ln v suy nghim xem c tm c mch nc no khng. Ngh programming ca chng ta s gp Errors nh n cm ba, nn bn phi tp bnh tnh i din vi chng.

Dng Comment (Ch thch)


Lc vit code nh thm Comment y bt c khi no tr li c on code y trong tng lai bn khng cn phi da vo ti liu no khc m c th hiu ngay lp tc mc ch ca mt Sub/Function hay on code. Nh th khng nht thit bn phi vit rt nhiu Comment nhng h c im no khc thng, b him th bn cn thng bo v gii thch ti sao bn lm cch y. C th sau ny ta khm ph ra on code c bugs; lc c li c th ta s thy du rng nh v thit k ng nhng cch lp trnh c phn thiu sot chng hn. Tnh ra trung bnh mt programmer ch lm vic 18 thng mi ch. Tc l, gn nh chc chn code bn vit s c ngi khc c v bo tr ( debug v thm bt). Do , code phi cng n gin, d hiu cng tt. ng lo ngi l chng trnh s chy chm hay chim nhiu b nh, v ngy nay computer chy rt nhanh v b nh rt r. Khi no ta tht s cn phi quan tm v vn tc v b nh th iu cn c thit k cn thn ch khng phi da vo nhng tiu xo v lp trnh.

t tn cc variables c ngha
Kh nht l lm vic vi cc variables c tn vn tt nh K, L, AA, XY. Ta khng c mt cht nim chng l ai, hin hu lm g. Thay vo , nu ta t cc tn variables nh NumberOfItems, PricePerUnit, Discount .v.v.. th s d hiu hn. Mt trong nhng bugs kh thy nht l ta dng cng mt tn cho local variable (variable declared trong Sub/Function) v global variable (variable declared trong Form hay Basic Module). Local variable s che y global variable cng tn, nn nu bn mun ni n global variable trong hon cnh y bn s dng lm local variable.

Dng Option Explicit


Bn nn trung tn dng Option Explicit u mi Form, Class hay Module. Nu c variable no nh vn trt VB6 IDE s cho bn bit ngay. Nu bn khng dng Option Explicit, mt variable nh vn trt c xem nh mt variable mi vi gi tr 0 hay "" (empty string). Ni chung bn nn thn trng khi assign mt data type cho mt variable vi data type khc. Bn phi bit r bn ang lm g khi b phn ng ph (side effect).

Desk Check
Kim li code trc khi compile. Khi ta compile code, nu khng c error ch c ngha l Syntax ca code ng, khng c ngha l logic ng. Do ta cn phi bit chc l code ta vit s lm ng iu ta mun bng cch c li code trc khi compile n ln u tin. Cng vic ny gi l Desk Check (Kim trn bn). Mt chng trnh c Desk Checked k s cn t debug v cha t bugs khng ng trc. L do l mi scenarios c tin liu chu o.

Son mt Test Plan


Test Plan lit k tt c nhng g ta mun th v cch th chng. Khi th theo Test Plan ta s khm ph ra nhng bug v tm cch loi chng ra. H s ghi li lch s ca Test Plan (trc trc g xy ra, bn dng bin php no gii quyt) s b ch trn nhiu phng din. Ta s hc c t kinh nghim Debug v bit r nhng th g trong d n c th theo cch no.

X l Error lc Run time


Khi EXE ca mt chng trnh vit bng VB6 ang chy, nu gp Error, n s hin th mt Error Dialog cho bit l do vn tc. Sau khi bn click OK, chng trnh s ngng. Nu bn chy chng trnh trong VB6 IDE, bn c dp bo program ngng trong source code ch c Error bng cch bm button Debug trong Error Dialog. Tip theo bn c th tm hiu tr s cc variables on nguyn do ca Error. Do , nu bn bt u cho dng mt program bn vit trong s, nu tin th trong vi tun u, thay g chy EXE ca chng trnh, bn chy source code trong VB6 IDE. Nu c bug no xy ra, bn c th cho program ngng trong source code debug. Khi bn dng statement: On Error Resume Next th t ch tr i, nu chng trnh gp Error, n s b qua (ignore) hon ton. im ny tin ch gip chng trnh EXE ca ta trnh b t ci ch ri bin mt, rt l "qu" vi khch hng. Nhng n cng bt li l khi khch hng cho hay h gp nhng trng hp l, khng gii thch c (v Error b ignored m khng ai ), th ta cng b lun, c th khng bit bt u t u debug. Do , d nhin trong lc debug ta khng nn dng n, nhng trc khi giao cho khch hng bn nn cn nhc k trc khi dng.

Dng Breakpoints
Cch hay nht theo di execution ca program l dng Breakpoint lm cho program ngng li mt ch ta mun trong code, ri sau ta cho program bc tng bc. Trong dp ny ta s xem xt tr s ca nhng variables coi chng c ng nh d nh khng.

Bn on trc execution s i qua ch no trong code, chn mt ch thch hp ri click bn tri ca hng code, ch du chm trn nh trong hnh di y:

Nu bn click ln du chm trn mt ln na th l hy b n. Mt cch khc t mt breakpoint l editor cursor ln hng code ri bm F9. Nu bn bm F9 ln na khi cursor nm trn hng th l hy b break point. Lc program ang dng li, bn c th xem tr s ca mt variable bng cch cursor ln trn variable y, tooltip s hin ra nh trong hnh di y:

C mt s chuyn khc bn c th lm trong lc ny. Bn c th nm du chm trn ko (drag) n ngc ln mt hay nhiu hng code n s execute tr li vi hng code. Bn cho program execute tng hng code bng cch bm F8. Menu command tng ng vi n l Debug | Step Into. S c lc bn khng mun program bc vo bn trong mt Sub/Function m mun vic execute mt Sub/Function nh mt bc n gin. Trong trng hp , bn dng Menu command Debug | Step Over hay Shift-F8.

Nh l cho program chy li bn bm F5, tng ng vi Menu command Run | Continue. C khi bn mun program ngng gia mt For Loop khi Iterator value c mt tr s kh ln. Nu ta sn mt breakpoint ri c bm F5 nhiu ln th hi bt tin. C mt mnh li l dng mt IF statement th khi Iterator value c tr s y th ta ngng breakpoint ti statement Beep (thay g statement Print ICounter) nh trong hnh di y:

Mun hy b mi breakpoints bn dng Menu command Debug | Clear All Breakpoints. tin vic debug, bn c th dng Debug Toolbar bng cch hin th n vi Menu command View | Toolbars | Debug

VB6 IDE s hin th Debug Toolbar nh sau:

Dng Immediate Window


Immediate Window cho php ta execute nhng VB statement strong khi program ang dng li. Ta c th dng mt Print statement hin th tr s ca mt variable hay kt qu ca mt Function, gi mt Sub hay thay i tr s mt variable trc khi tip tc cho chng trnh chy li. hin th Immediate Window, dng Menu command View | Immediate Window.

Thay v nh "Print ICounter" bn cng c th nh "? ICounter". Nh l mi VB Statement bn nh trong Immediate Window s c executed ngay khi bn bm Enter. Bn c th dng li bt c VB statement no trong Immediate Window, ch cn bm Enter cui hng y.

Theo du chn chng trnh (Tracing)


i khi khng tin ngng program nhng bn vn mun bit program ang lm g trong mt Sub. Bn c th gia code ca mt Sub/Function mt statement ging nh di y: Debug.Print Format ( Now,"hh:mm:ss ") & "(Sub ProcessInput) Current Status:" & Status program hin th trong Immediate Window value ca Status khi n execute bn trong Sub ProcessInput lc my gi.

C mt cch khc l thay v cho hin th trong Immediate Window bn cho vit xung (Log) vo trong mt text file. Di y l mt Sub in hnh bn c th dng Log mt Event message:
Sub LogEvent(ByVal GivenFileName, ByVal Msg As String, HasFolder As Boolean, IncludeTimeDate As Integer) ' Append event message Msg to a text Logfile GivenFileName ' If GivenFileName is fullPathName then HasFolder is true ' IncludeTimeDate = 0 : No Time or Date ' = 1 : Prefix with Time ' = 2 : Prefix with Time and Date Dim FileNo, LogFileName, theFolder If HasFolder Then LogFileName = GivenFileName Else If Right(App.Path, 1) <> "\" Then theFolder = App.Path & "\" Else theFolder = App.Path End If LogFileName = theFolder & GivenFileName End If FileNo = FreeFile If Dir(LogFileName) <> "" Then Open LogFileName For Append As FileNo Else Open LogFileName For Output As FileNo End If Select Case IncludeTimeDate Case 0 ' No Time or Date Print #FileNo, Msg Case 1 ' Time only Print #FileNo, Format(Now, "hh:nn:ss ") & Msg Case 2 ' Date & Time Print #FileNo, Format(Now, "dd/mm/yyyy hh:nn:ss ") & Msg End Select Close FileNo End Sub

Dng Watch Window


i khi bn mun program ngng khng phi mt ch no nht nh, nhng khi tr s ca mt variable hay ca mt expression l bao nhiu, c th l bn khng bit ti sao mt variable t nhin c mt tr s nh vy. Cu hi: Ai l th phm? . Th d bn mun program ngng li khi ICounter = 15. Bn c th dng Menu command Debug | Add Watch. VB6 IDE s hin th dialog di y. Bn nh ICounter = 15 vo textbox Expression v click option box Break When Value Is True trong hp Watch Type. Lm nh vy c ngha l ta mun program ngng khi ICounter bng 15.

Dng Phng Php Trit Khai (Elimination Method)


C mt phng php rt thng dng khi debug l Comment Out nhng hng code nghi ng xem bug c bin mt khng. N c gi l Elimination Method. Nu bug bin mt th nhng hng code c comment out l th phm. Bn c th Comment Out mt s hng cng mt lc bng cch highlight cc hng y ri click Comment Block trn Edit ToolBar.

Khi dng Elimination Method bn phi cn nhc Logic ca code bn trong khi quyt nh Comment Out nhng hng no, nu khng, l mt phng php kh nguy him. Ngoi ra, Menu Command View | Locals Window lit k cho bn tr s ca tt c variables trong mt Sub/Function v View | Call Stack lit k th bc cc Sub gi ln lt t ngoi vo trong cho n v tr code ang ngng hin thi.

You might also like