ǰÑÔ
×î½ü²©Ö÷ÁÙ½ü±ÏÒµ¼¾£¬ÎªÁËÍêÃÀµÄдһƪ±ÏÒµÂÛÎÄ£¬ÕæÊÇ£º¡°³úºÌÈÕµ±Î磬º¹µÎºÌÏÂÍÁ¡±<¡ª¡ª Õâ¾äÊ«¸ú±ÏÒµÎÒд±ÏÒµÂÛÎÄûÈκÎһëǮ¹ØÏµ£¬ÎÒ¾ÍÊÇͻȻÏëÒ÷ʪÁË¡£²»¹ý²©Ö÷×÷ÎªÍøÂ繤³ÌרҵµÄºÃÇàÄê£¬Ôø¾µÄÔ¸ÍûºÍÀíÏë¾ÍÊÇÔÚÏÂË®µÀ¸É³öÒ»·¬ºäºäÁÒÁҵĴóÊÂÒµ£¬Ã»´íÊǾÍÊÇÏÂË®µÀ£¬ÎÒÃǵÄÕ÷;ÔÚÏÂË®µÀ£¡£¡²»¹ý´ó¼Ò±ðÎó»á£¬ÎÒ²»ÊÇÈÌÕß¹êµÄÄԲзۣ¡ÌýÎÒ¼ÌÐøËµ£¡ÎÒÏëµÄÊǵÈÎÒÔÚ¸÷´óÅÅˮϵͳ¸÷´óÏÂË®µÀ¹¦³ÉÃû¾ÍµÄʱºò£¬ÎҾͿÉÒÔÖ¸×ÅÒ»¸ö¾®¸Ç¶ÔÎÒµÄËï×Ó˵£º¡°Åµ ÄǸöÏÂÃæµÄͨÐŹâÀÂÊÇÒ¯Ò¯Îҽӵģ¡£¡¡± ÎÒÂúÁ³×ÔºÀµØ½ÓÊÜ×ÅÕâËï×ӵľ´Ñö£¡µ«Êǰ¡£¬Ôø¾µÄÔ¸Íû¶¼ÊµÏÖ²»ÁËÁË£¬ÎÒÉîÉî°®×ŵĵØÏÂͨÐŹâÀ°¡£¬Ôø¾¶àÉÙ¸öÒ¹ÍíÀáË®´òʪÁËÎҵıÏÒµÂÛÎÄ£¬äÖȾ¿ªµÄ±ÊÄ«ÄǶ¼ÊǸçÊÅÈ¥µÄÇà´º°¡¡£
ÒòΪÉú»î¾ÍÏñ¿ªÁ˲©Ö÷Ò»¸öÍæÐ¦£¬Èò©Ö÷Óöµ½ÁËÒ»ÖÖ¼¦£¬ÄÇÊÇÒ»ÖÖÌØÊâÆ·Öֵ念¬Ëü½Ð×ö±ÆÓż¦£¡£¡¾ÍÊÇÕâÖ»¼¦Èò©Ö÷ÎÞÔµÎ޹ʵijÉÁËÒ»Ö»APM³¬200µÄÒ°Éú¾¿¼«³ÌÐòÔ³£¡£¡ºð~ à»~£¬°Ñ²©Ö÷´øÀëÁËÏÂË®µÀ£¡²¢ÇÒÓëÕâÖ»¼¦Ì¤ÉÏÁíÒ»¶ËÕ÷;£¡ÁÙ×ßµÄʱºò£¬ÏÂË®µÀµÄͨÐŹâÀ¾ͽ»¸øÄãÃÇÁË£¬·ÊÔí»ùÓÑÃÇ(ÍøÂ繤³ÌµÄ»ùÓÑÃÇ)£¡£¡ÎÒ¿¿£¬ËûÃǾ¹È»ÔÚ´òÓ¡µê»¨ÁË50¿éÇ®¾ÍÖ±½ÓÂòÁËÒ»Ì×Éî¶ÈºÀ»ª±ÏÒµÂÛÎÄÌײͣ¡ÀïÃæ°üº¬ÁËÂÛÎÄ£¬¹¤³ÌÖÆÍ¼£¬CAD£¬±¨¼ÛÇåµ¥£¬ÍØÆË½á¹¹¡¡×îÖØÒªµÄÊÇÀϰå³Ðŵ²»ÐèÈκÎÐ޸ģ¬Ö±½Ó¿ÉÒÔͨ¹ý±ÏÒµ´ð±ç£¬²»Í¨¹ýÀ´ÄêÃâ·ÑÔÙÌṩһÌ×ÂÛÎÄ£¬×îÌùÐĵÄÊǾ¹È»Ö§³Öͨ¹ýÔÙ¸¶¿î£¡£¡£¬
ͼ1

ÀÏ×ÓдÂÛÎÄдÁ˰ë¸öÔÂÏñ¹·Ò»Ñù£¬ËûÃǾ¹È»Ö±½Ó¾ÍÂòÁË£¡¾ÍÕâôÂò¹ýÈ¥ÁË£¡£¡¶ÔµÃÆðÀÏʦµÄ×»×»½Ì»å¡¢×Ô¼ºµÄÐÁ¿à¸¶³öºÍ¸¸Ä¸µÄÆÚ´ýô£¿ÎÒ¾ÍÎÊÄãÃDzÑÀ¢²»²ÑÀ¢£¿ÎªÊ²Ã´ÂòµÄʱºò²»º°ÉÏÎÒ£¿ÀáÒÑÌʸÉ~
³¶µ°¹ý¶àÈÝÒ×Éö¿÷
±ÆÓż¦
ÖÕÓÚÀ´µ½ÁË´ó¼ÒÆÚ´ýµÄÕýƬ£¬½ñÌìÎÒ¾ÍÒªºÍ´ó¼Ò½²ÎҺͱÆÓż¦µÄ¹ÊÊ£¬±ÆÓż¦ËüÓÅÑŵ͵÷£¬ËüÉí²ÄÁáç磬²ØÄäÔÚºÚ°µ´¦£¬Ìô¶¯×ÅÎÒµÄÓûÍû£¡Ôø¶à¸öÈÕÒ¹²©Ö÷¶¼¡¡£¨²Á£¡ÄáÂ꣬±ÆÓż¦ÊÇʲô¹í£¿ËµºÃµÄ¼¼ÊõÎÄÕÂ?£©Í¬Ñ§ÄãÕæµÄ(bi¨¨)¼±£¬ÄãÏÈ×øÏ£¬ÏȰÑЬ×Ó´©ºÃ£¡ÎÒ˵µÄ±ÆÓż¦ËüµÄÓ¢ÎÄÃû½Ð×ö(Bug)£¬Ëüͦ(T)ÃÀ(M)µÄ(D)¡¡
¸è×гªµÄºÃ£º
¶àÉÙÔ³Ôø±»Ëü¶á×ßÄêÇáµÄÈÝÑÕ
¶àÉÙÔ³ÔøÔÚËüÃæÇ°ÁÁÃÅͺÁËÍ·
¶àÉÙBugÔø¾ÉúÃüÖÐÀ´ÁËÓÖ»¹
¿ÉÖªÒ»ÉúÓÐÄãÎÒ¶¼ÅãÔÚÄãÉí±ß
ͼ2

ÎÞÊý¸öÒ¹ÍíÄã¾¾×ÅÍ··¢ºÍBug˺ҧµÄÇé¾°²©Ö÷¿ÉÒÔÌå»á£¬ËùÒÔÕâ´ÎµÄÕâÆªÎÄÕ²©Ö÷¾ÍÒª¸ø´ó¼ÒÕûÀíÒ»¸öµ÷½ÌIOS±ÆÓż¦µÄ·½·¨ºÀ»ªÌײͣ¡£¡·ÅÐÄ£¡¾ø¶ÔµÄÉî¶ÈºÀ»ª£¬ÒòΪÒѾ¼ÓÈë¿ÏµÂ»ùºÀ»ªÎç²Í~¿È¿È~ÆäʵÊÇÒòΪ±ÆÓż¦(Bug)¶ÔÓÚÎÒÃDZϾ¹ÊdzýÁËÀÏÆÅÖ®ÍâµÚ¶þ¿ÉŵĴæÔÚ£¡ÎÒÃDZØÐëÒªÁ·¾ÍÍÍ·Ìú±ÛÊ®°Ë°ãÎäÒÕ£¬¼ÀÁ·ÆæÃÅÇɼ¼¸÷ÖÖ´óɱ£¡·½¿ÉÓëÖ®ÖÜÐý²¢½«Ö®¼ßÃ𣡺㡸ú×Ų©Ö÷Ò»Æð×°±ÆÒ»Æð·É°É£¡£¡£¡£¡
µÚÒ»²½£º
ÎÒ¿´´ó¼ÒÅîÍ·¹¸ÃæµÄ¾ÍÖªµÀ´ó¼Ò¸Õ¸ÕÒ²²Ådebug»ØÀ´ £¬ÎÒÃǾÍÏÈд¸öhello worldѹѹ¾ª°Ñ£¡
µÚ¶þ²½
¡¡
Öª¼ºÖª±Ë °ÙÕ½²»´ù
´Ë´¦Îª´óÁ¿Copy£¡²»Ï²ÇëÅ磡
The software doesn't do something that the product specification says it should do.
The software does something that the product specification says it shouldn't do.
The software does something that the product specification doesn't mention.
The software doesn't do something that the product specification doesn't mention but should.
The software is difficult to understand, hard to use, slow, or in the software tester's eyes will be viewed by the end user as just plain not right.
ÎÒ²»ÊÇÓ¢ÎĽÌʦ£¬Çë´ó¼Ò×ÔÐÐÇл»¶àÓïÑÔÔĶÁģʽ¡£
Ò²»¹ÓÐÓÐÈË´Ö±©µÄ¶¨Òå ¡±Bug¾ÍÊÇ´íÎó¡°£¬³ýÁËÊÀ½çÉϵÚÒ»Ö»BugÊǷɽøÈ¥µÄÄÇÖ»³æ×ÓÍ⣬ÆäËûBugÎãÓ¹ÖÃÒÉÄǶ¼ÊdzÌÐòÔ±ÃÇ×Ô¼ºÉúÏÂÀ´µÄ£¡³ÌÐòÔ±ÃÇ×Ô¼º·¸µÄ´íÎó£¡Èç¹û˵һ¸öÈí¼þ×÷Æ·(Çë×ðÖØÄã×Ô¼ºµÄ×÷Æ·£¬²»Òªº°ËûÃÇ¡±²úÆ·¡±»òÕß¡±ÏîÄ¿¡±)ÊdzÌÐòÔ±ÃÇ×Ô¼ºµÄº¢×Ó£¬ÄÇôBug¾ÍÊÇÕâ¸öº¢×ÓµÄÉúµÄ²¡£¬Óв¡µÃÖΣ¬Ò©²»ÄÜÍ££¡Éú²¡Óи÷ÖÖÖÎÁÆ·½·¨£¬ÎïÁÆ£¬ÀíÁÆ£¬»¯ÁÆ£¬ÐÄÀíÁÆ¡¡ÄÇô¡°ÖÎÁÆ¡±BugÒ²ÊÇÓжàÖз½·¨µÄ£¡ÏÂÃæ²©Ö÷»áÒ»Ò»Áо٣¡³ÍÖÎÕâЩ¸öBug֮ǰ£¬²©Ö÷ÒªÏȰ¢À°ÍÀÒ»·¬£¬Óöµ½BugÒ²ÊÇÒ»¼þ±È½ÏßÙÁ˹·Á˵ÄÊÂÇ飬ÄãÒªÖªµÀÈκÎÈ˶¼»áÉú²¡£¬Ã»ÓÐÀýÍ⣡ËùÓÐÈκδúÂë¶¼ÓÐBugÕâÊǶ¨Àí£¬ÎÒÃÇÊ×ÏÈÒª´ÓÐÄ̬É϶ËÕýBugÕâ¼þÊÂÇ飬ÎÒÃÇ¿ÉÒÔÀí½âΪȱº¶Ò²ÊÇÒ»ÖÖÃÀ£¬¾ÍÏñ°¢Óê˵µÄ¡°Ã»ÓÐÖåÎÆµÄ׿ďÊÇ¿Éŵģ¬Ã»Óа׷¢µÄÀÏÕßÊÇÈÃÈËÒź¶µÄ¡£Ã»ÓзÏÐæµÄÈËÉúÌ«ÀÛÁË£¬Ã»ÓзÏÐæµÄ´óµØÌ«¼·ÁË£¬ÑڸǷÏÐæµÄ¾Ù¶¯Ì«Î±Õ©ÁË¡£¡±DebugÊÇΪÁËÖ¤Ã÷³ÌÐòÓÐ´í£¬¶ø²»ÊÇÖ¤Ã÷³ÌÐòÎÞ´íÎó£»ËùÒÔÎÒÃÇÒª×öµ½ÁÙBug¶ø²»¾åÕß,Ê¥ÈËÖ®ÓÂÒ²£¡ËùÒÔÎÒÃÇÒª×öµ½Õ½ÂÔÉÏÃêÊÓËü£¬Õ½ÊõÉÏÖØÊÓËü£¡ÄãÒªÐÄÀíĬÄîBugÆäʵͦ(T)ÃÀ(M)µÄ(D)!anyway ÎÞBug²»Éú»î£¡£¡
³éµ¶¶ÏBug
¶Ïµã£¬£¨ÎÒÇóÄãÃDz»ÒªÏëµ½Õž´Ðù£¬°¢ÐùËûÈÝÒ×ô£¬Ð¡ÊÜÓÖÔõôÁË£¿ÄãÃÇÕâ°ïÈËÕæÊǵģ¡£¡£©£¬ÎÒҪ˵µÄ¶ÏµãÊÇBreakPoint£¡»ù±¾Éϲ»ÊDzзϵÄIDE¶¼¾ßÓжϵãµ÷ÊÔ¹¦Äܰɣ¡ÓÈÆäÊÇXCode£¬ÎÒÃǼҵÄIDE¶Ïµãµ÷ÊÔ¹¦ÄÜ¿ÉÊÇÇ¿ÖÐÓÖÊÇÇ¿ÖÐÊÖ£¡ÔÚÕâ֮ǰ´ó¼Ò¿ÉÒÔÏÈÁ˽âһϹþ×ÓÊǶϵ㣿ËüÔõôʵÏֵģ¿¹¤×÷ÔÀíÔõôÑùµÄ£¿²©Ö÷¾ÍÏ׳ó˵˵×Ô¼ºµÄÀí½â°É£¬¶Ïµã£¬¹ËÃû˼Òå¾ÍÊÇ´ÓǰÓÐÒ»¸öµã£¬ºóÀ´Ëü¶ÏÁË£¬Ð»Ð»£¬ÎҵĹÊʽ²ÍêÁË¡£°¥Ó´»¹²»·þ£¬ÕâЩ»ù´¡³£Ê¶µÄ¶«Î÷×Ô¼º²»»á²é£¿Äã»¹ÕæµÄÁ³Æ¤ºñÉÏÌìÁËÈ¥ÁË£¬»¹Òª²©Ö÷¸øÄã²éÓ´£¬×Ô¼º²éÈ¥£¡
ÆÕͨ²Ù×÷
Èçͼ3

»ù±¾µÄ¶Ïµã²Ù×÷ÈçÏÂ
ͼ4

µã»÷ÄǸöºÚÁÐÁоʹ´½¨ÁËÒ»¸ö¶Ïµã£¬Ôٴεã»÷¾ÍÁÙʱȡÏûÕâ¸ö¶Ïµã(µ«ÊDz»É¾³ý)£¬³¤°´ÄǸö¶ÏµãÍϳöÈ¥¾Íɾ³ýÁË(mac osµÄϵͳ¹¤³Ìʦ¾ÍÊÇÏ¡·¹Í϶¯µÄ¿ì¸Ð)£¬µ±È»Ò²¿ÉÒÔÓÒ¼üÄǸö´´½¨µÄ¶Ïµã£¬»áµ¯³öÏàÓ¦µØ²Ëµ¥¡£
µ±È»Ò²»¹¿ÉÒÔ¼àÊÓij¸ö±äÁ¿£¡
ͼ5

ÔÚ¶ÔÏóÊÓͼÖУ¬ÓÒ¼üij¸ö¶ÔÏ󣬵ã»÷¡°Watch ¡®XXX¡¯¡±¾ÍÍê³ÉXXX¶ÔÏóµÄ¼àÊÓÁË¡£
ÕâÀïÎÒ¼àÊÓÁËlabÕâ¸öUILabelµÄ±äÁ¿£¬Ã¿µ±Õâ¸ö±äÁ¿½øÐиüÐÂËüµÄÐÅÏ¢¾Í»á±»´òÓ¡µ½¿ØÖÆÌ¨¡£
ºÃ°É£¡ÎÒÃÇ×î»ù±¾µÄ´´½¨¶ÏµãµÄ¹¤×÷ÒѾѧ»áÁË£¬XcodeÊæ·þÔÚʲôµØ·½ÄØ£¿¾ÍÊDz»·ÖDebugģʽºÍRunģʽµÄ£¬¿ÉÒÔ˵ÊÇÎÞ·ìÇл»µÄ£¬ÄãֻҪûÓд´½¨¶Ïµã£¬ÄÇô¾ÍÊÇRunµÄÕý³£Ä£Ê½£¬Èç¹û´´½¨Á˶ϵ㲢ÇÒÔËÐе½¶Ïµã´¦£¬¾Í×Ô¶¯½øÈëDebugģʽ¿©£¬²»ÏñijEC¿ªÍ·µÄIDE£¬¿ØÖÆÃæ°å¾ÍÏñ¿ª·É»úµÄÒ»Ñù£¬¼¸Íò¸ö°´Å¥ÒÔΪºÜÇ¿´ó£¬ÆäʵֻÓÃÁËRunºÍStop£¬»¹ÓÐʲôDebugģʽ£¬Appģʽ¡¡£¬¹ûÈ»XcodeµÄÓÅÔ½¸ÐÔÚ¶Ô±ÈÖиü¼ÓÇ¿ÁÒÁË£¬Êæ·þµ½¼«µãѽ£¬¾ÍÏñÏÄÌìµÄº£·ç·÷¹ý¾Õ»¨£¬àÅÊÇµÄ ¾ÍÊÇÄÇÖָоõ£¡
ÎÒÃÇ´´½¨ºÃÁ˶ϵ㣬ÔËÐе½¶Ïµã¾Í×Ô¶¯Í£ÏÂÀ´ÁË£¬ÏñÕâÑù£º
ͼ6

ÕâЩDebugµÄ×î»ù±¾²Ù×÷¼¼ÄÜÊÇÿһ¸öÈëÃŵÄIOS¿ª·¢Õß¶¼ÒªÕÆÎյģ¬Ó¦¸Ãµ±³ÉÒ»ÖÖ±¾ÄÜ£¬¾ÍÏñ¹·°®³ÔÏèÒ»Ñù(àÞ ¶Ô²»Æð ²©Ö÷²»ÊÇÆçÊÓ¹·µÄÒâ˼£¬²©Ö÷Ò²Ñø¹ý¹·£¬ºÜ¶þ±Æµ«ÊÇ´Ó²»³ÔÏè£¡ÕæµÄ¾ÝÎÒËùÖªËü´ÓÀ´²»³ÔÏèµÄ£¬ÕâÀïÖ»ÊDZÈÓ÷Ö»ÊDZÈÓ÷)¡£
È«¾Ö¶Ïµã£¨Global BreakPoint£©
ÓÐʱºòÔÚ³ÌÐò³ö´íµÄʱºò²»ÄÜÄÜ׼ȷ¶¨Î»µ½±¼À£µÄÄÇÒ»ÐдúÂë,¶øÊÇÖ±½ÓÅܵ½mainÑ»·»òÕßAppdelegateÀïÃæ£¬ »òÕß»á¸øÄãÕâÑùµÄÌáʾ£º
EXEC_BAD_ACCESS£º
ÊDz»ÊÇÓÐÖÖÏë¿ÞµÄ³å¶¯£¿ÄáÂê~ÖÁÉÙ¸øÎÒһЩ¶ÑÕ»ÐÅÏ¢Ò²ºÃѽ~¡¡Õâ¸öʱºòÄãǧÍò²»ÒªÔÒÊó±êºÍ¼üÅÌŶ£¬Ò»Çж¼ÊÇÖ÷»úÔÚÔËÐУ¬ÄãÔÒÊó±êºÍ¼üÅÌÓÐʲôÓÃÄØ£¿Ó¦¸ÃÊÇÌßÖ÷»úѽ~~£¬ÏÖÔÚÓÐÁËÈ«¾Ö¶Ïµã£¬ÄïÇ×ÔÙÒ²²»µ£ÐÄÄãÔÒÊó±êÁË£¬ÄãÖ»ÐèÒªÕâÑù£º
ͼ7

ÔÚDebugµ¼º½Ãæ°å½øÐÐÉÏͼµÄ²Ù×÷£¬Äã¾Í½¨Á¢ÁËÈ«¾Ö¶Ïµã£¬ÕâÑùÖ»ÒªÓöµ½´íÎó£¬debug³ÌÐò¾Í»á×Ô¶¯¶¨Î»µ½Õ»µ×µÄÐÅÏ¢£¬Ò²¾ÍÊÇÄã×îÏȳö´íµÄ´úÂëµÄÄÇÒ»ÐУ¬ÕâÑùÄã¾Í¿ÉÒÔ¿ìÀÖµÄdebugÀ~~
Ìõ¼þ¶Ïµã(Condational Breakpoints)
´ÓǰÓÐÒ»¸öÓÎÏ·£¬½Ð×öߣ°¡ß££¬ÓÐÐ©Íæ¼ÒËûÃÇÖªµÀÔõô²Ù×÷£¬»á·Å¼¼ÄÜ»á×ß·£¬µ«ÊÇËûÃDz»ÖªµÀÂò×°±¸£¬ÍæÁËÒ»¾ÖÏÂÀ´£¬Ð¬×ÓСµ¶¶¼Ã»ÓÐÂò¡£ÎÒΪʲô½²Õâ¸ö¹ÊÊÂÄØ£¿ÒòΪºÜ¶àСÅóÓÑѧ¶«Î÷ºÍÍæÓÎÏ·Ò»Ñù£¬¿´ÍêÇ°ÃæµÄ¼¸ÖÖµ÷ÊÔ¼¼ÄÜ£¬¾ÍÒÔΪ×Ô¼ºÒѾŒÅ±¬ÎÞµÐÁË£¬ÆäʵËûÃDz»¹ýÊdzöÃŲ»´ø×°±¸µÄÍæ¼Ò£¬Èç¹ûÖ»ÊÇʹÓÃÁËÒÔÉϵĵ÷ÊÔ¼¼ÄÜÖ»ÄÜ˵ÊǵÍÍæ£¬ÔڸߴóµÄ±ÆÓż¦ÃæÇ°¸ù±¾¾ÍÊǻᱻ˲ÃëµÄÄÇÖÖ£¬ËùÒÔѧ»á×°±¸×Ô¼º²ÅÊÇÍõµÀ£¡Ìõ¼þ¶Ïµã£¬¾ÍÊÇѧ»áÓеķÅʸ£¡
ÎÒÃÇÀ´¿´Ò»¶Î´úÂë
ͼ8

ÄãÊDz»ÊÇÏëÎʲ©Ö÷ΪºÎÄÇô·çɧ£¬¾¹È»ÉÏÁËSwiftÁË£¡£¡ÎÒ´Ë¿ÌÖ»ÏëÒ÷Ò»Ê×ʪ£º±ðÈËЦÎÒÌ«Òùµ´£¬ÎÒ¼ÒסÔڻƺ×Â¥¡£
·´ÕýÕâ¸öÄê´ú´ó¼Ò¶¼ÊdzԱ¥Á˳Å×ŵ쬲©Ö÷Ò²ÊÇ£¬ËùÒÔ¾ÍѧѧSwift¿©¡£
ÎÒÃÇÈç¹ûÔÚÒ»¸öÑ»·ÀïÃæÊ¹ÓÃÁ˶ϵ㣬Èç¹ûÕâ¸öÑ»·Ö´ÐÐÁË100Íò´Î£¬ÄÇÄãµÄ¶ÏµãÒªÖ´ÐÐÄÇô¶à´Î£¬Äã²»¾õµÃµ°µ°¶¼Á¹Á˵ÄÓÇÉËô£¿ËùÒÔÎÒÃÇÕâô×ö£º
ͼ9

ÕâÑùÖ»ÓбéÀúµ½c==¡°H¡±µÄʱºò ¶Ïµã²Å»á±»´¥·¢¡£
ͼ10 
ÊDz»ÊǺܰôÄØ£¡
ÓÐЩͯЬµÄîѺϽð¹·ÑÛÒѾ¿´µ½Á˱༶ϵãÄÇÀïÓÐÒ»¸öActionµÄ¶«Î÷£¬ÄÇÊÇÊ²Ã´ÄØ£¿
Õâ¸öÊǷdz£Ç¿´óµÄ£¬¿ÉÒÔÔÚÄã¶ÏµãµÄλÖã¬Ö´Ðи÷ÖÖ²Ù×÷£¬±ÈÈçÖ´Ðнű¾ÃüÁ¿ØÖÆÌ¨ÃüÁî(¿ÉÒÔÖÆ¶¨µ÷ÊÔÐÅÏ¢×Ô¶¨Òå±£´æ)¡¢´òÓ¡ÐÅÏ¢µÈ£¬
²©Ö÷×îϲ»¶µÄ¾ÍÊÇÕâ¸öLog messageÀ²£¬¼òµ¥´Ö±©£¡¸ù±¾¾Í²»ÐèÒªprint°¡NSLogÂֱ½ÓÔڶϵãµÄAction´òÓ¡¾ÍºÃÁË£¨ÆäʵÕâ¸öÊÇXcodeºÍµ÷ÊÔÆ÷½áºÏµÄ¸ßÄܲúÎÏÂÃæÔÙ½éÉÜ£©¡£¾ßÌå¿ÉÒÔÕâÑù£º
ͼ11 
Æäʵ¸Õ¸Õ²©Ö÷Èö»ÑÁË£¬²©Ö÷×îϲ»¶µÄAction²¢²»ÊÇLog Message£¬¶øÊÇSound£¬¹ËÃû˼ÒåÂ¶ÏµãÉäÔÚBugÉÏ£¬ÕâÑùÓöµ½¶Ïµã¾Í»á·¢³öÉùÒô£¬Ìýµ½ÎÒ×Ô¼ºÉèÖõÄÉùÒô£¬ÎÒ¾ÍÖªµÀÊÇʲôBugÁË£¬ÌýÉùʶBug£¬ºÇºÇ£¬EXEC_BAD_ACCESSµÄ´íÎóÎÒÉèÖóÉÁ˲¨¶àÒ°ÀÏʦµÄÉùÒô£¬unrecognized selector send to instancdµÄ´íÎóÎÒÉèÖóÉÁ˲ÔÀÏʦµÄ¡¡ ²»ÒªÎÊÎÒϵͳÔõôûÓмªÔóÃ÷²½µÄÉùÒô£¬ÎÒ¸ù±¾¾Í²»ÖªµÀËÊǼªÔóÃ÷²½¡£
µ±È»»¹Óиü¼ÓÇ¿´óµÄÌõ¼þ¶Ïµã¾ÍÊÇÕâ»õÀ²
ͼ12 
Ìí¼ÓÖ®ºóÔÚ Symbol Ò»À¸ÊäÈë viewDidLoad¡£
ÕâÑùÒ»À´£¬ÔÚ³ÌÐòÖÐËùÓÐµÄ viewDidLoad ·½·¨±»µ÷ÓÃʱ¶¼»á´¥·¢¶Ïµã¡£
ͼ13 
µ±È»£¬ÎÒÃÇÒ²¿ÉÒÔ½ö½öÎªÌØ¶¨µÄij¸öÀàµÄ·½·¨Ìí¼Ó¶Ïµã¡£ÔÚ Symbol Ò»À¸ÊäÈë [ClassName viewDidLoad] (Objective-C) »ò ClassName.viewDidLoad (Swift) ¼´¿É¡£
±ÈÈ磺unrecognized selector sent to instance 0xaxxxx ÕâÖÖ´íÎó£¬Õâ¸öinstance¿ÉÒÔÕâÑù¿ìËÙ¶¨Î»
ͼ14 
´òÓ¡µÄÒÕÊõ
¾¡¹ÜARCÒѾÈÃÄÚ´æ¹ÜÀí±äµÃ¼òµ¥¡¢Ê¡Ê±ºÍ¸ßЧ£¬µ«ÊÇÔÚobjectµÄlife-cyclesÖиú×ÙÒ»Ð©ÖØÒªÊ¼þÒÀȻʮ·ÖÖØÒª¡£±Ï¾¹ARC²¢Ã»ÓÐÍêÈ«ÅųýÄÚ´æÐ¹Â¶µÄ¿ÉÄÜÐÔ£¬»òÕßÊÔͼ·ÃÎÊÒ»¸ö±»releaseµÄ¶ÔÏó¡£ÎªÁËÕâ¸öÄ¿µÄ£¬ÎÒÃÇ¿ÉÒÔºÜÒÕÊõµØÍµ¿ú¶ÔÏóÕýÔÚ×öЩʲô£¬ÏëÏë¾ÍºÃÓпì¸Ð¡£
NSLog
С»ï°éÃǵÚÒ»½Ú¿ÎѧϰViewControllerµÄÉúÃüÖÜÆÚµÄʱºò£¬ÀÏʦ¿Ï¶¨ºÜâ«ËöµÄ½ÌÁË´ó¼Ò£¬ÔÚviewControllerµÄÿ¸öÉúÃüÖÜÆÚµÄ·½·¨ÖÐʹÓÃÁËNSLogÀ´Íµ¿ú£¡Ã»´í£¬ÕâÑùÆäʵ¾ÍÊÇ×î¼òµ¥±¬Õ¨µÄ¸ú×ÙÉúÃüÖÜÆÚµÄ·½·¨ÁË£¬²»¹ýϵͳ×Ô¼ºµÄNSLogÕæÐÄÓеãÙúÈõ£¬Êä³öµÄÐÅϢ̫ÉÙ£¬¸ù±¾¾Í²»ÄÜÂú×ãÎÒÃǵÄÓûÍû£¬ÕâÀïÎҽ̴ó¼ÒÇ¿»¯ÄãµÄLog£¡£¡
¿ÉÒÔÓÃÏÂÃæµÄÕâ¶Îºê
//A better version of NSLog
#define NSLog(format, ...) do { \
fprintf(stderr, "<%s : %d> %s\n", \
[[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String], \
__LINE__, __func__); \
(NSLog)((format), ##__VA_ARGS__); \
fprintf(stderr, "-------\n"); \
} while (0)
¹ØÓÚºêµÄÍþÁ¦ ´ó¼Ò¿ÉÒÔÂÒÈëÎҵIJ©ÎÄ¡¶ IOSÖеÄÔ¤±àÒëÖ¸ÁîµÄ³õ²½Ì½¾¿¡·
ÕâÑù´òÓ¡³öÀ´µÄ¶«Î÷²ÅÏñ»°Âï(ÆäʵNSLogµÄ´òÓ¡ÊǷdz£µÍЧµÄ£¬ÉõÖÁ±ÈprintµÍ100±¶£¬¸ÐÐËȤ×Ô¼º··Æ»¹ûÊֲῩ)¡£
ʹÓÃobjcÓïÑÔ(Ç¿ÀàÐÍ)²¢ÇÒÓÃNSLog´òÓ¡µÄʱºò£¬³£³£¸ã²»Çå³þNSLog(@¡°%?¡±,xxx) xxxÕâÖÖÀàÐ͸ÃÊÇʲôʲôÀàÐÍÊä³ö£¬Ó¦¸ÃÊÇ%dÄØ»¹ÊÇ%@Òà»òÊÇ%f£¿£¿£¿ÉµÉµ·Ö²»Çå³þ~£¬ËùÒÔÍæ×ªNSLogÄãÓ¦¸ÃÒªÖªµÀÒÔÏÂÕ⼸¸öÈ«¾Ö·½·¨£¡
ͼ17 
¿ªÆô½©Ê¬¶ÔÏó(Enable NSZombie Objects)
Xcode¿ÉÒÔ°ÑÄÇЩÒѾreleaseµôµÃ¶ÔÏ󣬱ä³É¡°½©Ê¬¡±£¬µ±ÎÒÃÇ·ÃÎÊÒ»¸öZombie¶ÔÏóʱ£¬Xcode¿ÉÒÔ¸æËßÎÒÃÇÕýÔÚ·ÃÎʵĶÔÏóÊÇÒ»¸ö²»Ó¦¸Ã´æÔڵĶÔÏóÁË¡£ÒòΪXcodeÖªµÀÕâ¸ö¶ÔÏóÊÇʲô£¬ËùÒÔ¿ÉÒÔÈÃÎÒÃÇÖªµÀÕâ¸ö¶ÔÏóÔÚÄÄÀÒÔ¼°ÕâÊÇʲôʱºò·¢ÉúµÄ¡£
ËùÒÔZombiesÊÇÄãµÄºÃ»ùÓÑ£¡Ëû¿ÉÒÔÈÃÄãÊä³öµÄÐÅÏ¢¸ü¾ßÌ壡£¡
¾ßÌåÕâÑù×ö£º
ͼ15 
×Ô¼ºÔÙÊÔÊÔÊä³öObjectµÄÐÅÏ¢¿©£¬ÊDz»ÊǺܰôÄØ£¿
½©Ê¬Ö»ÄÜÓÃÔÚÄ£ÄâÆ÷ºÍOCÓïÑÔŶ~
½ø»÷µÄÂëÅ©
Èç¹û˵ÄãÒѾ°Ñ´òÓ¡µÄÒÕÊõÔËÓõķçÉúË®ÆðÁË£¬²¢ÇҶϵãµÄʹÓÿÉÒÔÐÅÊÖÄéÀ´ËæÐÄËùÓû£¬ÄÇôÄãÒѾÔÚÓë±ÆÓż¦µÄ¶ÔÖÅÖУ¬ÎȲٴ󲿷ÖʤȯÁË£¬ÄãÒѾÊÇÒ»¸ö¹Â¸ßÀäÑ޵ijÌÐòÔ±ÁË£¬¸©ÊÓÒ»ÇеÍÄܵıÆÓż¦ÁË£¡µ«ÊÇ£¡Ãæ¶Ô¸üÇ¿´óµÄµÐÈË¡ª¡ªÄãÄÇͺ¶¥1000¡ã½üÊÓÑÀ³Ý¼Ðמ²˵ÄÓÐ×ÅÊ®Äê¶ÔÕ½±ÆÓż¦µÄͬÊÂÃæÇ°¡¢ÒÔ¼°Ð¦Àï²Øµ¶ÑÛ¾¦ÓÐÑÛʺµ«ÊÇÄÜÓÃÑÛÉñɱËÀÄãµÄÃæÊÔ¹Ù¡¡ ¶ÔÓÚËûÃÇ£¬Ä㻹ÊÇÌ«Èõ£¬ÄãµÄ¼¼ÄܵÄÄ¥Á·»¹Ì«ÉÙ£¡ËùÒÔÄã±ØÐëÒª½ø»÷£¡£¡±È±ÆÓż¦»¹ÒªÇ¿´óµÄµÐÈ˳öÏÖÁË£¡ÎÒÃÇÐèÒª¸üÇ¿´óµÄÎäÆ÷¡£
Console(lldb ÃüÁî)
ÎÒÃǵÄÄ¿±êÊÇÒªÎä×°µ½±Ç룡console´°¿Ú´ó¼ÒÖªµÀ¾ÍÊÇÄĸöºÚºõºõºÃ¶à×Ö»á¹ö³öÀ´£¬ÓÈÆäÊDZ»±ÆÓż¦¸Éµ½µÄʱºò£¬ÄÇôͬѧÃÇÓÐûÓÐÓöµ½ÕâÖÖconsoleÄØ
ͼ16 
ÎÒÃǼҵıàÒëÆ÷ÀúÊ· ¾´ÇëÂÒÈë ¡¶IOSÖеÄÔ¤±àÒëÖ¸ÁîµÄ³õ²½Ì½¾¿¡· £¬Ã»´íÎÒÃÇÏÖÔÚÕýÔÚʹÓÃ×ÅÊÀ½çÉÏ×îºÃµÄc¡¢c++¡¢oc¡¢swiftµÄ±àÒëÆ÷¡ª¡ªLLVM,lldb¾ÍÊÇÕâ¸öÊÀ½çÉÏ×îºÃµÄLLVMµÄµ÷ÊÔÆ÷£¡²»Òªº¦Ðߣ¬ÒòΪÎÒÃÇÊÇ×îÓÅÐãµÄ£¡ËùÒԿ϶¨ÒªÓÃ×îºÃµÄ£¡Ç§Íò±ð¿ÍÆøÓ´£¬Ëæ±ãÓ㬾ÍÏñ×Ô¼º¼ÒÒ»Ñù°¡£¬°¡ ¹þ¹þ ³Ô³Ô³Ô ±ðÖ»¹Ë×ųԷ¹£¬¶à¼Ð²Ë¡¡°¥~²©Ö÷ºÃ¿ÍµÄÖ°Òµ²¡ÓÖ·¸ÁË~£¬Ê²Ã´£¿Äã²»ÖªµÀÔÚÄÄÀïÓÃlldb£¿
Ê×ÏÈ£¡ÄãµÃÏÈcrash»òÕ߰ѳÌÐò¶ÏÏÂÀ´£¡Ö±µ½Äã¿´µ½Í¼16µÄ(lldb)×ÖÑù³öÏÖ£¬Äã¾Í¿ÉÒÔÇÃÃüÁîÁË~~
ÿ´ÎÄãÏë²é¿´±äÁ¿£¬³£Á¿£¬ÄãÒªÖØÐÂдNSLogÈ¥´òÓ¡£¬È»ºóÖØÐ±àÒ룬ȥִÐУ¬ÖØÍ·¿ªÊ¼£¿Ì«ÀÛÁË£¬ÓÐÁËlldbÄãÖ»ÒªÕâÑù
ͼ18 
ÊDz»ÊÇ·½±ãµ½±¬Õ¨£¿
µ±ÄãÓÐÒ»¸öswitchÓï¾ä£¬ÄãΪÁ˲âÊÔÿһ¸öcase£¬Äã¶¼ÒªÖÆÔì¼ÙÌõ¼þÈ¥²âÊÔ£»ÓÐÒ»¸öif¡else¡Óï¾ä£¬ÄãΪÁ˲âÊÔ²»Í¬µÄÇé¿ö£¬ÄãÒªÓ²±àÂëдÁ˲»Í¬µÄÇé¿ö£¬±àÒëºÃ¼¸´ÎΪÁ˲âÊÔÿÖÖÇé¿ö¡¡£¬ÎÒÏëÄãÓ¦¸ÃÖªµÀΪʲô×Ô¼ºµÄÍ··¢ÄÇôϡÊèÁË¡£
ÒÔÉϵÄÕâЩÇé¿ö£¬Ö»ÐèÒ»´Î±àÒ룬ʹÓÃlldbµÄthreadÃüÁαÔì·µ»ØÖµ£¬ÆÛƼĴæÆ÷£¬¾Í¿ÉÒÔËæÐÄËùÓûµÄ×öÍêËùÓвâÊÔÁË¡£
ÊDz»ÊÇÅ£±Æµ½±¬Õ¨£¿
lldbÕæµÄºÜÇ¿´ó£¬²©Ö÷ûÓÐÆÄ㣬ÕâÆª²©Îĵ½´ËµÄËùÓе÷ÊÔ¼¼ÇÉlldb¶¼¿ÉÒÔʵÏÖ£¬¸÷Öֶϵ㣬¸÷ÖÖ´òÓ¡£¬µ÷ÓÃpython²å¼þ£¬ÔËÐÐÖжϣ¬²Ù×÷Ó²¼þµ×²ã£¬¿ØÖƳÌÐòÔËÐÐÏ̡߳¡lldb¶¼¿ÉÒÔ×öµ½£¡·Â·ðlldb¾ÍÊÇÁíÒ»¸öÇ¿´óµÄÊÀ½ç£¡£¡£¡
ÊDz»ÊÇÇ¿´óµ½±¬Õ¨£¿
ÆäʵÈç¹ûÄã²»Ïḛ̈¶à½À²»Àõϰ£¬ÄãÖ»Òª¾«Í¨Õâ¸öµ÷ÊÔ¹¤¾ß£¬»ù±¾Ç°ÃæµÄµ÷ÊÔ¼¼ÄÜÄã¿ÉÒÔ²»ÓÃѧÁË£¬ÔÚÕâÀﲩÖ÷Ò²ÊDz»²Å£¬lldbµÄÇ¿´ó²»ÊDz©Ö÷Ëæ±ã˵¼¸¾ä¾Í¿ÉÒÔ±í´ïµÄ³öÀ´µÄ£¬
¸ü¶àµØÐèÒª´ó¼ÒʱعªÇ×£¬²ÅÄÜÕæÕýÌå»áµ½ÄÇÖÖÃÀºÃ£¬ÄÇÖÖ³©¿ìÎޱȵĵ÷ÊÔÌåÑ飡
ÕâÀﲩÖ÷ÎÞ˽µØÌͳöÈÎÒâÃÅ£¬ÕâÀïÓкܺõÄÎÄÕ£¡¿ÉÒÔÈÃÄãºÃºÃµÄ»ØÎ¶£¬ºÇºÇ
¡¶The LLDB Debugger¡·
¡¶About LLDB and Xcode¡·
¡¶LLDBµ÷ÊÔÃüÁî³õ̽¡·
¡¶Óëµ÷ÊÔÆ÷¹²Îè - LLDB µÄ»ª¶û×È¡·
Profile(instruments)
ͼ19 
Õâ¸ö¶«Î÷Ôõô·ÒëÄØ£¿ÎÒÃǾͽмì²éÆ÷°É£¡£¡Ò²ÐíÒѾѧϰÁËIOS¿ª·¢´ó°ëÄêµÄÄ㣬´ÓÀ´¶¼Ã»×¢Òâµ½»òÕßʹÓÃÕâ¸ö¹¤¾ß£¬µ«ÊDz©Ö÷ºÜ¸ºÔðÈεĸæËßÄãÏÖÔÚÊÐÃæÉÏÈκÎÒ»¿î³öÉ«µÄAPP¶¼»áʹÓÃinstrumentsÀ´ÈôúÂë¸ü¼Ó½¡×³£¡ÄѵÀinstrumentÊÇ´ºÒ©£¿Ôõô»áʹ´úÂë½¡×³ÄØ£¿
Õâ¸ö½¡×³²»ÊÇÄǸö½¡×³~°¥~~ ÎÒ²Å18ËêÄܲ»ÄÜÇå´¿Ò»µãѽ
instrumentÀïÃæ°üº¬Á˺ܶ๤¾ß£¬ÄÚ´æÒç³ö·ÖÎö£¬ÐÔÄÜ·ÖÎö£¬¸÷ÖÖ·ÖÎö¡¡ Èç¹ûϸ˵µÄ»°£¬Õâ¸öÕæµÄ¿ÉÒÔΪÿ¸ö¹¤¾ß¿ªÒ»Æª²©¿Í£¬µ«ÊDz©Ö÷ÊÇÒ»¸ö¶®µÃÊÚÈËÒÔÓã²»ÈçÊÚÈËÒÔÓæµÄµÀÀíµÄÀÏ˾»ú£¡ËùÒÔ²©Ö÷µ±È»²»»áÈ«²¿ËµÒ»±é£¡ÎÒÃǾÍÀ´Áì×Å´ó¼Ò¿´¿´×¨ÓÃdebugµÄÄÚ´æÒç³ö·ÖÎö¹¤¾ßµÄʹÓðɣ¡
ͼ20 
ÔÚʹÓÃleaks֮ǰ´ó¼Ò¿ÉÒÔÊÔÊÔÕâ¸ö¡°Analyze¡±
ͼ21 
analyze¿ÉÒÔ¿ìËٵķ¢ÏÖÄãµÄ´úÂëÖÐreleaseµÄÎÊÌ⣬ÒÔ¼°¼Ì³Ð¹ý³ÌÖеĸ¸Àà·½·¨È±Ê§µÈµÈÎÊÌ⣡һ°ãÒ»¸öÓÅÐãµÄIOS¿ª·¢¹¤³ÌʦNo Warning¡¢Pass AnalyzeÊÇ×î»ù±¾µÄ²ÙÊØ£¡ÎÒÖªµÀÄãÒѾ¶ÔÓÚÄã×Ô¼ºµÄÏîÄ¿µÄÉϰٸöwarningÒѾÂéľÁË£¬µ«²©Ö÷ÎÒ¸ºÔðÈ˵ظæËßÄ㣬ÕâÑù²»ºÃ£¡£¬ÒòΪÓÐÒ»Ê×ÔÆÄÏÃñ¸è¡¶ÀÏ˾»ú´ø´øÎÒ¡·ÌýµÃ²©Ö÷ÉñÇåÆøË¬£¡
¼áÊØ×÷ΪIOS¿ª·¢ÕßµÄÕê²Ù£¡¸ú×ÅÎҸߺ°¿ÚºÅ£¡
No Warning£¡Pass Analyze£¡
ÎÒÃǼÌÐø»ØÀ´Ê¹ÓÃleaks£¡Èç¹ûanalyze¶¼Í¨¹ýÁË£¬ÄÇô¾Í¿ÉÒÔʹÓÃleaks¹¤¾ß£¬·¢ÏÖǧÄêÀÏÑý¼¶±ðµÄ²à©ÁË£¡
ͼ22 
Èç¹ûÌáʾijһ¸ö¶ÔÏóÓвੵķçÏÕ£¬Ä㻹¿ÉÒÔÕâÑùµ¯³ö²à±ßµÄÍØÕ¹Ï¸½Ú
ͼ23 
Ö±½Óµã»÷·½·¨¾Í¿ÉÒÔÖ±½Ó½øÈë´úÂ벿·ÖÁË£¡£¡
ÊDz»ÊǺܼòµ¥´Ö±©ÄØ£¡µ±È»»¹ºÜ¶àÆäËû¹¤¾ß£¬²»¹ý½Ð×öƪ·ùµÄ¶«Î÷×ÜÊÇÏÞÖÆÈË£¬ÚÀ Õæµ°ÌÛ~ÕæµÄ»¹Ïë¶à˵µãµÄ
ÏëÒª¸ü¶àÁ˽âinstrument ´ó¼Ò¿ÉÒÔ¿´¿´ÕâÆªÎÄÕ£¡
¡¶How to Use Instruments in Xcode¡·
XcodeÊÓͼµ÷ÊÔ
ÓÐʱºòÓÐЩ±ÆÓż¦Òþ²ØµÄ±È½ÏÉ´úÂ뼸ºõ¶¼·Á˸ö±é£¬»¹ÊÇûÕÒµ½ÎÊÌâ³öÔÚÄÄ£¬²©Ö÷¿ÉÒÔÀí½âÄÇÖÖ·çÖÐÁèÂÒ£¬µ°ËéÒ»µØµÄ¸Ï½Å£¬ÒòΪÎÞÊý¸öÈÕÒ¹²©Ö÷¾ÍÊÇÉîÏݵ±ÖÐÎÞ·¨×԰Σ¬ºóÀ´¸É´àÖ±½ÓÖØÐÂн¨Ò»¸ö¹¤³Ì£¡»¹ÊDz»ÐУ¡£¡ÎÒÈ¥£¬Ö±µ½ÓÐÒ»Ì첩Ö÷ÔçÉÏÆðÀ´£¬¿´µ½¾µ×ÓÖÐ×Ô¼ºË§ÆøµÄÁ³ÅÓ£¬ÎÒ²ÅͻȻ¶ÙÎò£¬ÔÀ´³¤µÃ˧¿ÉÒÔÄÇÑù¿ìËÙµÄÕÒµ½bug£¡×îÖÕËø¶¨Êǿɰ®Óֿɺ޵ÄxibºÍstoryboard³öÁËÎÊÌ⣡£¡Ä³¸öconstraint»òÕßviewµÄǶÌ×Âß¼ÓÖ»òÕßÍŶÓÐ×÷Git³åÍ»µÈµÈÎÊÌ⣬µ¼ÖÂio -vʲôµÄ´íÎó£¬ÕâÖÖÇé¿öÈ¥¼ì²éÊÓͼÎļþ£¬¿ÉÄÜxcode±ÀÀ£´ò²»¿ªÄǸöxib»òÕßstoryboard£¬ÄãÖ±½ÓʹÓÃÎı¾¹¤¾ß´ò¿ªÕâ¸öxmlÀàÐ͵ıê¼ÇÎļþ£¬Äã²îµãÍÂѪ£¬¼¸ÍòÐеļǼ¹·ÑÛ¶¼¿´Ï¹ÁË¡¡¡£
µ«ÊÇÕâ¸öÀúÊ·Òª±»Öսᣡ£¡ÒòΪÎÒÃÇÇ¿´óµÄxcodeµÄÊÓͼµ÷ÊÔ¹¦ÄÜ£¡£¡
ÒÔÏÂÄÚÈÝ£¬ÍêÈ«copy£¬ÈçÓв»ÊÊ£¬¼á³Ö¿´Í꣡Çë½ÐÎÒ¿ìÀֵİáÔ˹¤£¡
³Ï®×Ô¡¶View Debugging in Xcode 6¡·
Æ»¹ûÔÚXcode 6ÖÐ×öÁ˲»ÉÙÃ÷ÏԵĸÄÉÆºÍÓÅ»¯£¬ÊÓͼµ÷ÊÔ¾ÍÊÇÆäÖÐÖ®Ò»¡£Í¨³££¬AppÓû§½çÃæµÄÐÐΪ²»»á·ûºÏ¿ª·¢Õ߯ÚÍûµÄÄÇÑù£¬±ÈÈç»òÕß²»Õ¹Ê¾ÊÓͼ£¬»òÕßûÓÐÕýÈ·µØÕ¹Ê¾¡£±¾ÎĽ²½âÈçºÎʹÓÃXcodeµÄеÄÊÓͼµ÷ÊÔ¹¦ÄÜÀ´¼ò»¯¿ª·¢Õß¶ÔÎÊÌâ½çÃæµÄÈ·ÈϺÍÐÞ¸´¡£
1.Demo ¹¤³Ì
¿ªÊ¼Ö®³õÏÈ´Ógithub£¨https://github.com/tutsplus/ViewDebugging£©ÉÏÏÂÔØÊ¾Àý¹¤³Ì²¢´ò¿ªViewDebugging.xcodeproj¡£¸Ã¹¤³Ì°üº¬Ò»¸ö¼òµ¥µÄ°üº¬ÉÙÊýÊÓͼ¿ØÖÆÆ÷µÄ¿Éµã»÷µÄÓ¦ÓóÌÐò¡¢Ó¦ÓóÌÐòίÍÐÒÔ¼°Ò»¸östoryboard¡£¸ÃappÊÇΪiPhone¶øÉè¼Æ£¬µ«ÊÜÒæÓÚiOS 8µÄ×ÔÊÊÓ¦²¼¾Ö,ËùÒÔ½çÃæÕ¹Ê¾ÔÚÈκÎÉ豸É϶¼Ã»ÓÐÎÊÌâ¡£
Äú¸Õ¸ÕÏÂÔØµÄÓ¦ÓóÌÐòʾÀý¹¤³ÌÊÇÒ»¸ö¼òµ¥µÄto-do listÓ¦ÓóÌÐò£¬°üº¬¿É²é¿´ÆäËûÐÅÏ¢µÄ¼òµ¥ÆÁÄ»£¬±ÈÈç¸ÃʾÀý¹¤³ÌÖеÄÏîÄ¿Êý£¬Óû§Í·ÏñÒÔ¼°@***µÄÍÆÌØ²Ù×÷¡£µã»÷Xcode×óÉϽǵÄÔËÐа´Å¥½«Õ¹Ê¾ÔÚiOSÄ£ÄâÆ÷ÖÐÔËÐеÄÓ¦ÓóÌÐò¡£
ͼ24 
ºÜ¿ì»á×¢Òâµ½Óû§½çÃæÖдæÔÚÎÊÌâ-±íÊÓͼÖÐûÓÐչʾÈκÎÊý¾Ý¡£ÔÚ¹¤³Ìµ¼º½Ãæ°åÖдò¿ªFirstViewController.swift²¢ÕÒµ½ÒÔÏ´úÂ룺

¿ÉÒÔ¿´µ½mockNotesDataSource±äÁ¿ÊDZíÊÓͼµÄÊý¾ÝÔ´¡£Ê¹ÓÃSwiftµÄÊôÐÔ¹Û²ìÕß¹¦ÄÜ£¬ÔÚÊý¾ÝÔ´·¢Éú¸Ä±äʱ£¬±íÊÓͼ»á×Ô¶¯ÖØÐ¼ÓÔØ¡£Í¨¹ý²é¿´ÒÔÉÏ´úÂëÆ¬¶Î£¬Äã»á·¢ÏÖÓ¦¸ÃÓ¦ÓÃÖÐÓ¦¸ÃÓÐ4¸öÏîÄ¿ÐèҪչʾ£¬µ«ÏÖÔÚ²»Õ¹Ê¾Êý¾Ý¾Í˵Ã÷ijЩµØ·½³öÏÖÁ˲î´í¡£
ÆôÓÃÊÓͼµ÷ÊÔ
ÎÊÌâËÆºõÓëÓû§½çÃæÓйء£ÔËÐÐapp¹ý³ÌÖУ¬°´Ïµײ¿µÄDebug View Hierarchy °´Å¥£¬»òÕߴӲ˵¥ÖÐÑ¡ÔñDebug > View Debugging > Capture View Hierarchy À´Æô¶¯ÊÓͼµ÷ÊÔ¡£
ͼ25

Æô¶¯ÊÓͼµ÷ÊÔºó£¬Xcode»á¶ÔÓ¦ÓóÌÐòµÄÊÓͼ²ã´ÎÅÄÒ»¸ö¿ìÕÕ²¢Õ¹Ê¾ÈýάÔÐÍÊÓͼÀ´Ì½¾¿Óû§½çÃæµÄ²ã¼¶¡£¸ÃÈýάÊÓͼ³ýÁËչʾappµÄÊÓͼ²ã´ÎÍ⣬»¹Õ¹Ê¾Ã¿¸öÊÓͼµÄλÖá¢Ë³ÐòºÍÊÓͼ³ß´ç£¬ÒÔ¼°ÊÓͼ¼äµÄ½»»¥·½Ê½¡£
ʾÀý¹¤³ÌÔÚXcodeÖеÄÈýάÊÓͼչʾÕý³££¬µ«±íÊÓͼµ¥Ôª¸ñËÆºõÓеãÌ«¿íÁË¡£
ͼ26 
ÔÝÍ£Ó¦ÓóÌÐòµ÷ÊÔ²¢ÔÚ×ó²àÑ¡ÖÐMain.StoryboardÀ´ÐÞ¸´ÎÊÌâ¡£µã»÷±íÊÓͼ²¢Ñ¡ÖÐEditor > Resolve Auto Layout Issues > Reset to Suggested Constraints.
ͼ27 
±àÒë²¢ÔÙ´ÎÔËÐÐÓ¦ÓóÌÐòÒÔÈ·¶¨Óû§½çÃæÕ¹Ê¾Õý³£¡£µã»÷Debug View Hierarchy°´Å¥¸ü½øÒ»²½Á˽âÊÓͼµ÷ÊԵŦÄÜ¡£
ÊÓͼµ÷ÊÔ¹¦ÄÜ
µã»÷²¢ÍÏ×§ÈýάäÖȾͼµÄÈÎÒâÒ»±ß£¬¿ÉÐýת»òÕßÇãбÓû§½çÃæ£¬Ïò×ó»òÕßÏòÓÒÇãб¿ÉÑ¡ÖÐij¸ö±íÊÓͼ¡£
Ñ¡Öкó£¬Xcode»á¸ßÁÁ¸ÃÊÓͼ£¬²¢ÔÚ»áÔÚÓÒ±ßչʾObject ºÍSize¼ì²éÆ÷¡£²é¿´ÔÚÌø×ªÀ¸¶¥²¿²¢È·ÈÏUITableViewÊÇÓÒ±ß×îºóÒ»¸öÏîÄ¿¡£
ͼ28

Object ºÍ Size¼ì²éÆ÷°üÀ¨´óÁ¿ÓÐÓõÄÐÅÏ¢¡£¹ýÈ¥¿ª·¢ÕßÐèÒªÒÀÀµÈÕÖ¾Óï¾ä»òÕ߶ϵãÀ´¼ì²éÊÓͼµÄÅäÖá£
´ò¿ªÓұߵÄSize inspector£¨¹æ¸ñ¼ì²éÆ÷£©£¬Ï·½ÊÇAuto Layout£¬¿ÉÒÔ¿´µ½ÊÓͼÉÏÒѾӦÓÃÁËÕýÈ·µÄÔ¼Êø¡£ÔÚObject inspectorÖУ¬ÎÒÃÇ¿ÉÒÔ¼ì²éËùÑ¡ÊÓͼµÄÊôÐÔ¡£
ͼ29

ÔÚXcodeµÄµ÷ÊÔÇøÓÐ9¸öÊÓͼµ÷ÊÔ¹ý³ÌÖÐÒªÓõ½µÄ°´Å¥ºÍ»¬¿é¶ù¡£
ͼ30 
´Ó×óµ½ÓҿؼþÅÅÐò£º
µ÷ÕûÊÓͼ¼ä¾à£ºµ÷Õû²»Í¬ÊÓͼ¼äµÄ¼ä¾à¡£
չʾ±»¼ôÇеÄÄÚÈÝ£ºµ±Ç°Õ¹Ê¾ÊÓͼÖб»¼ôÇеIJ¿·Ö¡£
Õ¹Ê¾Ô¼Êø£ºÕ¹Ê¾Ñ¡ÖÐÊÓͼµÄÔ¼Êø¡£
ÖØÖÃ²é¿´ÇøÓò£º½«3DäÖȾ͸ÊÓͼ»Ö¸´ÖÁĬÈÏ״̬¡£
µ÷Õû²é¿´Ä£Ê½£ºÑ¡ÔñÐÔµØÕ¹Ê¾3DäÖȾ͸ÊÓͼ£¬±ÈÈç½öչʾÄÚÈÝ£¬½öչʾ¿ò¼ÜÒÔ¼°Í¬Ê±Õ¹Ê¾ÄÚÈݺͿò¼Ü¡£
ËõС£ºËõС3DäÖȾ͸ÊÓͼ
»Ö¸´£º½«3DäÖȾ͸ÊÓͼ»Ö¸´ÖÁĬÈϳߴ硣
·Å´ó£º·Å´ó3DäÖȾ͸ÊÓͼ
µ÷Õû¿ÉÊÓÊÓͼ·¶Î§£ºÒþ²ØÊÓͼ»òչʾÊÓͼ£¬Ò»²½²½½âÎö3DäÖȾÊÓͼ£¬Ïò×ó»òÕßÏòÓÒ»¬¶¯»¬¿é¶ùÓÐÏà·´µÄЧ¹û¡£
½¨Ò黨һµãʱ¼äÉÏÊÖ²Ù×÷ÏÂÕâЩ¿Õ¼ä£¬²¢Àí½â¸÷×ÔµÄÓô¦¡£
ÊÓͼ²ãÅÅÐò
ÔٴαàÒëºÍÔËÐÐÓ¦ÓóÌÐò£¬²¢µã»÷Óû§½çÃæµ×²¿µÄ"More"±êÇ©¡£µÚÒ»ÑÛ¿´È¥½çÃæ¿´ÆðÀ´»¹OK£¬µ«ÊÇËüûÓа´ÕÕ¿ª·¢Õߵ͍Òå׼ȷִÐУ¬Í¼Æ¬ÉϵÄÄ£ºýЧ¹ûûÓÐչʾ³öÀ´¡£ÎÒÃÇ¿ÉÒÔͨ¹ýµ÷ÊÔÊÓͼ²ã´ÎÀ´¸üºÃµØÈ·¶¨ÎÊÌâËùÔÚ¡£
Ïò×ó»òÕßÏòÓÒÍÏ×§ÊÓͼÀ´²é¿´¾ßÌåÇé¿ö£¬½Ó׎«view spacing sliderÏòÓÒÍ϶¯¡£
ͼ31 
ÕâÑùÒ»À´£¬²»Í¬ÊÓͼ¼äµÄ¼ä¾à±ä´óÁË£¬²ã´ÎÒ²¸ü¼ÓÇåÎú£¬ÎÒÃÇ¿´µ½ÔÚͼƬ"Ï·½"»¹Òþ²Ø×ÅÁíÒ»¸öÊÓͼ£¬Ñ¡ÖÐÒþ²ØµÄÊÓͼ£¬Ëü¾ÍÊÇ"¶ªÊ§"µÄÊÓ¾õЧ¹ûÊÓͼ¡£
ͼ32 
´ò¿ªMain.storyboard ²¢Ñ¡ÖÐSecond View Controller Scene¡£ÔÚ×ó²àµÄÎĵµ¸ÅÀÀÃæ°åÖУ¬Õ¹¿ªSecond View ControllerµÄÊÓͼ¶ÔÏóÒԲ鿴×ÓÊÓͼµÄÅÅÐò¡£
XcodeÔÚÎĵµ¸ÅÀÀÖа´ÕÕµÝÉý˳Ðò¶ÑµþÊÓͼ£¬»»¾ä»°Ëµ£¬ÁÐ±í¶¥²ãµÄÊÓͼÊÇÊÓͼ²ã´ÎµÄ»ù´¡¡£
ÐÞ¸´ÎÊÌâºÜ¼òµ¥¡£ÔËÐÐʱ£¬Blur Effect ViewÒþ²ØÔÚSky Image֮ϣ¬ÒòΪËüÊÇÊÓͼ²ã´ÎµÄµÚÒ»¸öÊÓͼ¡£ÔÚÎĵµ¸ÅÀÀÖеã»÷²¢ÍÏ×§ Blur Effect View£¬½á¹û»áÈçÏÂͼչʾһÑù£º
ͼ33 
ÔÙ´ÎÔËÐÐÓ¦ÓóÌÐò¾ÍÄÜ¿´µ½Ä£ºýЧ¹ûÁË¡£Ó¦ÓóÌÐòµÄÓû§½çÃæ¿´ÆðÀ´·ûºÏÉè¼ÆµÄ³õÖÔ¡£ÎÒÃÇ»¹¿ÉÒԲ鿴iOSÄ£ÄâÆ÷µÄÆäËûµ÷ÊÔ¹¦ÄÜ£¬¿´¿´»¹ÍêÉÆÁËÆäËûʲôµØ·½»ò¹¦ÄÜ¡£
5.iOSÄ£ÄâÆ÷µ÷ÊÔ¹¦ÄÜ
±àÒë²¢ÔËÐÐÓ¦ÓóÌÐò£¬Ñ¡ÖÐÄ£ÄâÆ÷£¬´Ó Debug²Ëµ¥ÖÐÑ¡ÔñColor Blended LayersÑ¡Ïî¡£
ͼ34 
È»ºó»á¿´µ½appµÄÓû§½çÃæ±»ºìÉ«ºÍÂÌÉ«¸²¸Ç£¬ÏÔʾÁËÄÄЩͼ²ã¿ÉÒÔ±»µþ¼Ó¸²¸Ç£¬ÒÔ¼°ÄÄЩͼ²ãÊÇ͸Ã÷µÄ¡£»ìºÏ²ãÊôÓÚ¼ÆËãÃܼ¯ÐÍÊÓͼ£¬ËùÒÔÍÆ¼ö¾¡¿ÉÄܵØÊ¹Óò»Í¸Ã÷µÄͼ²ã¡£
ͼ35 
Æ»¹ûÔÚÆäÎĵµ£¨iOS Simulator User Guide£©ÖжԴ˽øÐÐÁË×¢Ã÷£¬²¢ÔÚ±íÊÓͼ´¦ÀíÉÏʹÓÃÁ˲»Í¸Ã÷ͼ²ã¡£¹ö¶¯ÊÓͼʱ»áÓÐЩ±íÏÖ²»´óºÃµÄµØ·½£¬Ò»¸öÖØÒªµÄÔÒò¾ÍÊÇʹÓÃÁË»ìºÏͼ²ã£¬¶øÈç¹ûÄÚÈݱ³¾°ÊDz»Í¸Ã÷²ã£¬ÄÇÃ´Ò³Ãæ¹ö¶¯Ð§¹û¾Í»á·Ç³£Á÷³©ºÍƽÎÈ¡£
¶ÔÓÚÕâ¿îÓ¦ÓóÌÐòÀ´Ëµ£¬¼ÙʹÓû§ÓÐÊý°Ù¸öÏîĿҪչʾ£¬¿ÉÄÜ»á³öÏÖ¹ö¶¯ÐÔÄܲ»Ò»ÖµÄÇé¿ö¡£±íÊÓͼµ¥Ôª¸ñµ±Ç°Ê¹ÓõÄÊÇ»ìºÏ²ã¡£ÓÉÓÚÊÓͼ¿ØÖÆÆ÷µÄÊÓͼ±³¾°Êǰ×É«£¬ËùÒÔ²»¹Ü±íÊÓͼµ¥Ôª¸ñʹÓõÄÊÇ»ìºÏ²ã»òÕß²»Í¸Ã÷²ã£¬ÖÕ¶ËÓû§²»»á¾õ²ìµ½ÓÐʲô²»Ò»Ñù¡£
´ò¿ªMain.storyboard²¢Ñ¡ÖÐTo Do list SceneÖеıíÊÓͼµ¥Ôª¸ñÊôÐÔ¡£ÔÚÊôÐÔ¼ì²éÆ÷£¨Attributes Inspector£©ÖУ¬ÏòϹö¶¯Drawing·ÖÇø²¢¹´Ñ¡Opaque¡£
ͼ36 
ÔÚÆôÓÃColor Blended LayersµÄ״̬ϱàÒë²¢ÔËÐÐÓ¦ÓóÌÐò¡£ÓÉÓÚ±íÊÓͼµ¥Ôª¸ñÏÖÔÚʹÓÃÁ˲»Í¸Ã÷²ã£¬ËùÒÔ»áÓÃÂÌÉ«¸²¸Ç£¬ÒÔָʾËüÃÇÊDz»Í¸Ã÷µÄ¡£
³ýÁ˱ê¼Çͼ²ãÍ⣬»¹ÓÐÆäËûһЩÓÐÓõŦÄܿɰ↑·¢ÕßÔÚiOSÄ£ÄâÆ÷Öе÷ÊÔÓ¦Óá£ÒÔÏÂÊÇÆäÖÐһЩ±È½ÏÓÐÓõģº
Toggle Slow Animations in Frontmost App: Ñ¡ÖÐÄ£ÄâÆ÷£¬´ò¿ªDebug²Ëµ¥Ñ¡ÖÐToggle Slow Animations in Frontmost App£¬¸Ã¹¦ÄÜ¿ÉÒÔ½µµÍappÖж¯»µÄÔËÐÐËÙ¶È£¬Êʺϵ÷ÊÔ°üº¬¸´ÔÓ¶¯»µÄÓ¦ÓóÌÐò¡£Ò²¿ÉÊÇʹÓÿì½Ý¼üCommand-TÀ´²Ù×÷¡£
Color Copied Images:¸ÃÑ¡Ïî¿ÉÒÔ¸ø»æÖÆÊ±±»Core Animation¸´ÖƵÄͼƬÌí¼ÓÀ¶ÂÌÉ«µþ¼Ó²ã¡£
Color Misaligned Images:Èç¹ûͼƬ±ß½çûÓÐÓëÄ¿±êÏñËØÍêÃÀ¶ÔÆë£¬¸Ã¹¦ÄÜ¿ÉΪͼƬµþ¼ÓÉÏÒ»²ãÆ·ºìÉ«¡£Èç¹ûͼƬʹÓÃÈ·¶¨µÄ±ÈÀý´óС»æÖÆ£¬ÄÇô¸Ã¹¦ÄÜ»áΪͼƬÌí¼ÓÒ»²ã»ÆÉ«µþ¼Ó¡£
Color Off Screen Rendered:.¸ÃÑ¡ÏîΪÀëÆÁäÖȾÄÚÈÝÌí¼ÓÒ»¸ö»ÆÉ«µÄµþ¼Ó²ã¡£
ºÜ¶à¿ª·¢Õß»áºöÂÔ½ÓÈëµç»°Ê±Ó¦ÓÃ״̬À¸µÄÉè¼ÆÎÊÌ⣬Äã¿ÉÒÔͨ¹ý´¥·¢Í¨»°ÖÐ״̬À¸À´¼òµ¥²âÊÔ¡£ÔÚiOSÄ£ÄâÆ÷ÖУ¬´ÓHardware²Ëµ¥ÖÐÑ¡ÖÐToggle In-Call Status Bar¡£
Ïë²é¿´appÈçºÎÏìӦʼþ£¬¿É°´ÏÂCommand-TÀ´ÆôÓÃslow animations£¬²¢°´ÏÂCommand-YÀ´Õ¹Ê¾µç»°½ÓÈëʱµÄ״̬À¸¡£ÌÈÈôÄãµÄÓ¦ÓóÌÐòʹÓÃÁ˵¼º½À¸£¬ÄÇô²Ù×÷ϵͳ»áΪÄã¼æ¹Ëµ½ÕâÒ»¿é¶ù¡£
ͼ37 
³ýÁ˸øÊÓͼ×ÅÉ«Í⣬»¹Òª¼ÇסiOSÄ£ÄâÆ÷Ò²¿ÉÒÔµ÷ÊÔCore LocationÎÊÌâ¡£Äã¿ÉÒÔÔÚÌØ¶¨¾Î³¶ÈÄ£ÄâÉ豸£¬
Èç¹ûÄãµÄÓ¦ÓóÌÐòʹÓÃiCloudÀ´¹ÜÀíÊý¾Ý£¬ÄãÒ²¿ÉÒÔÊÖ¶¯´¥·¢Í¬²½Ê¼þ¡£
±¾ÎÄÖÐʹÓõÄdemo app·Ç³£¼òµ¥£¬Ê¹ÓÃÎÄÖÐÌáµ½µÄ¼¼Êõ¿ÉÒÔ°ïÄãÔÚδÀ´½ÚÊ¡²»ÉÙʱ¼ä¡£ÊÓͼµ÷ÊÔ¿ÉÒÔ°ïÄãÐÞÕýºÜ¶àÓû§½çÃæÖгöÏÖµÄÎÊÌâ¡£
³ýÁËXcodeºÍInterfaceBuilderÖ®Í⣬ʹÓÃiOSÄ£ÄâÆ÷µÄµ÷ÊÔ¹¦ÄÜ¿ÉÒÔÌáÉýÓ¦ÓÃÐÔÄܺÍʶ±ð¿ª·¢¹ý³ÌÖÐµÄÆ¿¾±¡£Æ»¹ûµÄÈË»ú½»»¥Ö¸ÄÏ£¨ÖÐÎİæ Ó¢Îİ棩ǿµ÷ÁË»ý¼«ÏìÓ¦¶ÔappµÄÖØÒªÐÔ£¬ÄÜÈÃÓû§¾õµÃÓ¦ÓÃÒ×ÓÚʹÓúͲÙ×÷¡£Æ»¹û¶ÔInterfaceBuilderµÄÌáÉýÈÃÊÓͼµ÷ÊÔ±äµÃǰËùδÓеļòµ¥¡£
½áÓï
ÕâÆªÎÄÕ²©Ö÷»¨ÁË3¸öÀñ°Ý£¬¶Ï¶ÏÐøÐø²ÅдÍêµÄ£¬µ±Öдí©Ӧ¸Ã·Ç³£¶à£¬µ«ÊÇÎÞÂÛÈçºÎ±ÉÈ˾õµÃÓ¦¸ÃËãÊÇÅäµÄÉϺÀ»ªÌײ͵ijƺÅÁË£¬µ±ÖÐIOS¿ª·¢µÄ»ù±¾¡¢³£ÓÃÒÔ¼°¸ß½×µÄµ÷ÊÔ¼¼Äܶ¼Éæ¼°ÁË£¬µ«ÊÇÈÔÈ»ÓкܶàÆäËûµÄÆæÃÅÇɼ¼Ã»ÓнéÉܵ½£¬Ö÷ÒªÊǿɶñµÄ¡°Æª·ù¡±ÏÞ֯סÁ˲©Ö÷¹ã²©µÄ°®£¬µ«ÊÇÎÞÂÛÈçºÎ£¬ÕâÆªÎÄÕ´ó¼ÒÔÝÇÒ¿ÉÒÔµ±×öÊÇÒ»¸öµ÷ÊÔ¼¼ÊõµÄĿ¼£¬ÒòΪ²©Ö÷ÔÚÕâÀïдµÄ½²µÄºÜ´Ödz£¬Äã²»Ó¦¸ÃÖ»Âú×ãÓÚÕâÆªÎÄÕ£¬ÄãÈç¹ûÏëÒª¸Ä±äÊÀ½çµÄ»°£¬ÄãÓ¦¸Ã½è×Ų©Ö÷µÄÕâÆªÄ¿Â¼Ê½ÎÄÕÂÉîÈëµØÑ§Ï°ÓëÑо¿£¡
µ±È»»¹ÓÐCrashµÄÈÕÖ¾¡¢²âÊÔ¹¤³Ì¡¢ÒÔ¼°Ç¿´óÅ£±ÆºåºåµÄµÚÈý·½µ÷ÊÔ¿âµÈÕâÆª²©¿ÍûÓÐÉæ¼°µ½£¬ÕâÊÇÒ»¸öÒź¶£¬µ«ÊÇÎÒÏàÐÅ´ÏÃ÷µÄÄã»áÈ¥GoogleÒ»·¬µÄ£¡
»¹ÓÐÎÒÃÇÓë±ÆÓż¦µÄ¹ÊʲŸոտªÊ¼¡£ |