«á¤@­¶
«e¤@­¶
¦^¥Ø¿ý
¦^­º­¶
²Ä¤Q¤G³¹¡@²§±`³B²z»Pµ{¦¡°»¿ù¡]¤G¡^

12.3¡@²§±`ÅTÀ³¡@

¡@ ²§±`ÅTÀ³¬°¶}µoªÌ´£¨Ñ¤F¤@­Ó«ö¦Û¤vªº»Ý­n¶i¦æ²§±`³B²zªº¾÷¨î¡Ctry ¡Kexcept ¡Kend§Î¦¨¤F¤@­Ó²§±`ÅTÀ³«OÅ@¶ô¡C»Pfinally¤£¦Pªº¬O¡G¥¿±`±¡ªp¤Uexcept «á­±ªº»y¥y¨Ã¤£³Q°õ¦æ¡A¦Ó·í²§±`µo¥Í®Éµ{¦¡¦Û°Ê¸õ¨ìexcept¡A¶i¤J²§±`ÅTÀ³³B²z¼Ò¸s²Õ¡C·í²§±`³QÅTÀ³«á²§±`Ãþ¦Û°Ê²M°£¡C

¡@¡@¤U­±ªº¨Ò¤lªí¥Ü¤F¤å¥ó¥´¶}¡B¸Ñ°£¹Lµ{¤¤µo¥Í²§±`®Éªº³B²z±¡ªp¡G¡@

uses Dialogs;

var

F: Textfile;

begin

OpenDialog1.Title := 'Delete File';

if OpenDialog1.Execute then

begin

AssignFile(F, OpenDialog1.FileName);

try

Reset(F);

if MessageDlg('Erase ' +OpenDialog1.FileName + '?',

mtConfirmation, [mbYes, mbNo], 0) = mrYes then

begin

System.CloseFile(F);

Erase(F);

end;

except

on EInOutError do

MessageDlg('File I/O error.', mtError, [mbOk], 0);

on EAccessDenied do

MessageDlg('File access denied.', mtError, [mbOk], 0);

end;

end;

end.

¡@¡@«O¯d¦ron¡Kdo¥Î©ó§PÂ_²§±`«¬¦¡¡C¥²¶·ª`·Nªº¬O¡Gexcept«á­±ªº»y¥y¥²¶·¥]§t¦b¬Y¤@­Óon¡Kdo¼Ò¸s²Õ¤¤¡A¦Ó¤£¯à³æ¿W¦s¦b¡C³o¤S¬O¦Pfinally¤£¦Pªº¤@­Ó¦a¤è¡C¡@

12.3.1 ¨Ï¥Î²§±`¹ê¨Ò¡@

¡@¡@¤W­±©Ò¨Ï¥Îªº²§±`ÅTÀ³¤èªk¥iÁ`µ²¬°¦p¤Uªº§Î¦¡¡G¡@

¡@¡@on ExceptionType do

{ÅTÀ³¬Y¤@Ãþªº²§±`}¡@

¡@¡@³oºØ¤èªk°ß¤@¨Ï¥Îªº¸ê°T¬O²§±`ªº«¬¦¡¡C¤@¯ë±¡ªp¤U³o¤w¯àº¡¨¬§Ú­Ìªº»Ý­n¡C¦ý§Ú­Ì«oµLªkÀò¨ú²§±`¹ê¨Ò¤¤¥]§tªº¸ê°T¡A¤ñ¦p²§±`°T®§¡B¿ù»~¥N½Xµ¥¡C°²³]§Ú­Ì»Ý­n¹ï¥¦­Ì¶i¦æ³B²z¡A¨º»ò´N¥²¶·¨Ï¥Î²§±`¹ê¨Ò¡C

¡@¡@¬°¤F¨Ï¥Î²§±`¹ê¨Ò¡A»Ý­n¬°¯S©wÅTÀ³¼Ò¸s²Õ´£¨Ñ¤@­ÓÁ{®ÉÅܼƨӦsÀÉ¥¦¡G¡@

¡@¡@on EInstance : ExceptionType do¡@¡@¡K¡@

¡@¡@¦b¥Ø«eÅTÀ³¼Ò¸s²Õ¤¤§Ú­Ì¥i¥H¶H¨Ï¥Î¤@­Ó´¶³qª«¥ó¨º¼Ë¨Ó¤Þ¥Î¥¦ªº¼Æ¾Ú¦¨­û¡C¦ý¦b¥Ø«eÅTÀ³¼Ò¸s²Õ¤§¥~¤£³Q©Ó»{¡C

¡@¡@¤U­±ªº¥N½X¥Î©óÀò¨ú²§±`°T®§¨Ã«ö¦Û¤vªº¤è¦¡Åã¥Ü¥¦¡G¡@

{µøµ¡¤¤¥]¬A¤@­ÓScrollBar³¡¥ó¡A¤@­ÓButton³¡¥ó}¡@

procedure TErrorForm.Button1Click(Sender: TObject);

begin

try

ScrollBar1.Max := ScrollBar1.Min-1;

except

on E: EInvalidOperation do

MessageDlg('Ignoring Exception:'+E.Message,

mtInformation,[mbOK],0);

end;

end;¡@

12.3.2 ´£¨Ñ¯Ê¬ÙÅTÀ³¡@

¡@¡@¦b²§±`ÅTÀ³¼Ò¸s²Õ¤¤¡A¤@¯ë§Ú­Ì¥u¹ï§Æ±æÅTÀ³ªº¯S©w²§±`¶i¦æ³B²z¡C¦pªG¤@­Ó²§±`µo¥Í¦ÓÅTÀ³¼Ò¸s²Õ¨Ã¨S¦³¥]§t¹ï¥¦ªº³B²z¥N½X¡A«hµ²§ô¥Ø«eÅTÀ³¼Ò¸s²Õ¡A²§±`Ãþ¤´³Q«O¯d¡C

¡@¡@¬°¤F«OÃÒ¥ô¦ó²§±`µo¥Í«á³£¯à¦b¥Ø«eÅTÀ³¼Ò¸s²Õ¤¤³Q²M°£¡A¥i¥H©w¸q¯Ê¬ÙÅTÀ³¡G¡@

try

{µ{¦¡¥¿±`¥\¯à}

except

on ESomething do

{ÅTÀ³¯S©w²§±`}

else

{´£¨Ñ¯Ê¬ÙÅTÀ³}

end;¡@

¥Ñ©óelse¥i¥HÅTÀ³¥ô¦ó²§±`¡A¥]¬A§Ú­Ì¤@µL©Òª¾ªº²§±`¡A¦]¦¹¦b¯Ê¬ÙÅTÀ³¤¤³Ì¦n¥u¥]¬A½Ñ¦pÅã¥Ü¤@­Ó°T®§®Ø¤§Ãþªº³B²z¡A¦Ó¤£­n§ïÅܵ{¦¡ªº°õ¦æª¬ºA©Î¼Æ¾Ú¡C¡@

12.3.3 ÅTÀ³¤@±Ú²§±`¡@

¡@¡@½Ñ¦p

¡@¡@¡@¡@on ExceptionType do

ªº²§±`ÅTÀ³»y¥y¤£¶È¥iÅTÀ³¥»Ãþ²§±`¡A¦Ó¥B¥i¥HÅTÀ³¤lÃþ²§±`¡C¹ï©ó¶HEIntError¡BEMathErrorµ¥¨t²Î¤£·|¤Þµoªº²§±`¡A¥¦­Ì±N¥uÅTÀ³¨ä¤lÃþ²§±`¡C¦Ó¹ï©ó¶H

¡@¡@ on Exception do

³o¼Ëªº»y¥y±N·|¹ï¥ô¦ó²§±`¶i¦æÅTÀ³¡C

¡@¡@¤U­±¤@¬q¥N½X¹ï¾ã¼Æ¶V¬É²§±`¶i¦æ³æ¿W³B²z¡A¦Ó¹ï¨ä¥¦¾ã¼Æ²§±`¶i¦æ²Î¤@³B²z¡G¡@

¡@¡@try

{¾ã¼Æ¹Bºâ}

except

on ERangeError do

{¶V¬É³B²z}

on EIntError do

{¨ä¥¦¾ã¼Æ²§±`³B²z}

end;¡@

¥Ñ©ó²§±`¦b³B²z«á§Y³Q²M°£¡A¦]¦Ó¤W­±ªº¥N½X¥i«OÃÒ¤£·|¨ÏERangeError²§±`³Q¦h¦¸³B²z¡C°²¦pÄA­Ë¨â±øÅTÀ³»y¥yªº¶¶§Ç¡A«hERangeError²§±`ÅTÀ³±N¥Ã»·¨S¦³³Q°õ¦æªº¾÷·|¡C¡@

¡@¡@¥Ñ©ó²§±`¦b³B²z«á§Y³Q²M°£¡A¦]¦Ó·í§Æ±æ¹ï²§±`¶i¦æ¦h¦¸³B²z®É´N»Ý­n¨Ï¥Î«O¯d¦rraise¨Ó­«¤Þµo¤@­Ó¥Ø«e²§±`¡C

¡@¡@¤U­±ªº¥N½X¦P®É¨Ï¥Î¤F²§±`ÅTÀ³©M²§±`«OÅ@¡C²§±`ÅTÀ³¥Î©ó³]©wÅܼƪº­È¡A²§±`«OÅ@¥Î©óÄÀ©ñ¸ê·½¡C·í²§±`ÅTÀ³µ²§ô®É§Q¥Îraise­«¤Þµo¤@­Ó¥Ø«e²§±`¡C¡@

var

APointer: Pointer ;

AInt , ADiv: Integer;

begin

ADiv := 0;

GetMem ( APointer , 1024 );

try

try

AInt := 10 div ADiv ;

except

on EDivByZero do

begin

AInt := 0 ;

raise;

end;

end;

finally

FreeMem ( APointer , 1024 );

end;

end;

¡@¡@¤W­±¤@¬q¥N½XÅé²{¤F²§±`³B²zªº±_ª¬¡C²§±`«OÅ@¡B²§±`ÅTÀ³¥i¥H³æ¿W±_ª¬¤]¥i¥H¦p¤W¨Ò©Ò¥Üªº¨º¼Ë¬Û¤¬±_ª¬¡C¡@

12.3.5 ¦Û©w¸q²§±`ÃþªºÀ³¥Î¡@

¡@¡@§Q¥ÎDelphiªº²§±`Ãþ¾÷¨î§Ú­Ì¥i¥H©w¸q¦Û¤vªº²§±`Ãþ¨Ó³B²zµ{¦¡°õ¦æ¤¤ªº²§±`±¡ªp¡C¦P¼Ð·Ç²§±`¤£¦Pªº¬O¡G³oºØ²§±`±¡ªp¨Ã¤£¬O¬Û¹ï©ó¨t²Îªº¥¿±`°õ¦æ¡A¦Ó¬OÀ³¥Îµ{¦¡ªº¹w³]©wª¬ºA¡C¤ñ¦p¿é¤J¤@­Ó«Dªkªº±K½X¡B¿é¤J¼Æ¾Ú­È¶W¥X³]©w½d³ò¡B­pºâµ²ªG°¾Â÷¹w­p­Èµ¥µ¥¡C

¡@¡@¨Ï¥Î¦Û©w¸q²§±`»Ý­n¡G

¡@¡@1.¦Û¤v©w¸q¤@­Ó²§±`ª«¥óÃþ¡F

¡@¡@2.¦Û¤v¤Þµo¤@­Ó²§±`¡C¡@

12.3.5.1 ©w¸q²§±`ª«¥óÃþ¡@

¡@¡@²§±`¬Oª«¥ó¡A©Ò¥H©w¸q¤@Ãþ·sªº²§±`¦P©w¸q¤@­Ó·sªºª«¥ó«¬¦¡¨ÃµL¤Ó¤j°Ï§O¡C¥Ñ©ó¯Ê¬Ù²§±`³B²z¥u³B²z±qException©ÎException¤lÃþÄ~©Óªºª«¥ó¡A¦]¦Ó¦Û©w¸q²§±`ÃþÀ³¸Ó§@¬°Exception©Î¨ä¥¦¼Ð·Ç²§±`Ãþªº¤lÃþ¡C³o¼Ë¡A°²¦p¦b¤@­Ó¼Ò¸s²Õ¤¤¤Þµo¤F¤@­Ó·s©w¸qªº²§±`¡A¦Ó³o­Ó¼Ò¸s²Õ¨Ã¨S¦³¥]§t¹ïÀ³ªº²§±`ÅTÀ³¡A«h¯Ê¬Ù²§±`³B²z¾÷¨î±NÅTÀ³¸Ó²§±`¡AÅã¥Ü¤@­Ó¥]§t²§±`Ãþ¼Ðñ©M¿ù»~¸ê°Tªº°T®§®Ø¡C

¡@¡@¤U­±¬O¤@­Ó²§±`Ãþªº©w¸q¡G¡@

¡@¡@type

EMyException = Class(Exception) ;¡@

12.3.5.2 ¦Û¤Þµo²§±`¡@

¡@¡@¤Þµo¤@­Ó²§±`¡A©I¥s«O¯d¦rraise¡A«áÃä¸ò¤@­Ó²§±`Ãþªº¹ê¨Ò¡C

¡@¡@°²¦p©w¸q¡G¡@

type

EPasswordInvalid = Class(Exception);¡@

«h¦bµ{¦¡¤¤¦p¤Uªº»y¥y±N¤Þµo¤@­ÓEPasswordInvalid²§±`¡G¡@

¡@If Password <> CorrectPassword then

raise EPasswordInvalid.Create('Incorrect Password entered');

¡@¡@²§±`²£¥Í®É§âSystem®w³æ¤¸¤¤©w¸qªºÅܼÆErrorAddrªº­È¸m¬°À³¥Îµ{¦¡²£¥Í²§±`³Bªº¦ì§}¡C¦b§Aªº²§±`³B²z¹Lµ{¤¤¥i¥H¤Þ¥ÎErrorAddrªº­È¡C

¡@¡@¦b¦Û¤v¤Þµo¤@­Ó²§±`®É¡A¦P¼Ë¥i¥H¬°ErrorAddr¤À°t¤@­Ó­È¡C

¡@¡@¬°²§±`¤À°t¤@­Ó¿ù»~¦ì§}»Ý­n¨Ï¥Î«O¯d¦rat¡A¨Ï¥Î®æ¦¡¦p¤U¡G¡@

¡@¡@raise EInstance at Address_Expession;¡@

12.3.5.3 ¦Û©w¸q²§±`ªºÀ³¥ÎÁ|¨Ò¡@¡@

¤U­±§Ú­Ìµ¹¥X¤@­Ó§Q¥Î¦Û©w¸q²§±`µ{¦¡³]­pªº§¹¾ã¹ê¨Ò¡C

¨â­Ó¼ÐÅÒ®Ø(Label1¡BLabel2)¼Ð¥Ü¹ïÀ³½s¿è®Øªº¥\¯à¡C½s¿è®ØPassWord©MInputEdit¥Î©ó¿é¤J±K½X©M¼Æ¦r¡Cµ{¦¡±Ò°Ê®ÉLabel2¡BInputEdit¤£¥i¨£¡C·í¦bPassWord¤¤¿é¤J¥¿½Tªº±K½X®É¡ALabel2¡BInputBox¥X²{¦b¿Ã¹õ¤W¡C¦¹®ÉLabel1¡BPassWordÁôÂáC

³]­p®É¡A¥OLabel2¡BInputEditªºVisibleÄݩʬ°False¡C³q¹L³]©wPassWordªºPassWordChar¥i¥H½T©w¿é¤J±K½X®É¦^Åã¦b¿Ã¹õ¤Wªº¦r¤¸¡C

¦Û©w¸q²§±`EInvalidPassWord©MEInvalidInput¤À§O¥Î©óªí¥Ü¿é¤Jªº±K½X«Dªk©M¼Æ¦r«Dªk¡C¥¦­Ì³£¬O¦Û©w¸q²§±`EInValidationªº¤lÃþ¡C¦ÓEInValidationª½±µ±qException²§±`Ãþ¬£¥Í¡C

¤U­±¬O¤T­Ó²§±`Ãþªº©w¸q¡C¡@

type

EInValidation = class(Exception)

public

ErrorCode: Integer;

constructor Create(Const Msg: String;ErrorNum: Integer);

end;

EInvalidPassWord = class(EInValidation)

public

constructor Create;

end;

EInvalidInput = class(EInValidation)

public

constructor Create(ErrorNum: Integer);

end;¡@

EInValidation¼W¥[¤F¤@­Ó¤½¦³¦¨­ûErrorCode¨Ó¦sÀÉ¿ù»~¥N½X¡C¿ù»~¥N½Xªº¼W¥[´£¨Ñ¤F«Ü¤jªºµ{¦¡³]­pÆF¬¡©Ê¡C¹ï©ó²§±`Ãþ¡A¥i¥H®Ú¾Ú¿ù»~¥N½X´£¨Ñ¤£¦Pªº¿ù»~¸ê°T¡F¹ï©ó¨Ï¥ÎªÌ¥i¥H³q¹LºI¨ú¿ù»~¥N½X¡A¦btry...except¼Ò¸s²Õ¤§¥~¨Ó³B²z²§±`¡C

±q¥H¤W©w¸q¥i¥Hµo²{¡GEInvalidPassWord©MEInvalidInputªººc³y¨ç¼Æ°Ñ¼Æªí¤¤¨S¦³ªí¥Ü¿ù»~¸ê°Tªº°Ñ¼Æ¡C¨Æ¹ê¤W¡A¥¦­Ì¦sÀɦbºc³y¨ç¼Æ¤º³¡¡C¤U­±¬O¤T­Ó¦Û©w¸q²§±`Ãþºc³y¨ç¼Æªº¹ê²{¥N½X¡C¡@

constructor EInValidation.Create(Const Msg: String; ErrorNum: Integer);

begin

inherited Create(Msg);

ErrorCode := ErrorNum;

end;

constructor EInValidPassWord.Create;

begin

inherited Create('Invalid Password Entered',0);

end;

constructor EInValidInput.Create(ErrorNum: Integer);

var

Msg: String;

begin

case ErrorNum of

1:

Msg := 'Can not convert String to Number';

2:

Msg := 'Number is out of Range';

else

Msg := 'Input is Invalid';

end;

inherited Create(Msg,ErrorNum);

end;¡@

¹ï©óEInvalidInput¡AErrorCode=1ªí¥Ü¿é¤Jªº¤£¬O¯Â¼Æ¦r§Ç¦C¡A¦ÓErrorCode=2ªí¥Ü¿é¤J¼Æ­È¶V¬É¡C

±K½XÀˬd¬O¥Î¤á¦bPassWord¤¤¿é¤J±K½X¨Ã«ö¤U¦^¨®Áä«á¶}©lªº¡C¹ê²{¥N½X¦bPassWordªºOnKeyPress¨Æ¥ó³B²z¹Lµ{¤¤¡G¡@

procedure TForm1.PassWordKeyPress(Sender: TObject; var Key: Char);

const

CurrentPassWord = 'Delphi';

begin

if Key = #13 then

begin

try

if PassWord.text <> CurrentPassWord then

raise EInvalidPassWord.Create;

Label2.Visible := True;

InputEdit.Visible := True;

InputEdit.SetFocus;

PassWord.Visible := False;

Label1.Visible := False;

except

on EInvalidPassWord do

begin

PassWord.text := '';

raise;

end;

end;

Key:=#0;

end;

end;¡@

¦P¼Ë¡A¦bInputEditªºOnKryPress¨Æ¥ó³B²z¹Lµ{¤¤¹ê²{¤F¿é¤J¼Æ¦rªº¦Xªk©ÊÀˬd¡G¡@

procedure TForm1.InputEditKeyPress(Sender: TObject; var Key: Char);

var

Res: Real;

Code: Integer;

begin

if Key = #13 then

begin

try

val(InputEdit.text,Res,Code);

if Code <> 0 then

raise EInValidInput.create(1);

if (Res > 1) or (Res < 0) then

raise EInValidInput.create(2);

MessageDlg('Correct Input', mtInformation,[mbOk], 0);

Key := #0;

except

on E:EInValidInput do

begin

InputEdit.text := '';

MessageDlg(E.Message, mtWarning,[mbOk], 0);

end;

end;

end;

end;¡@

¥Ñ©ó²§±`ÅTÀ³«á§Y³Q²M°£¡A©Ò¥H­nÅã¥Ü²§±`¸ê°T¡A»Ý­n¥t¥~ªº¤â¬q¡C¦b¥H¤W¨â¬qµ{¦¡¤¤§Ú­Ì±Ä¥Î¤F¨âºØ¤£¦Pªº¤èªk¡G¦b±K½X¦Xªk©ÊÀˬd¤¤¡A§Q¥Î²§±`­«¤Þµo¥Ñ¨t²Î¶i¦æ¯Ê¬ÙÅTÀ³¡F¦b¿é¤J¼Æ¦r¦Xªk©ÊÀˬd¤¤¡A³q¹L²§±`¹ê¨Ò¨ÓÀò¨ú²§±`¸ê°T¨Ã¥Ñ¦Û¤v¨ÓÅã¥Ü¥¦¡C

¥H¤W©ÒÁ|ªº¬O¤@­Ó«D±`²³æªº¨Ò¤l¡A¦ý±q¤¤¤w¥i¥Hµo²{¡G¨Ï¥Î¦Û©w¸q²§±`µ{¦¡³]­p¡A¬°µ{¦¡³]­p±a¨Ó¤F«Ü¤jªºÆF¬¡©Ê¡C¡@

12.3.6 §Q¥Î²§±`ÅTÀ³µ{¦¡³]­p¡@

¡@¡@§Q¥Î²§±`³B²z¾÷¨î¤£¶È¯à¨Ïµ{¦¡§ó¥[°·§§¡A¦Ó¥B¤]´£¨Ñ¤F¤@ºØ¨Ïµ{¦¡§ó¥[²±¶¡B©ú¤Fªº³~®|¡C¨Æ¹ê¤W¡A¨Ï¥Î¦Û©w¸q²§±`Ãþ´N¬O¤@ºØ§Q¥Î²§±`ÅTÀ³µ{¦¡³]­pªº¤è¦¡¡C³oùاڭ̦A°Q½×´X­Ó§Q¥Î¼Ð·Ç²§±`Ãþµ{¦¡³]­pªº¨Ò¤l¡C

¡@¡@¤ñ¦p¬°¤F¨¾¤î¹s§@°£¼Æ¡A¥i¥H¦b¶i¦æ°£ªk¹Bºâ«e¨Ï¥Îif¡Kthen¡Kelse»y¥y¡C¦ý¦pªG¦³¤@¨t¦C³o¼Ëªº»y¥y«hÁcº¾µ{«×¬O¥O¤HÃø¥H§Ô¨üªº¡C³o®É­Ô§Ú­Ì¥i¯à¶É¦V©ó¨Ï¥ÎEDivByZero²§±`¡C¨Ò¦p¦p¤U¤@¬qµ{¦¡´N»·¤ñ¥Îif¡Kthen¡Kelse¹ê²{²±¶©ú¤F¡C¡@

function Calcu(x,y,z,a,b,c:Integer):Real;

begin

try

Result := x/a+y/b+z/c ;

except

on EDivByZero do

Result := 0;

end;

end;

¦b(6.2.3)°O¿ý¤å¥óªº¥´¶}»P«Ø¥ß¤¤´N¬O§Q¥Î²§±`ÅTÀ³¨Ó¹ê²{¤å¥óªº¥´¶}©Î«Ø¥ß¡C¡@

procedure TRecFileForm.OpenButtonClick(Sender: TObject);

begin

if OpenDialog1.Execute then

FileName := OpenDialog1.FileName

else

exit;

AssignFile(MethodFile,Filename);

try

Reset(MethodFile);

FileOpened := True;

except

on EInOutError do

begin

try

if FileExists(FileName) = False then

begin

ReWrite(MethodFile);

FileOpened := True;

end

else

begin

FileOpened := False;

MessageDlg('¤å¥ó¤£¯à¥´¶}',mtWarning,[mbOK],0);

end;

except

on EInOutError do

begin

FileOpened := False;

MessageDlg('¤å¥ó¤£¯à«Ø¥ß',mtWarning,[mbOK],0);

end;

end;

end;

end;

if FileOpened = False then exit;

Count := FileSize(MethodFile);

if Count > 0 then

ChangeGrid;

RecFileForm.Caption := FormCaption+' -- '+FileName;

NewButton.Enabled := False;

OpenButton.Enabled := False;

CloseButton.Enabled := True;

end;¡@

Á`¤§¡A§Q¥Î²§±`ÅTÀ³µ{¦¡³]­pªº¤¤¤ß«ä·Q¬OÁöµM¦s¦b¹w¨¾²§±`µo¥Íªº½T©w¤èªk¡A¦ý«o¹ï²§±`ªº²£¥Í¨Ã¤£¶i¦æ¨Æ«e¹w¨¾¡A¦Ó¬O¶i¦æ¨Æ«á³B²z¡A¨Ã¥H¦¹¨Ó²¤Æµ{¦¡ªºÅÞ¿èµ²ºc¡C¡@

12.4¡@µ{¦¡°»¿ù²¤¶¡@

¡@¡@Delphi´£¨Ñ¤F¤@­Ó¥\¯à±j¤jªº¤º¸m°»¿ù¾¹(Integrated Debugger), ¦]¦Ó¹ïµ{¦¡ªº°»¿ù¤£¥ÎÂ÷¶}¾ã¦X¶}µoÀô¹Ò(IDE)´N¥i¥H¶i¦æ¡C

¡@¡@µ{¦¡¿ù»~°ò¥»¥i¥H¤À¬°¨âÃþ¡A§Y°õ¦æ®É¶¡¿ù©MÅÞ¿è¿ù¡C©Ò¿×°õ¦æ®É¶¡¿ù¬O«üµ{¦¡¯à¥¿±`½sĶ¦ý¦b°õ¦æ®É¥X¿ù¡CÅÞ¿è¿ù¬O«üµ{¦¡³]­p©M¹ê²{¤Wªº¿ù»~¡Cµ{¦¡»y¥y¬O¦Xªkªº¡A¨Ã¶¶§Q°õ¦æ¤F¡A¦ý°õ¦æµ²ªG«o¤£¬O©Ò§Æ±æªº¡C

¡@¡@¹ï©ó³o¨âÃþ¿ù»~¡A°»¿ù¾¹³£¥i¥H»²§U±Ô­z§A§Ö³t©w¦ì¿ù»~¡A¨Ã³q¹L¹ïµ{¦¡°õ¦æªº¸òÂÜ©M¹ïÅܼƭȪººÊµø»²§U±Ô­z§A´M§ä¿ù»~ªº¯u¥¿­ì¦]©M¸Ñ¨M¿ù»~ªº³~®|¡C

¡@¡@µ{¦¡°»¿ùªº¥D­n¤º®e¥i¥H·§¬A¬°¦p¤Uªº´X¤è­±¡G

¡@¡@1.°»¿ùªº·Ç³Æ©M¶}©l¡F

¡@¡@2.±±¨îµ{¦¡ªº°õ¦æ¡F

¡@¡@3.Â_ÂIªº¨Ï¥Î¡F

¡@¡@4.Àˬd¼Æ¾Úªº­È¡C

¡@¡@µ{¦¡°»¿ù¥u¦³¥Î¤á¹ê»Ú¤W¾÷¾Þ§@¤~¯à¯u¥¿´x´¤¡C¦b³o¤@¸`¤¤§Ú­Ì¥D­n¹ï°»¿ù¤¤ªº¥D­n°ÝÃD©M¤@¨ÇÃöÁäÂI¶i¦æ¤¶²Ð¡C¦Ü©ó¤@¨Ç«Ü²Ó¤pªº°ÝÃD¬Û«HŪªÌ¥i¥H¦b¤W¾÷¹ê»ÚÀ³¥Î¤¤´x´¤¡A¦]¦Ó¨S¦³¦C¥X¡C

¡@

12.4.1 °»¿ùªº·Ç³Æ©M¶}©l¡@

¡@¡@¦bµ{¦¡¶}µo¹Lµ{¤¤µ{¦¡½s½X©M°»¿ù¬O¤@­Ó«ùÄòªº¦^°é¹Lµ{¡A¥u¦³¦b§A¹ïµ{¦¡¶i¦æ¤F¹ý©³ªº´ú¸Õ«á¤~¯à¥æ¥I³Ì²×¥Î¤á¨Ï¥Î¡C¬°¤F«OÃÒ°»¿ùªº¹ý©³©Ê¡A¦b°»¿ù«eÀ³¨î©w¤@­Ó¸Ô²Óªº°»¿ù­p¹º¡C¤@¯ë»¡¨ÓÀ³¸Ó§âµ{¦¡¹º¤À¬°´X­Ó¬Û¹ï¿W¥ßªº³¡¤À¡A¤À§O¶i¦æ°»¿ù¡A¥H§Q©ó¿ù»~ªº¨³³t©w¦ì¡A½T«O¨C¤@³¡¤Àµ{¦¡³£«ö³]­pªº­n¨D°õ¦æ¡C

¡@¡@°»¿ù­p¹º·Ç³Æ¦n«á´N¥i¥H¶}©lµ{¦¡ªº°»¿ù¡C

¡@¡@¶}©l¤@­Ó°»¿ù¹Lµ{¥]¬A¡G

¡@¡@1.½sĶ®É²£¥Í°»¿ù¸ê°T¡F

¡@¡@2.±qDelphiùØ°õ¦æ§Aªºµ{¦¡¡C

¡@¡@¦bµ{¦¡°»¿ù¹Lµ{¤¤¡Aµ{¦¡ªº°õ¦æ§¹¥þ¦b§Aªº±±¨î¤§¤¤¡C§A¥i¥H¦b¥ô¦ó¦ì¸m¼È°±µ{¦¡ªº°õ¦æ¥hÀˬdÅܼƩM¼Æ¾Úµ²ºcªº­È¡A¥hÅã¥Ü¨ç¼Æ©I¥s§Ç¦C¡A¥h­×§ïµ{¦¡¤¤Åܼƪº­È¥H«KÆ[¹î¤£¦P­È¹ïµ{¦¡¦æ¬°ªº¼vÅT¡C¡@

12.4.1.1 ²£¥Í°»¿ù¸ê°T¡@

¡@¡@­n¨Ï¥Î¤º³¡°»¿ù¾¹¥²¶·¿ï¤¤Option| Environment¿ï¾ÜªíReferences­¶ªºIntegrated DebuggingÀˬd®Ø¡C¯Ê¬Ù±¡ªp¤U¸Ó®Ø³Q¿ï¤¤¡C

¡@¡@¦b¶}©l°»¿ù«e»Ý­n¨Ï¥ÎSymbols Debug Information(°»¿ù²Å¸¹¸ê°T)½sĶ¤uµ{¤å¥ó¡C°»¿ù²Å¸¹¸ê°T¥]§t¤F¤@­Ó²Å¸¹ªí¡A¯à°÷¨Ï°»¿ù¾¹¦bµ{¦¡ªº·½¥N½X»P½sĶ¾¹²£¥Íªº¾÷¾¹¥N½X¶¡«Ø¥ßÁpô¡C³o¼Ë¦bµ{¦¡°õ¦æ¤¤¥i¥H¦P®É¬d¬Ý¹ïÀ³ªº·½¥N½X¡C

¡@¡@Delphi ¦b¯Ê¬Ù±¡ªp¤U¦Û°Ê²£¥Í°»¿ù²Å¸¹¸ê°T¡C¦b¾ã¦X¶}µoÀô¹Ò¤¤ªº¶}Ãö¿ï¶µ¬OOption|project¿ï¾ÜªíCompiler Options­¶ªºDebug Information and Local SymbolsÀˬd®Ø¡C

¡@¡@·í²£¥Íªº°»¿ù²Å¸¹¸ê°T¨Ñ¤º³¡°»¿ù¾¹¨Ï¥Î®É¡A½sĶ¾¹§â°»¿ù²Å¸¹ªíÀx¦s¦b¨C­Ó¬ÛÀ³ªº.dcu¤å¥ó¤¤¡C

¡@¡@¦pªG§Æ±æ¦b¾ã¦XÀô¹Ò¥~¨Ï¥ÎTurbo Debugger¡A«h»Ý­n§â°»¿ù¸ê°TÀx¦s¦b³Ì²×ªº .exe¤å¥ó¤¤¡C¬°¦¹»Ý­n¿ï¨úOption|Project¿ï¾ÜªíLinker­¶ªºInclude TDW Debug InfoÀˬd®Ø¡C

¡@¡@¥Ñ©óÀx¦s°»¿ù¸ê°T¤j¤j¼W¥[¤F°õ¦æ¤å¥óªº¤j¤p¡A¦]¦Ó°»¿ù§¹¦¨«áÀ³­«·s²£¥Í¤@­Ó¤£¥]§t°»¿ù¸ê°Tªº°õ¦æ¤å¥ó¡C¡@

12.4.1.2 °õ¦æµ{¦¡¡@

¡@¡@³q¹L°»¿ù¾¹(¥]¬A¤º¸m°»¿ù¾¹)°õ¦æµ{¦¡¡A·íµ{¦¡³B©óµ¥«Ýª¬ºA®É¡A°»¿ù¾¹¥i¥HÀò±o±±¨î¡A§Q¥Î°»¿ù¾¹ªº¥\¯à¨ÓÀˬd¥Ø«eµ{¦¡ªºª¬ºA¡C³q¹L¦X²z¥¬¸m¿Ã¹õÅã¥Ü¡A¨ÏÀ³¥Îµ{¦¡°õ¦æµøµ¡©MCode Editor(¥N½X½s¿è¾¹)¤¬¤£­«Å|¡A¥i¥HÅý¥Î¤á¦b¥¦­Ì¶¡¤è«K¦a¤Á´«¥HÆ[¹î¥N½X°õ¦æªº®ÄªG¡C

¡@¡@¦pªG§Æ±æ¨Ï¥Î©R¥O¦æ°Ñ¼Æ¨Ó°»¿ùµ{¦¡¡A«h¥i¥H³q¹LRun|Parameters ¿ï¾Üªí¥´¶}°õ¦æ°Ñ¼Æ¹ï¸Ü¤è¶ô¶i¦æ³]©w¡C¡@

12.4.2 µ{¦¡°õ¦æªº±±¨î¡@

¡@¡@µ{¦¡°õ¦æ±±¨îªº¤èªk©M¨Ï¥Î¦p¤Uªí¡C¡@

¡@¡@ ªí12.7¡@¡@µ{¦¡°õ¦æ±±¨îªº¤èªk©M¨Ï¥Î³~®|

¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w

¤èªk ¨Ï¥Î³~®|

¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X

°õ¦æ¨ì¹C¼Ð¦ì¸m ¡´ Code Editor¥[³t¿ï¾ÜªíªºRun to Cursor¶µ

(Run to Cursor) ¡´ Run¥D¿ï¾ÜªíªºRun to Cursor¶µ

¡´ F4

¸òÂÜ(Trace Into) ¡´ Run¥D¿ï¾ÜªíªºTrace Into¶µ

¡´ Trace Into¥[³t«ö¶s

¡´ F7

¨B¶i(Step Over) ¡´ Run¥D¿ï¾ÜªíªºStep Over¶µ

¡´ Step Over¥[³t«ö¶s

¡´ F8

°õ¦æ¨ìÂ_ÂI ³]©wÂ_ÂI¨Ã«ö¥¿±`¤è¦¡°õ¦æ

¼È°±µ{¦¡°õ¦æ Run¥D¿ï¾ÜªíªºProgram Pause¶µ

¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¡@

¡@¡@¸òÂÜ©M¨B¶i³£¬O¤@ºØ³æ¨B°õ¦æ¤è¦¡¡C¦ý¡§¨B¡¨ªº§t¸q¤£¦P¡C¹ï¸òÂܦӨ¥¥¦¤@¦¸°õ¦æ¤@±ø²³æµ{¦¡»y¥y¡C·í¸I¨ì¥]§t°»¿ù¸ê°Tªº¨ç¼Æ©Î¹Lµ{©I¥s®É«h¸õ¤J¸Ó¨ç¼Æ©Î¹Lµ{¡A¨Ã°õ¦æ¨ä²Ä¤@±ø¥i°õ¦æ»y¥y¡C¹ï¨B¶i¦Ó¨¥¥¦¤@¦¸°õ¦æ¤@±ø¥Ø«e¼Ò¸s²Õªº¥i°õ¦æ»y¥y¡A¦Ó¤£ºÞ¸Ó»y¥y¬O§_¬O¨ç¼Æ©Î¹Lµ{©I¥s¡C

¡@¡@°õ¦æ¨ì¹C¼Ð¦ì¸m©M°õ¦æ¨ìÂ_ÂI³£¬Oµ{¦¡¥¿±`°õ¦æ¨ì¬Y¤@½T©wªº·½¥N½X¦ì¸m¡A¦Ó«á¶i¤J°»¿ùª¬ºA¡C¦ý¬Û¹ï©ó°õ¦æ¨ì¹C¼Ð¦ì¸m¦Ó¨¥¡A°õ¦æ¨ìÂ_ÂI§ó¬°ÆF¬¡¡C¦]¬°Â_ÂI¤@¦¸¥i³]©w¦h­Ó¡A¦P®É¤]¥i¥H¹ïÂ_ÂI³]©w¤@©wªº±ø¥ó¡C¥u¦³º¡¨¬¸Ó±ø¥óµ{¦¡°õ¦æ¤~·|¤¤¤î¡C

¡@


«á¤@­¶
«e¤@­¶
¦^¥Ø¿ý
¦^­º­¶