17-3 �H�R�O�C���D������

¥H«ü¥O¦C¬°¥Dªº°£¿ù¨ç¼Æ¥i¥Î©ó¦UºØ¤£¦P¥­¥x¡A¨ä¥\¯à¥i¦Cªí¦p¤U¡G

»yªk¥\¯à
dbstop at line# in filename ³]©w¤¤Â_ÂI¡]Break Points¡^
¡]line# ¥Nªí¦æ¸¹¡Afilename ¥NªíÀɮצWºÙ¡^
dbclear at line# in filename ²M°£¤¤Â_ÂI
¡]line#¥Nªí¦æ¸¹¡Afilename ¥NªíÀɮצWºÙ¡^
dbstop if warning ­Y¹J¨ì¤U¦C±¡ªp¡A«h¼È°±µ{¦¡°õ¦æ¡G
  • ĵ§i¡]Warning¡^
  • ¿ù»~¡]Error¡^
  • «D¼Æ­È/µL½a¤j¡]NaN/Inf¡^
dbstop if error
dbstop if naninf
dbstop if infnan
dbcont ±q¼È°±ª¬ºAÄ~Äò°õ¦æ
dbstack ¦C¥X¨ç¼Æ©I¥s¹Lµ{¤¤ªº°ïÅ|
dbstatus filename ¦C¥X¬YÀɮתº©Ò¦³¤¤Â_ÂI
¡]filename ¥NªíÀɮצWºÙ¡^
dbstep n °õ¦æ n ¦C«ü¥O
dbtype filename ¦C¥XÀɮפº®e¡]¥]§t¨C¦C½s¸¹¡^
¡]filename ¥NªíÀɮצWºÙ¡^
dbdown ¦V¤U¶i¤J§½³¡ªº¤u§@ªÅ¶¡
dbup ¦V¤W¶i¤J©I¥sºÝªº¤u§@ªÅ¶¡
dbquit Â÷¶}°£¿ù¼Ò¦¡

¦b¤W­zªº°£¿ù«ü¥O¤¤¡A³Ì­«­nªº«ü¥O´N¬O dbstop¡A§Ú­Ì¥i¥H§Q¥Î³o­Ó«ü¥O¨Ó«ü©wµ{¦¡½Xªº¤¤Â_ÂI¡]Break Points¡^¡A¨Ï±o MATLAB ¥i¦b¤¤Â_ÂI«e°±¤î°õ¦æ¡A¥HÅý§Ú­Ì¯àÀˬd¦U­Ó§½³¡Åܼƪº­È¡Cdbstop ªº¤@¯ë®æ¦¡¤Î¬ÛÃö»¡©ú¥i¦Cªí¦p¤U¡G

«ü¥O®æ¦¡»¡©ú
dbstop in filename at line# °±¤î°õ¦æ©ó¬YÀɮתº¬Y¦æ
¡]filename ¥NªíÀɮצWºÙ¡Aline#¥Nªí¦æ¸¹¡^
dbstop in filename at subfunction °±¤î°õ¦æ©ó¬YÀɮתº¦¸¨ç¼Æ
¡]filename ¥NªíÀɮצWºÙ¡^
dbstop in filename °±¤î°õ¦æ©ó¬YÀÉ®×
¡]filename ¥NªíÀɮצWºÙ¡^
dbstop if error ­Y¥X²{¿ù»~¡A«h¼È°±µ{¦¡°õ¦æ¡A¨Ã°±¯d¦bµo¥Í¿ù»~ªº¤u§@ªÅ¶¡
dbstop if warning ­Y¥X²{ĵ§i¡A«h¼È°±µ{¦¡°õ¦æ¡A¨Ã°±¯d¦bµo¥Íĵ§iªº¤u§@ªÅ¶¡
dbstop if naninf ­Y¥X²{ nan ©Î inf¡A«h¼È°±µ{¦¡°õ¦æ¡A¨Ã°±¯d¦bµo¥Í nan ©Î infªº¤u§@ªÅ¶¡
dbstop if infnan ¡]¦P¤W¡^

¦b¤Wªí¤¤¡Ain¡Bat ©M if ³£¥i¥H¬Ù²¤¡A©Ò¥H¡udbstop in testfunc at 15¡v¥i¥H²¼g¦¨¡udbstop testfunc 15¡v¡C

¤@¥¹µ{¦¡°±¤î°õ¦æ«á¡AMATLAB ´N¶i¤J©Ò¿×ªº ¡u°£¿ù¼Ò¦¡¡v¡]Debugging Mode¡^¡A«ü¥O¦C¤W·|¥X²{¡§k>>¡¨ªº´£¥Ü¸¹¡A¥Nªí¦¹®É¥i¥H±µ¨üÁä½L¿é¤J¡C¦pªG±z¨Ï¥Îªº¥­¥x¬O PC ©Î MAC¡A¦P®É¤]·|¥X²{ M ÀÉ®×°£¿ù¾¹¡]M-file Debugger¡^¡A¥iª½±µÀ˵øµ{¦¡¥X¿ùªº³¡¤À¡C¦³Ãö©ó M ÀÉ®×°£¿ù¾¹ªº²Ó¸`¡A±N·|¦b¤U¤@¸`¸Ô²Ó¤¶²Ð¡A¥»¸`«h¥H¤¶²Ð«ü¥O¦Cªº°£¿ù«ü¥O¬°¥D¡C

¶i¤J°£¿ù¼Ò¦¡«á¡A§Ú­Ì¥iÀˬd¥ô¦óÅܼƪº­È¡A¤]¥i¥H°õ¦æ¨ä¥L¥ô¦ó«ü¥O©Î¤â½Z¡]Scripts¡^¡CÀˬd§¹²¦«á¡A¥i¯à±Ä¨úªº°Ê§@¥i¦CÁ|¦p¤U¡G

«ü¥O®æ¦¡»¡©ú
dbcont Ä~Äò°õ¦æµ{¦¡
dbstep n °õ¦æ n ¦Cµ{¦¡½X
dbtype filename ¦C¥Xµ{¦¡½X
¡]filename ¥Nªíµ{¦¡ÀɮצWºÙ¡^
dbdown ¦V¤U¤Á´«¦Ü¥t¤@­Ó¤u§@ªÅ¶¡
dbup ¦V¤W¤Á´«¦Ü¥t¤@­Ó¤u§@ªÅ¶¡
dbstack ¦C¥X¨ç¼Æ©I¥s¹Lµ{¤¤ªº°ïÅ|
dbquit ¸õ¥X°£¿ù¼Ò¦¡

¦b¤Wªí¤¤¡A³Ì±`¥Î¨ìªº«ü¥O¬O dbstep¡A¥i¥HÅý§Ú­Ì¤@¦¸°õ¦æ¤@¦C©Î¦h¦Cµ{¦¡½X¡A©Î¬O¶i¤J©Î¸õ¥X¤@­Ó«ü¥Oªº¤º³¡µ{¦¡½X¡A¨ä®æ¦¡¥i¦CÁ|¦p¤U¡G

«ü¥O®æ¦¡»¡©ú
dbstep °õ¦æ¤U¤@¦Cµ{¦¡½X
dbstep n °õ¦æ¤U n ¦Cµ{¦¡½X
dbstep in ¶i¤J¤U¤@¦C«ü¥Oªºµ{¦¡½X
dbstep out ¸õ¥X¥Ø«e«ü¥Oªºµ{¦¡½X

¨ä¥L¦U°£¿ù«ü¥Oªº®æ¦¡¸û©T©w¡A±ý¨ú±o§ó¦h¸ê°T¡A¥i¥Ñ MATLAB ½u¤W¤ä´©¨ú±o¡C

¥t¥~¡Adbclear ¤Î dbstatus ¥i¥Î©ó¤@¯ë¼Ò¦¡¤Î°£¿ù¼Ò¦¡¡Cdbclear ¥Î©ó¨ú®ø¤¤Â_ÂI¡A©M dbstop ªº¥\¯à«ê¦n¬Û¤Ï¡Adbclear ªº¨Ï¥Î®æ¦¡¥i°Ñ¨£¥»¸`ªº²Ä¤@­Óªí®æ¡]§Y dbstop ªº¨Ï¥Î®æ¦¡¡^¡A¥u»Ý±N©Ò¦³ªº dbstop §ï¬° dbclear §Y¥i¡C

¦¹¥~¡A­Y­n²M°£©Ò¦³ªº¤¤Â_ÂI¡A¥i¥Î dbclear all¡C

dbstatus ¥i¦C¥X©Ò¦³ªº¤¤Â_ÂI¡A¨ä®æ¦¡¦p¤U¡G

«ü¥O®æ¦¡»¡©ú
dbstatus ¦C¥X©Ò¦³¤¤Â_ÂI
dbstatus filename ¦C¥X¦b¤@Àɮפ¤ªº¤¤Â_ÂI
¡]filename ¥Nªíµ{¦¡ÀɮצWºÙ¡^
s = dbstatus(¡K) ±N¤¤Â_ÂIªº¸ê°T¶Ç¦^ÅÜ¼Æ s

¥H¤U±N¥H¹ê¨Ò¨Ó»¡©ú³o¨Ç°£¿ù«ü¥Oªº¹B¥Î¡C

°²³]§Ú­Ì­n­pºâ¤@¦V¶qªº­Ë¼Æ©M¡A¥i¨Ï¥Î¦WºÙ¬° recipsum.m ªº¨ç¼Æ¡A¦p¤U¡G

>> type recipsum function out = recipsum(x) recip = reciproc(x); out = sum(recip); function output = reciproc(input) output = 1./x;

¦¹¨ç¼Æ¥]§t¤@¿ù»~¡A°õ¦æ®É§Y·|¥X²{¡G

>> recipsum([1 2 3]) Undefined function or variable 'x'. Error in recipsum>reciproc (line 7) output = 1./x; Error in recipsum (line 3) recip = reciproc(x);

Hint
¥»½d¨Òªº¿ù»~°T®§¡A¬O¥H MATLAB 8.5 ª©¬°¥D¡C¤£¦Pª©¥»ªº MATLAB¡A¥i¯à²£¥Í¤£¦Pªº¿ù»~°T®§¡A¦ý¬O³£¤j¦P¤p²§¡C

¦¹¿ù»~°T®§¬O¥Ñ¦¸¨ç¼Æ reciproc ©Ò²£¥Í¡C¬°¤F°»¿ù¤è«K¡A·í¿ù»~°T®§µo¥Í®É¡A§Ú­Ì¥i¥HÅý MATLAB ¤´µM¯à°÷°±¯d¦b²£¥Í¿ù»~°T®§ªº¨ç¼Æ¡A©Ò¨Ï¥Îªº«ü¥O¦p¤U¡G

>> dbstop if error

¥i¥Î dbstop ¨Ó½T»{©Ò«Ø¥ßªº¤¤Â_±ø¥ó¡G

>> dbstatus Stop if error.

¦¹®É¥i¦A©I¥s­ì¨ç¼Æ¡G

>> recipsum([1 2 3])

MATLAB ³o¦¸·|°±¦b¿ù»~µo¥Íªºµ{¦¡½X¡A¨Ã±N¤§ÅV¥Ü©ó MATLAB °£¿ù¾¹¡]¤]¬O MATLAB ½s¿è¾¹¡^¡A¦p¤U¡G

¦¹®É§Ú­Ì¥i¦b«ü¥Oµøµ¡¨Ï¥Î dbstack ¨ÓÅã¥Ü MATLAB ©Ò¦bªº¨ç¼Æ¡G

k>> dbstack > In recipsum>reciproc (line 7) In recipsum (line 3)

¥ç¥i¥Î dbtype ¨ÓÅã¥Üµ{¦¡½X¡G

k>> dbtype recipsum 1 function out = recipsum(x) 2 3 recip = reciproc(x); 4 out = sum(recip); 5 6 function output = reciproc(input) 7 output = 1./x;

«Ü©úÅã¦a¡A¦b reciproc ¦¸¨ç¼Æ¤¤ªºÅÜ¼Æ x ¨Ã¥¼©w¸q¡A¦]¦¹§Ú­Ì¥i¦b°£¿ù¾¹¤¤ª½±µ±N x §ï¦¨ input ¡A¨ÃÀx¦s¦¹Àɮשó recipsum1.m¡A´N§¹¦¨¤F°£¿ùªº¤u§@¡C¦¹®É¦A¶i¦æ¨ç¼Æ©I¥s¡A´N¥i±o¨ì¥¿½Tµª®×¡G

k>> dbquit % Â÷¶}°£¿ù¼Ò¦¡ >> recipsum1([1 2 3]) ans = 1.8333

Hint
¤@¥¹¦b°£¿ù¾¹¶i¦æ½s¿èÀɮתº°Ê§@¡AMATLAB ´N·|¸õ¥X°£¿ù¼Ò¦¡¡A·Ç³Æ¦A¦¸°õ¦æ°£¿ù«áªºµ{¦¡½X¡C

¤W¨Òªº¿ù»~¬O¬Û·íÅã¦Ó©ö¨£¡A¦ý¦pªG¹J¨ì¸û½ÆÂø¿ù»~¡A´N¥²»Ý¦bµ{¦¡½X°±¤î«á¡A¦b«ü¥O¦C³v¤@Àˬd¥i¯à¥X°ÝÃDªºÅܼơAª½¨ì§ä¥X°ÝÃD©Ò¦b¤§«á¡A¦A¶i¦æµ{¦¡½Xªº­×§ï¡G

¦¹¥~¡A·íµ{¦¡¼È°±°õ¦æ©ó¤@­Ó¨ç¼Æ®É¡A§Ú­Ì¤]¥i¥H¨Ï¥Î dbup ¤Î dbdown ¨Ó¸õ¨ì¤£¦Pªº¤u§@ªÅ¶¡¡A¥H«KÀ˵ø¦UÅܼơC

°²³]¦b recipsum.m ªº¿ù»~¤w­×¥¿§¹²¦¡A­×¥¿«áªºÀɮ׬O recipsum1.m¡A§Ú­ÌÁÙ¬O¥i¯à¹J¨ì¨ä¥L°ÝÃD¡A¨Ò¦p¡G

>> recipsum1([2 0 2]) ans = Inf

¦¹®É¶Ç¦^µª®×¬° Inf¡]µL½a¤j¡^¡A³o¨Ã¤£¬O§Ú­Ì¹w´Áªºµª®×¡]°²³]§Ú­Ì¨Ã¨S¦³¹w´Á¨ì¨Ï¥ÎªÌ·|¿é¤J§t¦³ 0 ªº¦V¶q¡^¡C¬°±´¬d¿ù»~©Ò¦b¡A§Ú­Ì³]¥ß¥t¤@­Ó¤¤Â_±ø¥ó¡A¨Ã¦A¦¸©I¥s¨ç¼Æ¡G

>> dbstop if naninf >> recipsum1([2 0 2]) NaN/Inf breakpoint hit for recipsum1>reciproc on line 7. 7 output = 1./input;

«Ü©úÅã¦a¡A¦b­pºâ 0 ªº­Ë¼Æ®É¡A¥X²{¤F Inf¡C§Ú­Ì°²³]¦b¿é¤J¬° 0 ®É¡A¨ä­Ë¼Æ¤£­p¡A«hµ{¦¡½X¥i­×¥¿¦p¤U¡G

k>> dbquit % Â÷¶}°£¿ù¼Ò¦¡ >> type recipsum2 function out = recipsum(x) recip = reciproc(x); out = sum(recip); function output = reciproc(input) input(find(input==0)) = []; % Eliminate "0" elements output = 1./input;

¦¹®É¦A©I¥s¨ç¼Æ¡A´N¥i¥H²£¥Í§Ú­Ì¹w´Áªºµ²ªG¡G

>> recipsum2([2 0 2]) ans = 1

Hint
¦b¶i¦æ¤j¶qÁcº¾ªº¼Æ­È¹Bºâ®É¡A±ý°»´ú Nan ©Î Inf ªº²£¥Í¡A¨Ï¥Î¡udbstop if naninf ¡v³Ì¾A¦X¡I


MATLABµ{¦¡³]­p¡G¤Jªù½g