ÓÑÇéÌáʾ£ºÈç¹û±¾ÍøÒ³´ò¿ªÌ«Âý»òÏÔʾ²»ÍêÕû£¬Çë³¢ÊÔÊó±êÓÒ¼ü¡°Ë¢Ð¡±±¾ÍøÒ³£¡
VB2008´ÓÈëÃŵ½¾«Í¨(PDF¸ñʽӢÎÄ°æ)-µÚ32²¿·Ö
¿ì½Ý²Ù×÷: °´¼üÅÌÉÏ·½Ïò¼ü ¡û »ò ¡ú ¿É¿ìËÙÉÏÏ·ҳ °´¼üÅÌÉ쵀 Enter ¼ü¿É»Øµ½±¾ÊéĿ¼ҳ °´¼üÅÌÉÏ·½Ïò¼ü ¡ü ¿É»Øµ½±¾Ò³¶¥²¿! Èç¹û±¾ÊéûÓÐÔĶÁÍ꣬ÏëÏ´μÌÐø½Ó×ÅÔĶÁ£¬¿ÉʹÓÃÉÏ·½ "Êղص½ÎÒµÄä¯ÀÀÆ÷" ¹¦ÄÜ ºÍ "¼ÓÈëÊéÇ©" ¹¦ÄÜ£¡
team¡¡of¡¡developers£»¡¡and¡¡that¡¡means¡¡code¡¡written¡¡by¡¡one¡¡developer¡¡is¡¡going¡¡to¡¡be¡¡used¡¡and¡¡¡¡
modified¡¡by¡¡another¡¡developer¡£¡¡Since¡¡the¡¡two¡¡developers¡¡can¡¯t¡¡perform¡¡a¡¡Vulcan¡¡mind¡¡meld£»¡¡¡¡
they¡¡must¡¡have¡¡a¡¡well¡understood¡¡and¡¡useful¡¡form¡¡of¡¡munication¡£¡¡But¡¡that¡¯s¡¡just¡¡part¡¡of¡¡¡¡
the¡¡solution¡£¡¡The¡¡code¡¡itself¡¡must¡¡be¡¡easy¡¡to¡¡understand¡£¡¡
¡¡¡¡¡¡¡¡¡¡The¡¡challenge¡¡of¡¡writing¡¡software¡¡is¡¡not¡¡creating¡¡a¡¡perfect¡¡piece¡¡of¡¡code£»¡¡but¡¡writing¡¡code¡¡¡¡
that¡¡can¡¡be¡¡understood¡¡by¡¡other¡¡developers¡¡and¡¡used¡¡by¡¡other¡¡pieces¡¡of¡¡software¡£¡¡The¡¡goal¡¡isn¡¯t¡¡¡¡
to¡¡be¡¡clever¡¡and¡¡write¡¡software¡¡that¡¡can¡¡do¡¡everything£»¡¡but¡¡to¡¡write¡¡simple£»¡¡robust£»¡¡and¡¡easy¡to
understand¡¡software¡£¡¡The¡¡¡°keep¡¡it¡¡simple¡±¡¡approach¡¡is¡¡the¡¡best¡¡way¡¡forward¡£¡¡
¡¡¡¡¡¡¡¡¡¡Having¡¡understandable¡¡code¡¡is¡¡particularly¡¡important¡¡when¡¡things¡¡go¡¡wrong¡£¡¡Your¡¡code¡¡¡¡
should¡¡generate¡¡the¡¡appropriate¡¡errors¡£¡¡For¡¡example£»¡¡suppose¡¡your¡¡code¡¡relies¡¡on¡¡a¡¡file¡¡being¡¡¡¡
present¡£¡¡When¡¡the¡¡file¡¡is¡¡not¡¡present£»¡¡your¡¡code¡¡should¡¡generate¡¡a¡¡clear¡¡and¡¡distinct¡¡error£»¡¡such¡¡¡¡
as¡¡¡°File¡¡XYZ¡¡is¡¡not¡¡present¡¡and¡¡thus¡¡I¡¡cannot¡¡continue¡£¡±¡¡Upon¡¡seeing¡¡such¡¡an¡¡error¡¡message£»¡¡¡¡
another¡¡developer¡¡would¡¡know¡¡that¡¡he¡¡should¡¡check¡¡whether¡¡the¡¡file¡¡is¡¡actually¡¡there¡£¡¡
¡¡¡¡¡¡¡¡¡¡This¡¡chapter¡¡explains¡¡exceptions£»¡¡as¡¡errors¡¡in¡¡an¡¡application¡¡are¡¡technically¡¡known£»¡¡and¡¡how¡¡¡¡
to¡¡handle¡¡them¡£¡¡We¡¯ll¡¡begin¡¡with¡¡an¡¡overview¡¡of¡¡how¡¡exceptions¡¡fit¡¡into¡¡the¡¡structure¡¡of¡¡a¡¡program¡£¡¡¡¡
Understanding¡¡Errors£»¡¡Exceptions£»¡¡and¡¡¡¡
Exception¡¡Handling¡¡
An¡¡error¡¡is¡¡when¡¡something¡¡is¡¡not¡¡right¡¡and¡¡could¡¡be¡¡the¡¡result¡¡of¡¡incorrect¡¡data¡¡or¡¡an¡¡incorrect¡¡¡¡
calculation¡£¡¡However£»¡¡the¡¡¡¡CLR¡¡does¡¡not¡¡understand¡¡errors£»¡¡it¡¡understands¡¡only¡¡exceptions¡£¡¡
¡¡¡¡¡¡¡¡¡¡For¡¡example£»¡¡if¡¡an¡¡error¡¡is¡¡caused¡¡by¡¡multiplying¡¡two¡¡numbers¡¡rather¡¡than¡¡adding¡¡them£»¡¡¡¡
your¡¡program¡¡will¡¡continue¡¡to¡¡function£»¡¡but¡¡will¡¡produce¡¡the¡¡wrong¡¡results¡£¡¡A¡¡similar¡¡error¡¡occurs¡¡¡¡
when¡¡a¡¡user¡¡enters¡¡the¡¡wrong¡¡data¡ªthe¡¡answer¡¡will¡¡be¡¡wrong£»¡¡but¡¡the¡¡program¡¡will¡¡still¡¡run¡£¡¡
¡¡¡¡¡¡¡¡¡¡In¡¡the¡¡case¡¡of¡¡a¡¡serious¡¡problem¡¡that¡¡is¡¡beyond¡¡the¡¡control¡¡of¡¡the¡¡user¡¡or¡¡that¡¡threatens¡¡to¡¡crash¡¡¡¡
your¡¡program£»¡¡the¡¡CLR¡¡steps¡¡in¡¡and¡¡treats¡¡this¡¡as¡¡an¡¡exception¡£¡¡This¡¡interrupts¡¡the¡¡program¡¡and¡¡¡¡
allows¡¡your¡¡code¡¡to¡¡deal¡¡with¡¡the¡¡problem£»¡¡rather¡¡than¡¡letting¡¡the¡¡program¡¡crash¡£¡¡£¨Some¡¡would¡¡¡¡
argue¡¡that¡¡an¡¡exception¡¡will¡¡not¡¡halt¡¡your¡¡entire¡¡program£»¡¡but¡¡a¡¡thread¡¡of¡¡your¡¡program£»¡¡while¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡115¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Page¡¡138¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
116¡¡¡¡¡¡¡¡¡¡¡¡¡¡CH¡¡AP¡¡T¡¡E¡¡R¡¡¡¡¡¡5¡¡¡¡¡¡¡ö¡¡¡¡¡¡¡¡L¡¡E¡¡A¡¡R¡¡N¡¡IN¡¡G¡¡¡¡¡¡AB¡¡OU¡¡T¡¡¡¡¡¡V¡¡I¡¡SU¡¡A¡¡L¡¡¡¡¡¡B¡¡AS¡¡IC¡¡¡¡¡¡E¡¡X¡¡C¡¡E¡¡P¡¡TI¡¡ON¡¡¡¡¡¡H¡¡AN¡¡D¡¡L¡¡IN¡¡G¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡this¡¡is¡¡technically¡¡true£»¡¡it¡¯s¡¡not¡¡an¡¡important¡¡distinction¡¡for¡¡this¡¡introduction¡¡to¡¡exceptions¡££©¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡This¡¡is¡¡called¡¡¡¡exception¡¡handling¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡To¡¡understand¡¡how¡¡code¡¡organization¡¡affects¡¡exception¡¡handling£»¡¡think¡¡of¡¡an¡¡application¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡as¡¡a¡¡large¡¡corporation¡£¡¡A¡¡corporation¡¡has¡¡a¡¡chief¡¡executive¡¡officer¡¡£¨CEO£©£»¡¡then¡¡first¡level¡¡managers£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡then¡¡mid¡level¡¡managers¡£¡¡Corporations¡¡and¡¡management¡¡within¡¡corporations¡¡understand¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡that¡¡to¡¡get¡¡anything¡¡done£»¡¡they¡¡must¡¡develop¡¡a¡¡game¡¡plan¡¡and¡¡then¡¡carry¡¡out¡¡the¡¡game¡¡plan¡£¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡The¡¡CEO¡¡or¡¡highest¡¡level¡¡manager¡¡will¡¡know¡¡about¡¡the¡¡overall¡¡game¡¡plan¡£¡¡The¡¡pany¡¡is¡¡orga
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡nized¡¡so¡¡that¡¡lower¡level¡¡managers¡¡and¡¡workers¡¡can¡¡carry¡¡out¡¡discrete¡¡tasks¡¡as¡¡defined¡¡in¡¡the¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡game¡¡plan¡£¡¡In¡¡other¡¡words£»¡¡these¡¡organizational¡¡units¡¡carry¡¡out¡¡the¡¡implementation¡¡of¡¡the¡¡plan¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Translating¡¡this¡¡to¡¡software£»¡¡your¡¡code¡¡contains¡¡two¡¡types¡¡of¡¡methods£º¡¡methods¡¡that¡¡orga
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡nize¡¡the¡¡functionality¡¡and¡¡methods¡¡that¡¡implement¡¡the¡¡functionality¡£¡¡You¡¡create¡¡organizational¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡code¡¡so¡¡that¡¡you¡¡have¡¡the¡¡ability¡¡to¡¡separate¡¡each¡¡task¡¡from¡¡the¡¡others¡£¡¡The¡¡work¡¡of¡¡one¡¡does¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡not¡¡affect¡¡the¡¡other£»¡¡and¡¡thus¡¡the¡¡code¡¡has¡¡been¡¡modularized¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡öNote¡¡¡¡As¡¡with¡¡corporation¡¡reorganization£»¡¡management¡¡code¡¡is¡¡constantly¡¡being¡¡reorganized¡¡to¡¡fix¡¡bugs¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡and¡¡implement¡¡new¡¡pieces¡¡of¡¡functionality¡£¡¡For¡¡example£»¡¡you¡¡might¡¡reorganize¡¡code¡¡so¡¡that¡¡it¡¡bees¡¡more¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡streamlined¡¡and¡¡efficient¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Now¡¡we¡¡need¡¡to¡¡put¡¡exceptions¡¡into¡¡the¡¡picture¡£¡¡Errors¡¡occur¡¡when¡¡something¡¡does¡¡not¡¡go¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡according¡¡to¡¡plan¡£¡¡In¡¡the¡¡management¡¡hierarchy£»¡¡if¡¡an¡¡error¡¡occurs£»¡¡the¡¡CEO¡¡is¡¡not¡¡automati
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡cally¡¡told¡£¡¡For¡¡example£»¡¡if¡¡the¡¡pany¡¡ran¡¡out¡¡of¡¡staples£»¡¡most¡¡likely¡¡the¡¡CEO¡¡would¡¡not¡¡want¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡to¡¡hear¡¡about¡¡it¡£¡¡If£»¡¡however£»¡¡one¡¡of¡¡the¡¡manufacturing¡¡plants¡¡fell¡¡off¡¡the¡¡side¡¡of¡¡a¡¡cliff£»¡¡then¡¡the¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡CEO¡¡would¡¡definitely¡¡want¡¡to¡¡know¡£¡¡The¡¡information¡¡about¡¡the¡¡error¡¡is¡¡passed¡¡up¡¡the¡¡chain¡¡of¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡mand¡¡just¡¡as¡¡far¡¡as¡¡it¡¡needs¡¡to¡¡go¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Relating¡¡this¡¡to¡¡the¡¡different¡¡types¡¡of¡¡methods£»¡¡in¡¡your¡¡hierarchical¡¡code£»¡¡the¡¡implementa
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡tion¡¡code¡¡is¡¡responsible¡¡for¡¡making¡¡sure¡¡all¡¡errors¡¡are¡¡reported£»¡¡and¡¡the¡¡organizational¡¡code¡¡is¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡responsible¡¡for¡¡either¡¡fixing¡¡the¡¡error¡¡or¡¡propagating¡¡it¡¡to¡¡a¡¡piece¡¡of¡¡code¡¡that¡¡is¡¡higher¡¡in¡¡the¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡hierarchy¡£¡¡The¡¡higher¡¡piece¡¡of¡¡code¡¡should¡¡either¡¡fix¡¡the¡¡problem¡¡or¡¡delegate¡¡it¡¡again¡¡to¡¡a¡¡higher¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡piece¡¡of¡¡code£»¡¡depending¡¡on¡¡the¡¡seriousness¡¡of¡¡the¡¡error¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡For¡¡the¡¡remainder¡¡of¡¡this¡¡chapter£»¡¡we¡¯ll¡¡look¡¡at¡¡the¡¡various¡¡ways¡¡of¡¡dealing¡¡with¡¡exceptions¡£¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡The¡¡idea¡¡is¡¡to¡¡give¡¡you¡¡practical¡¡solutions¡¡that¡¡you¡¡can¡¡use¡¡without¡¡getting¡¡too¡¡bogged¡¡down¡¡in¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡theoretical¡¡what¡ifs¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡When¡¡working¡¡with¡¡exceptions£»¡¡it¡¡is¡¡often¡¡useful¡¡to¡¡run¡¡the¡¡application¡¡in¡¡Visual¡¡Basic¡¯s¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡debugger£»¡¡so¡¡let¡¯s¡¡start¡¡there¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Running¡¡the¡¡Debugger¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡The¡¡Visual¡¡Basic¡¡debugger¡¡runs¡¡the¡¡application£»¡¡but¡¡adds¡¡the¡¡ability¡¡to¡¡monitor¡¡what¡¡the¡¡appli
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡cation¡¡is¡¡doing¡£¡¡To¡¡start¡¡the¡¡debugger£»¡¡select¡¡Debug¡¡¡¡Start¡¡Debugging¡¡from¡¡the¡¡menu¡¡bar¡¡or¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡press¡¡F5¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Your¡¡application¡¡will¡¡run¡¡as¡¡normal£»¡¡but¡¡Visual¡¡Basic¡¡Express¡¯s¡¡layout¡¡will¡¡change¡¡slightly¡£¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡From¡¡the¡¡perspective¡¡of¡¡the¡¡application£»¡¡you¡¡will¡¡not¡¡see¡¡a¡¡difference¡¡in¡¡its¡¡behavior¡£¡¡The¡¡appli
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡cation¡¡executes¡¡in¡¡the¡¡same¡¡way£»¡¡regardless¡¡of¡¡whether¡¡it¡¡is¡¡being¡¡run¡¡or¡¡being¡¡debugged¡£¡¡To¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡stop¡¡debugging£»¡¡just¡¡close¡¡your¡¡application¡¡normally¡£¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Page¡¡139¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡CH¡¡AP¡¡T¡¡E¡¡R¡¡¡¡¡¡5¡¡¡¡¡¡¡ö¡¡¡¡¡¡¡¡L¡¡E¡¡AR¡¡N¡¡IN¡¡G¡¡¡¡¡¡AB¡¡O¡¡U¡¡T¡¡¡¡¡¡V¡¡I¡¡SU¡¡A¡¡L¡¡¡¡¡¡B¡¡AS¡¡IC¡¡¡¡¡¡E¡¡X¡¡CE¡¡PT¡¡I¡¡ON¡¡¡¡¡¡HA¡¡N¡¡D¡¡L¡¡IN¡¡G¡¡117¡¡
¡öTip¡¡¡¡You¡¡may¡¡find¡¡it¡¡useful¡¡to¡¡display¡¡the¡¡Locals¡¡and¡¡Call¡¡Stack¡¡panes£»¡¡which¡¡allow¡¡you¡¡to¡¡see¡¡what¡¡is¡¡going¡¡¡¡
on¡¡in¡¡the¡¡application¡£¡¡To¡¡do¡¡so£»¡¡start¡¡debugging¡¡and¡¡select¡¡Debug¡¡¡¡Windows£»¡¡and¡¡then¡¡choose¡¡the¡¡window¡¡¡¡
£¨Call¡¡Stack¡¡or¡¡Locals£©¡£¡¡
¡¡¡¡¡¡¡¡¡¡You¡¡can¡¡also¡¡start¡¡the¡¡debugger¡¡at¡¡a¡¡certain¡¡point¡¡in¡¡your¡¡code¡¡by¡¡setting¡¡a¡¡breakpoint£»¡¡as¡¡¡¡
shown¡¡in¡¡Figure¡¡5¡1¡£¡¡When¡¡Visual¡¡Basic¡¡reaches¡¡this¡¡breakpoint£»¡¡it¡¡goes¡¡into¡¡debug¡¡mode£»¡¡this¡¡¡¡
mode¡¡is¡¡different¡¡from¡¡application¡¡mode¡ªthe¡¡state¡¡it¡¡is¡¡in¡¡before¡¡it¡¡reaches¡¡the¡¡breakpoint¡¡and¡¡¡¡
after¡¡it¡¡leaves¡¡the¡¡breakpoint¡£¡¡To¡¡leave¡¡debug¡¡mode£»¡¡you¡¡can¡¡press¡¡the¡¡F5¡¡key¡¡to¡¡switch¡¡to¡¡appli
cation¡¡mode¡¡and¡¡continue¡¡executing¡¡the¡¡application£»¡¡or¡¡press¡¡Ctrl£«Alt£«Break¡¡to¡¡stop¡¡debugging¡¡¡¡
and¡¡stop¡¡executing¡¡the¡¡application¡£¡¡
Figure¡¡5¡1¡£¡¡Debugging¡¡an¡¡application¡¡with¡¡a¡¡breakpoint¡¡
¡¡¡¡¡¡¡¡¡¡¡¡Running¡¡an¡¡application¡¡in¡¡the¡¡debugger¡¡is¡¡useful¡¡when¡¡tracking¡¡down¡¡exceptions£»¡¡as¡¡you¡¯ll¡¡¡¡
see¡¡in¡¡the¡¡next¡¡section¡£¡¡
Handling¡¡Exceptions¡¡
Those¡¡who¡¡recall¡¡the¡¡¡°good¡¡old¡¡days¡±¡¡of¡¡Windows¡¡3¡£0¡¡and¡¡its¡¡16¡¡bits¡¡will¡¡also¡¡remember¡¡the¡¡¡¡
dreaded¡¡three¡finger¡¡salute¡£¡¡The¡¡three¡finger¡¡salute¡¡refers¡¡to¡¡pressing¡¡Ctrl£«Alt£«Delete¡¡to¡¡reboot¡¡¡¡
Windows¡¡after¡¡a¡¡program¡¡crashed¡£¡¡You¡¡did¡¡not¡¡have¡¡the¡¡chance¡¡to¡¡save¡¡your¡¡work£»¡¡you¡¡just¡¡had¡¡¡¡
to¡¡watch¡¡everything¡¡go¡¡down¡¡the¡¡drain¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡If¡¡you¡¡missed¡¡those¡¡puting¡¡days£»¡¡count¡¡yourself¡¡lucky¡£¡¡Nowadays£»¡¡we¡¡have¡¡mechanisms¡¡to¡¡¡¡
catch¡¡unexpected¡¡errors¡¡and¡¡make¡¡sure¡¡that¡¡the¡¡program¡¡or¡¡operating¡¡system¡¡keeps¡¡on¡¡processing¡£¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Page¡¡140¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
118¡¡¡¡¡¡¡¡¡¡¡¡¡¡CH¡¡AP¡¡T¡¡E¡¡R¡¡¡¡¡¡5¡¡¡¡¡¡¡ö¡¡¡¡¡¡¡¡L¡¡E¡¡A¡¡R¡¡N¡¡IN¡¡G¡¡¡¡¡¡AB¡¡OU¡¡T¡¡¡¡¡¡V¡¡I¡¡SU¡¡A¡¡L¡¡¡¡¡¡B¡¡AS¡¡IC¡¡¡¡¡¡E¡¡X¡¡C¡¡E¡¡P¡¡TI¡¡ON¡¡¡¡¡¡H¡¡AN¡¡D¡¡L¡¡IN¡¡G¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡The¡¡big¡¡deal¡¡with¡¡modern¡¡operating¡¡systems¡¡and¡¡programming¡¡environments¡¡like¡¡the¡¡CLR¡¡is¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡that¡¡they¡¡can¡¡stop¡¡a¡¡single¡¡task¡¡from¡¡disrupting¡¡the¡¡operation¡¡of¡¡the¡¡CPU¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Catching¡¡Exceptions¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Recall¡¡that¡¡in¡¡Chapter¡¡2£»¡¡Visual¡¡Basic¡¡Express¡¡interrupted¡¡the¡¡flow¡¡of¡¡the¡¡program¡¡by¡¡catching¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡the¡¡exception¡¡generated¡¡by¡¡a¡¡mathematical¡¡overflow¡¡situation¡£¡¡This¡¡is¡¡like¡¡your¡¡driving¡¡teacher¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡realizing¡¡you¡¡are¡¡making¡¡a¡¡mistake¡¡and¡¡pressing¡¡hard¡¡on¡¡the¡¡brake£»¡¡so¡¡you¡¡don¡¯t¡¡hit¡¡a¡¡tree£»¡¡person£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡or¡¡another¡¡car¡£¡¡So£»¡¡in¡¡a¡¡sense£»¡¡you¡¡can¡¡think¡¡of¡¡the¡¡CLR¡¡exception¡handling¡¡mechanism¡¡as¡¡the¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡teacher¡¡stepping¡¡on¡¡the¡¡brake¡¡when¡¡something¡¡devastating¡¡is¡¡about¡¡to¡¡happen¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Stepping¡¡on¡¡the¡¡brake¡¡stops¡¡the¡¡devastation£»¡¡but¡¡you£»¡¡as¡¡the¡¡driver£»¡¡will¡¡get¡¡a¡¡shock¡¡because¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡of¡¡the¡¡error¡¡that¡¡you¡¡were¡¡about¡¡to¡¡make¡£¡¡Likewise£»¡¡when¡¡an¡¡exception¡¡is¡¡triggered£»¡¡the¡¡program¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡gets¡¡a¡¡shock¡£¡¡How¡¡you¡¡deal¡¡with¡¡the¡¡shock¡¡determines¡¡the¡¡fate¡¡of¡¡the¡¡program¡£¡¡In¡¡the¡¡example¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡of¡¡the¡¡overflow¡¡error¡¡in¡¡Chapter¡¡2£»¡¡the¡¡shock¡¡was¡¡captured¡¡by¡¡the¡¡IDE£»¡¡and¡¡thus¡¡a¡¡friendly£»¡¡easy
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡to¡understand¡¡user¡¡interface¡¡was¡¡presented¡£¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Consider¡¡the¡¡source¡¡code¡¡shown¡¡in¡¡Figure¡¡5¡2£»¡¡which¡¡generates¡¡an¡¡exception¡£¡¡This¡¡is¡¡referred¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡to¡¡as¡¡¡¡throwing¡¡an¡¡exception¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Class¡¡declaration¡¡with¡¡a¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡single¡¡data¡¡member¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Class¡¡is¡¡declared£»¡¡but¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Class¡¡MyType¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Public¡¡DataMember¡¡As¡¡Integer¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡not¡¡instantiated¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡End¡¡Class¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Class¡¡Tests¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Public¡¡Sub¡¡GeneratesException£¨£©¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Dim¡¡cls¡¡As¡¡MyType¡¡=¡¡Nothing¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡cls¡£DataMember¡¡=¡¡10¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡End¡¡Sub¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Public¡¡Sub¡¡RunAll£¨£©¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Data¡¡member¡¡of¡¡the¡¡class¡¡is¡¡assigned¡¡even¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡GeneratesException£¨£©¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡though¡¡the¡¡class¡¡has¡¡not¡¡been¡¡instantiated¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡End¡¡Sub¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡This¡¡will¡¡cause¡¡an¡¡exception¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡End¡¡Class¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Figure¡¡5¡2¡£¡¡¡¡Throwing¡¡an¡¡exception¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡If¡¡the¡¡RunAll£¨£©¡¡method¡¡were¡¡executed£»¡¡the¡¡exception¡¡shown¡¡in¡¡Figure¡¡5¡3¡¡would¡¡be¡¡generated¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡in¡¡Visual¡¡Basic¡¡Express¡¡£¨use¡¡F5¡¡to¡¡run¡¡the¡¡debugger£©¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡The¡¡exception¡¡did¡¡not¡¡cause¡¡the¡¡operating¡¡system¡¡or¡¡Visual¡¡Basic¡¡Express¡¡to¡¡crash£»¡¡because¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Visual¡¡Studio¡¯s¡¡built¡in¡¡exception¡¡handler¡¡caught¡¡it¡£¡¡Visual¡¡Studio¡¡hit¡¡the¡¡brake¡¡and¡¡made¡¡s
¿ì½Ý²Ù×÷: °´¼üÅÌÉÏ·½Ïò¼ü ¡û »ò ¡ú ¿É¿ìËÙÉÏÏ·ҳ °´¼üÅÌÉ쵀 Enter ¼ü¿É»Øµ½±¾ÊéĿ¼ҳ °´¼üÅÌÉÏ·½Ïò¼ü ¡ü ¿É»Øµ½±¾Ò³¶¥²¿!
ÎÂÜ°Ìáʾ£º ο´Ð¡ËµµÄͬʱ·¢±íÆÀÂÛ£¬Ëµ³ö×Ô¼ºµÄ¿´·¨ºÍÆäËüС»ï°éÃÇ·ÖÏíÒ²²»´íŶ£¡·¢±íÊéÆÀ»¹¿ÉÒÔ»ñµÃ»ý·ÖºÍ¾Ñé½±Àø£¬ÈÏÕæдԴ´ÊéÆÀ ±»²ÉÄÉΪ¾«ÆÀ¿ÉÒÔ»ñµÃ´óÁ¿½ð±Ò¡¢»ý·ÖºÍ¾Ñé½±ÀøŶ£¡