C++Åàѵ֮Linux C/C++¹¤³ÌʦÐèÕÆÎÕµÄ7Ïî¼¼ÄÜ
¸üÐÂʱ¼ä:2016Äê07ÔÂ23ÈÕ15ʱ38·Ö À´Ô´: ä¯ÀÀ´ÎÊý:
£¨Ò»£©CÓïÑÔ
×÷ΪһÃûC³ÌÐòÔ±£¬ÊìÁ·ÕÆÎÕCÓïÑÔÊÇ×î»ù±¾µÄÒ»Ïî¼¼ÄÜ¡£¹ØÓÚÈçºÎѧºÃCÓïÑÔ£¬ÒÔ¼°CÓïÑÔ»°ÌâµÄÌÖÂÛ£¬ÍøÉÏÓкܶྵäµÄÎÄÕ¡£ºÜ¶àÈ˹¤×÷Ò»¶Îʱ¼äÒÔºó¶¼×ÔÈÏΪ×Ô¼ºµÄCÓïÑÔˮƽÒѾºÜ¸ßÁË¡£¿Éʵ¼ÊÔÚ¹¤×÷ÖУ¬½Ó´¥µÄ¶«Î÷Ò²¶àÁË£¬¿ªÔ´ÏîÄ¿¶àÁËÒԺ󣬲ŷ¢ÏÖ×Ô¼ºµÄCÓïÑÔÄÜÁ¦Ì«Ò»°ãÁË¡£ºêº¯Êýǧ±äÍò»¯µÄд·¨£¬Ö¸Õë°Ù»¨çÔÂÒµÄÓ÷¨…µÈµÈ¡£Ð´´úÂëʱ£¬Ó¦³£³£ÎÊ×Ô¼º£ºÕâ¸öÐÐΪÊÇCÓïÑԹ淶¶¨ÒåµÄÂð£¿Èç¹ûÊÇ£¬ÊÇC89»¹ÊÇC99£¿ÎÒÏÖÔÚÓõıàÒëÆ÷Ö§³ÖÂð£¿Èç¹û²»ÊÇCÓïÑԹ淶¶¨ÒåµÄ£¬ÄÇôÔÚ³ÌÐòÔËÐеÄÕâ¸öƽ̨£¬ÐÐΪÊÇÈ·¶¨µÄÂð£¿ËùÒÔ½¨Òé´ó¼Òƽʱ¿ÉÒÔ¶àÏëÏëÕâЩÎÊÌ⣬²é²é×ÊÁÏ£¬ÏàÐÅÒ»¶¨»á¶ÔCÓïÑÔÓиüÉîµÄÀí½â¡£
£¨¶þ£©UNIX/Linuxϵͳ±à³Ì
ÔÚUNIX/LinuxϵͳÉÏ¿ª·¢³ÌÐò£¬ÕÆÎÕϵͳ±à³ÌAPIÊDZز»¿ÉÉٵļ¼ÄÜ¡£¶øÕâ·½ÃæµÄ¾µäÊé¼®¶¼ÊÇһЩ´ó²¿Í·µÄÓ¢ÎÄÖø×÷£¬ÈÃÈËÍû¶øÉúη¡£Ê×ÏÈ¿ÉÒÔÏÈÕÒÒ»±¾¿Ú±®²»´íµÄÖÐÎÄÊéÏÈ¿´Ò»Ï£¬Á˽âһ϶¼ÓÐÄÄЩÖÖÀàµÄAPI¡£ÕâÑùÒÔºóÓõ½Ê±£¬ÔÙÈ¥¾«¶Á¾µäÓ¢ÎÄÖø×÷ÀïµÄÏà¹ØÕ½ڣ¬»òÊDzémanÊֲᡣ´ËÍ⣬Èç¹ûÓÐʱ¼ä£¬¿ÉÒÔѧϰһϾµäµÄ¿ªÔ´ÏîÄ¿£¬Á˽âÕâЩ¿ªÔ´ÏîÄ¿ÊÇÈçºÎʹÓÃÕâЩAPIµÄ¡£¾Ù¸öÀý×Ó£¬RedisÊǺܶàÈËÍÆ¼öµÄÒ»¸öºÜ²»´íµÄѧϰCÓïÑԵĿªÔ´ÏîÄ¿¡£ÔÚÔĶÁ´úÂëʱ£¬»á¿´µ½±£´æÊý¾Ýµ½Îļþʱ»áÓõ½fsyncº¯Êý£¬ÔÙÈ¥ÉîÈëµØÁ˽âÒ»ÏÂÕâ¸öº¯ÊýµÄ×÷Óá£ÕâÑù±Èµ¥´¿µØÈ¥¿´ÄÇÐ©Öø×÷Ч¹ûÒªºÃºÜ¶à¡£
£¨Èý£©ÍøÂç±à³Ì¼°Ïà¹ØÖªÊ¶
¹ØÓÚÍøÂç·½Ãæ£¬ÒÔÏÂÈýµãÊDZػáµÄ¼¼ÄÜ£º
a£©ÍøÂçÐÒé¡£ÔÚÈÕ³£µÄ¹¤×÷ÖУ¬´ó¼Ò½Ó´¥ºÍʹÓÃ×î¶àµÄÎÞÒÉÊÇTCP/IPÐÒé×å¡£´ËÍ⣬ÓÉÓÚ¹¤×÷ÁìÓò²»Í¬£¬Ò²¿ÉÄÜÓõ½ÆäËüµÄÐÒé¡£±È·½Ëµ£¬×öµçÐÅÏà¹ØµÄ³ÌÐò¿ª·¢£¬Æ½Ê±¿ÉÄܽӴ¥SCTPÐÒé»á¸ü¶àһЩ¡£¶ÔÓÚÕâЩÐÒ飬կÎÕ×î»ù±¾µÄ֪ʶÊDZØÐëµÄ£¬ÆäËüµÄ±ß±ß½Ç½Ç֪ʶ¿ÉÒԵȵ½ÓÃʱÔٲ顣¾ÙÀýÀ´Ëµ£¬TCPÐÒéµÄ“Èý´ÎÎÕÊÖ”£¬“ËĴλÓÊÖ”£¬“TIME-WAIT״̬”ÕâЩ»ù±¾µÄ֪ʶµãҪŪÃ÷°×£¬ÆäËüµÄ±ß½Ç֪ʶѧÍêÀϲ»ÓÃÍüµÃÒ²¿ì£¬»¹ÊÇÓÃʱgoogleÒ»ÏÂЧÂʸü¸ß¡£
b£©Socket±à³Ì¡£Socket±à³ÌµÄ¾µäÊé¼®Ò»µã²»±È½²ÏµÍ³±à³ÌµÄÊ鱡£¬ËùÒÔ¿ÉÒÔѡһ±¾Ïà¶Ô±¡µã£¬¿Ú±®²»´íµÄ¾«¶Áһϣ¬ÕâÑù»ù±¾¾ÍÕÆÎյİٷÖÖ®Îå¡¢ÁùÊ®ÁË¡£ÁíÍâÓÐʱ¼ä»¹ÊÇ¿´Ò»Ï¾µäµÄ¿ªÔ´´úÂë¡£ÕâÀﻹÄÃRedis¾ÙÀý£¬RedisÀï¹ØÓÚ´¦ÀíÍøÂçÁ¬½ÓºÍͨÐŵĴúÂëÁ¿²»´ó£¬¶øÇÒ»ù±¾º¸ÇÁËËùÓг£¼ûµÄUNIXƽ̨£¬¿´ÍêÒÔºóÒ»¶¨ÊÜÒæ·Ëdz¡£
c£©ÐÒé·ÖÎö¹¤¾ß¡£TCPdump¡¢snoop£¨Solarisƽ̨¹¤¾ß£©¡¢wiresharkµÈÕâЩ¹¤¾ß²»½öÄܰïÖúÎÒÃÇץȡÊý¾Ý°ü£¬»¹ÄÜ·ÖÎöÊý¾Ý°ü£¬Õâ¶ÔdebugÍøÂç³ÌÐòÓзdz£´óµÄ°ïÖú¡£ËùÒÔ£¬ÎÒÃÇÖÁÉÙÒªÕÆÎÕÕâЩ¹¤¾ß×î³£ÓõŦÄÜ¡£´ËÍ⣬¶ÔÓÚ¿ª·ÅÔ´´úÂëµÄ¹¤¾ß£¬ÎÒÃǸüÊÇ¿ÉÒÔ´Ó´úÂëÖÐѧµ½ºÜ¶à֪ʶ¡£¾ÙÀýÀ´Ëµ£¬×ö¶ÌÐÅÏà¹ØµÄÏîÄ¿£¬¿ÉÒÔ´ÓwiresharkµÄ·ÖÎö¶ÌÐÅÐÒéµÄ´úÂëÀïѧµ½ºÜ¶à¶«Î÷£¬Õâ¿ÉÒÔ°ïÖú¿ª·¢Õß¶Ô¶ÌÐÅÐÒéÓÐÁ˸üÇåÎúµÄÀí½â¡£
£¨ËÄ£©½Å±¾±à³ÌÄÜÁ¦
Ò»Ìáµ½½Å±¾±à³Ì£¬´ó¼ÒÊ×ÏÈÏëµ½µÄ¿ÉÄܾÍÊÇBash shell½Å±¾±à³ÌÁË¡£²»´í£¬ÔÚUnix/LinuxÉÏ£¬Bash shellÒ²Ðí¾ÍÊÇÓõÄ×î¹ã·ºµÄ½Å±¾±à³ÌÓïÑÔ¡£Ó¦Óÿª·¢¹¤³ÌʦÖ÷ÒªÓÃBash shell×öÁ½¸ö·½ÃæµÄ¹¤×÷£ºa£©ÓÃÓÚ±àд¼à¿Ø·þÎñ½Å±¾£»b£©Ð´Ò»Ð©¼òµ¥µÄµ¥Ôª²âÊԽű¾£¬±ÈÈçÑ»··¢Ò»Ð©ÃüÁµÈµÈ¡£µ«ÊÇBash shellµÄ¹¦ÄÜÔ¶Ô¶Òª±ÈÕâЩǿ´ó¡£Ò»Ð©¸ßÊÖÓÃBash shell±à³ÌÓïÑÔд³öÁ˺ܺÃÍæµÄÓÎÏ·£¬Ò²ÓÐÈË×ö³öÁ˺ÜcoolµÄÍøÂçÓ¦Óá£ËùÒÔ½¨Òé´ó¼ÒÓÐÐËȤ¿ÉÒÔ¶àÁ˽âÒ»ÏÂUnix/LinuxµÄÕâ²ã“¿Ç”¡£µ±È»£¬ÄãÒ²¿ÉÒÔÑ¡ÔñѧϰPython¡¢Perl¡¢RubyµÈ¡£²»¹ýÏà±ÈÕâЩÓïÑÔ£¬Bash shellÖÁÉÙÄã²»ÓÃ×Ô¼ºÈ¥°²×°£¬¶øÇÒËüÄÜ×öµÄÊÂͬÑùºÜÇ¿´ó¡£
£¨Î壩²Ù×÷ϵͳ¼°CPUÌåϵ½á¹¹
Ò²ÐíÓÐÒ»Ì죬Äã»áÅöµ½ÕâÑùµÄÇé¾°£ºÄãµÄ³ÌÐòÔÚSolarisÉϻᷢÉúcore dump£¬ÔÚLinuxÉÏÈ´ÔËÐеĺúõġ£¾¹ýÒ»·¬¼è¿àµÄdebug£¬×îºóµÃµ½µÄÔÒòÊÇÁ½ÖÖ²Ù×÷ϵͳ¶ÔÏ̵߳ĵ÷¶È²ßÂÔ²»Ò»Ñù£¬Õâ»áʹһ¸ö¶ÔÈ«¾Ö±äÁ¿Ã»ÓмÓËø¾Í·ÃÎʵÄbugÔÚLinuxÉϺÜÄѳöÏÖ¡£ËùÒÔÄãÐèÒª¾¡¿ÉÄܵØÈ¥Á˽âÄãʹÓõIJÙ×÷ϵͳ£¬ÕâÑùÎÞÂÛ¶Ôд³ÌÐò»¹ÊÇdebug¶¼»áÓкܴóµÄ°ïÖú¡£±ÈÈ磬ÄãÐèÒªÁË½â½ø³ÌµÄÄÚ´æ²¼¾Ö£¬ÕâÑùÄã¾ÍÖªµÀÕ»ºÍ¶Ñµ½µ×ÔÚÄÚ´æµÄÄĶοռ䣬ΪʲôÄÚ´æÐ´Ô½½çÓÐʱ»ácore dump£¬ÓÐʱûÊ¡£
³ýÁ˲Ù×÷ϵͳ£¬Á˽âCPUµÄÌåϵ½á¹¹Ò²ÊÇÒ»ÃűØÐ޿Ρ£±È·½Ëµ£¬SPARC CPUÒªÇó×Ö½Ú¶ÔÆë£¬¶øX86 CPUÔòûÓÐÕâ¸öÒªÇó¡£ÓÖ±ÈÈçSPARC CPUÊÇ´ó¶Ëģʽ£¬¶øX86 CPUÊÇС¶Ëģʽ£¬Õâ¾ÍÒªÇóÄã¶ÔÏñλÓòÕâÑùµÄ¶¨ÒåÒª¸ñÍâСÐÄ¡£Ä㻹ҪÁ˽âÄãʹÓõÄCPUµÄ»ã±àÓïÑÔ£¬ÖÁÉÙÄÜ´ó¸Å¿´¶®¡£ÒòΪÓÐЩʱºò£¬µ±Äã´ÓC´úÂëÖÐÕÒ²»³öbugµÄÔÒòʱ£¬¾ÍÐèÒªÄã“͸¹ýÏÖÏó¿´±¾ÖÊ”£¬´Ó»ã±à´úÂë²ãÃæ¿´¿´µ½µ×·¢ÉúÁËʲô¡£
£¨Áù£©±àÒëÆ÷ºÍµ÷ÊÔÆ÷
“¹¤ÓûÉÆÆäÊ£¬±ØÏÈÀûÆäÆ÷”¡£±àÒëÆ÷¸ºÔð°ÑÔ´´úÂëÉú³É¿ÉÖ´ÐÐÎļþ£¬¶øµ÷ÊÔÆ÷ÔòÊÇÔÚ³ÌÐò³öÏÖbugʱ£¬ÓÃÀ´“½µÑý³ýħ”µÄ²»¶þÉñÆ÷¡£ÒÔ´ó¼Ò×îÊìϤµÄgccºÍgdbΪÀý×Ó¡£
gccÓкܶà±àÒëÑ¡Ï³ýÁËÒªÊìϤÏñ-O£¬-gÕâЩ×î»ù±¾µÄÑ¡Ï½¨Òé´ó¼Ò¿ÉÒÔ¶àÁ˽âһЩÆäËü²»³£¼ûµÄÑ¡Ïî¡£ÒòΪÕâЩѡÏîºÜ¿ÉÄܰïÖúÎÒÃÇÕÒµ½³ÌÐòµÄһЩbug¡£¾Ù¸öÀý×Ó£¬ÔڱȽÏеÄgcc°æ±¾ÀÔö¼ÓÁË-fstack-protectorÕâ¸öÑ¡Ï¶øËü¿ÉÒÔ°ïÖúÎÒÃǼì²éµ½»º³åÇøÒç³öÕâÖÖbug¡£´ËÍ⣬Ä㻹¿ÉÄÜÅöµ½ÕâÖÖÇé¿ö£¬Ò»¸öbug×ÜÊÇ·¢ÉúÔÚ³ÌÐòÓÅ»¯ºóµÄ°æ±¾£¬¶ø²»»á³öÏÖÔÚû¾¹ýÓÅ»¯µÄ°æ±¾¡£ËùÒÔ£¬¶àÁ˽âÄãµÄ±àÒëÆ÷£¬Äã¾Í¿ÉÒÔ¸üºÃµØÁ˽âÄãµÄ³ÌÐòÊÇÈçºÎÉú³ÉµÄ¡£
Ò»¸ö³ÌÐòÔ±²»¿ÉÄܲ»Åöµ½bug£¬¶øÕâ¸öʱºò£¬µ÷ÊÔÆ÷¾ÍÊÇ×îºÃµÄ¹¤¾ß¡£¿ÉÒÔ˵£¬ÔÚÓöµ½bugʱµ÷ÊÔ¼¼ÇɺÍÊÖ¶ÎÊÇ·ñ·á¸»ÊǺâÁ¿Ò»¸ö³ÌÐòÔ±µÄÄÜÁ¦ºÍˮƽµÄÖØÒª²Î¿¼¡£³ý´ËÒÔÍ⣬gdbÁíÒ»¸öÖØÒªÓÃ;¾ÍÊÇ·ÖÎö³ÌÐòµÄcore dumpÎļþ¡£³ÌÐòµÄcore dumpÎļþºÃ±ÈÒ»×®ÐÌʰ¸¼þµÄ“·¸×ïÏÖ³¡”£¬¶øgdbÔòÊÇÐÌÕì¹ÙÔ±ÓÃÀ´ÔÚÏÖ³¡ÌáÈ¡ÏßË÷µÄ¹¤¾ß¡£¶ÔgdbÔ½ÊìϤ£¬¾ÍÔ½ÄÜ´Ócore dumpÎļþÌáÈ¡ÓмÛÖµµÄÐÅÏ¢£¬Ò²¾ÍÔ½ÓÐÖúÓÚÎÒÃǶ¨Î»µ½³ÌÐòbugµÄ“root cause”¡£
£¨Æß£©DTrace/SystemTap
DTraceÊÇÓÉSunµÄ¼¸Î»²Å»ªºáÒçµÄ¹¤³Ìʦ¿ª·¢µÄ£¬×ʼֻ֧³ÖSolaris²Ù×÷ϵͳ£¬ÏÖÔÚFreeBSDºÍMac OS XÒ²¶¼Ö§³ÖÁË¡£LinuxÉÏÀàËÆµÄ¹¤¾ßÓÐSystemTap£¬Ò²ÓÐÈ˰ÑDTraceÒÆÖ²µ½LinuxÉÏ£¬²»¹ýЧ¹ûËÆºõ²¢²»ºÃ¡£¼òµ¥µØËµ£¬DTrace¿ÉÒÔ¼¸ºõ²»»áÔÚ¶ÔÕû¸öϵͳÓÐÈκÎÐÔÄÜÓ°ÏìÏ£¬ÈÃÄãÁ˽âÄãµÄ³ÌÐòËù·¢ÉúµÄÒ»ÇС£Õâ¶Ô·ÖÎö³ÌÐòµÄÈȵ㣨“Hot spot”£©£¬Á˽â³ÌÐòµÄÖ´ÐÐÁ÷³Ì£¬¶¨Î»³ÌÐòbug¶¼ÓкܴóµÄ°ïÖú¡£ÓÐЩʱºò£¬DTrace¿ÉÄÜÊÇÄãΨһµÄ¹¤¾ß¡£¾ÙÀýÀ´Ëµ£¬Óиö³ÌÐòÖ»·¢ÉúÔÚÉú²ú»·¾³£¬¶øÔÚʵÑéÊÒ»·¾³ÎÞ·¨¸´ÏÖ£¨µ±È»£¬ÀíÂÛÉÏÈκÎbug¶¼¿ÉÒÔ¸´ÏÖ£¬Ö»ÊÇÎÒÃÇûÓÐÕÒµ½¸´ÏÖÌõ¼þ¡££©¡£Äã²»¿ÉÄÜÔÚÄ㻳ÒɵĴúÂë´òÉ϶ϵ㣬ȻºóÓÃgdbÈ¥µ÷ÊÔ¡£ÕâʱÄãÖ»ÄܽèÖúÓÚDTrace£¬Í¨¹ýËüÈ¥Á˽â³ÌÐòµ½µ×ÊÇÈçºÎÔËÐе쬵±Ê±µÄ±äÁ¿ÖµÊÇʲô¡£´ËÍ⣬DTrace»¹¿ÉÒÔ°ïÄãÁ˽â²Ù×÷ϵͳµÄkernel£¬Õâ»áÂú×ãºÜ¶àgeekµÄºÃÆæÐÄ¡£
±¾ÎİæÈ¨¹éÀÖÓã²¥¿ÍC++ÅàѵѧԺËùÓУ¬»¶Ó×ªÔØ£¬×ªÔØÇë×¢Ã÷×÷Õß³ö´¦¡£Ð»Ð»£¡
×÷ÕߣºÀÖÓã²¥¿ÍC/C++ÅàѵѧԺ
Ê×·¢£ºhttp://www.itcast.cn/c/