«á¤@¶ «e¤@¶ ¦^¥Ø¿ý ¦^º¶ |
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¦r on¡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¹ï©ó¶H EIntError¡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³ò¡Bpºâµ²ªG°¾Â÷¹wpȵ¥µ¥¡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¦r at¡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©Ò¥HnÅã¥Ü²§±`¸ê°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 ¡@¡@µ{¦¡°»¿ùªº¥Dn¤º®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¤@¸`¤¤§ÚÌ¥Dn¹ï°»¿ù¤¤ªº¥Dn°ÝÃ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¤@¶ ¦^¥Ø¿ý ¦^º¶ |