È»¶ø£¬¼´±ãÊÇÔÚÕâÑùÒ»¸öÒÔÎȶ¨ÐԺͿɿ¿ÐÔÖø³ÆµÄƽ̨ÉÏ£¬³ÌÐò±ÀÀ£µÄÏÖÏóÈÔȻʱÓз¢Éú
³ÌÐò±ÀÀ£²»½ö»áµ¼ÖÂÊý¾Ý¶ªÊ§¡¢·þÎñÖжϣ¬»¹¿ÉÄܶÔÓû§ÌåÑéºÍÆóÒµÔËÓªÔì³ÉÑÏÖØÓ°Ïì
±¾ÎÄÖ¼ÔÚÉîÈëÆÊÎöLinux³ÌÐò±ÀÀ£µÄÔÒò£¬²¢Ìá³öһϵÁÐÐÐÖ®ÓÐЧµÄÓ¦¶Ô²ßÂÔ£¬ÒÔÆÚ°ïÖú¿ª·¢Õߺ͹ÜÀíÔ±ÓÐЧ¼õÉÙÄËÖÁ±ÜÃâ´ËÀàÎÊÌâµÄ·¢Éú
Ò»¡¢Linux³ÌÐò±ÀÀ£¸ÅÊö Linux³ÌÐò±ÀÀ££¬¼ò¶øÑÔÖ®£¬ÊÇÖ¸ÔËÐÐÔÚLinux²Ù×÷ϵͳÉϵÄÓ¦ÓóÌÐò»ò½ø³ÌÔÚÖ´Ðйý³ÌÖÐͻȻÖÕÖ¹£¬ÎÞ·¨¼ÌÐøÕý³£ÔËÐÐ
ÕâÖÖÖÕֹͨ³£°éËæ×Å´íÎóÈÕÖ¾µÄÉú³É£¬ÓÐʱ»¹»á³öÏÖ¡°¶Î´íÎó¡±£¨Segmentation Fault£©¡¢¡°×ÜÏß´íÎó¡±£¨Bus Error£©µÈÌØ¶¨ÀàÐ͵ĴíÎóÐÅÏ¢
³ÌÐò±ÀÀ£µÄÔÒò¸´ÔÓ¶àÑù£¬´Ó±à³Ì´íÎóµ½ÏµÍ³×ÊÔ´²»×㣬´ÓÈí¼þ¼æÈÝÐÔÎÊÌâµ½Ó²¼þ¹ÊÕÏ£¬¶¼¿ÉÄܳÉΪ´¥·¢±ÀÀ£µÄµ¼»ðË÷
¶þ¡¢³ÌÐò±ÀÀ£µÄÖ÷ÒªÔÒò 2.1 ÄÚ´æ¹ÜÀí²»µ± ÄÚ´æ¹ÜÀí´íÎóÊÇLinux³ÌÐò±ÀÀ£×î³£¼ûµÄÔÒòÖ®Ò»
°üÀ¨µ«²»ÏÞÓÚ£º - ·Ç·¨ÄÚ´æ·ÃÎÊ£º³ÌÐòÊÔͼ·ÃÎÊδ·ÖÅä»òÒÑÊͷŵÄÄÚ´æÇøÓò£¬µ¼Ö¶δíÎó
- ÄÚ´æÐ¹Â©£º³¤Ê±¼äÔËÐеijÌÐòδÄÜÓÐЧÊͷŲ»ÔÙʹÓõÄÄڴ棬×îÖÕµ¼ÖÂϵͳÄÚ´æºÄ¾¡£¬Ó°Ïì³ÌÐòÎȶ¨ÐÔ
- »º³åÇøÒç³ö£ºÏò¹Ì¶¨´óСµÄ»º³åÇøÐ´È볬¹ýÆäÈÝÁ¿µÄÊý¾Ý£¬¿ÉÄܸ²¸ÇÏàÁÚµÄÄÚ´æÇøÓò£¬Òý·¢²»¿ÉÔ¤²âµÄÐÐΪÉõÖÁ±ÀÀ£
2.2 Ö¸Õë´íÎó Ö¸Õë²Ù×÷ÊÇC/C++µÈµÍ¼¶ÓïÑÔÖеij£¼û²Ù×÷£¬µ«Ò²ÊÇ×îÈÝÒ׳öÏÖÎÊÌâµÄµØ·½
- Ò°Ö¸Õ룺ָÏòÎÞЧÄÚ´æµØÖ·µÄÖ¸Õ룬·ÃÎÊÕâÑùµÄÖ¸Õë»áµ¼Ö±ÀÀ£
¿ÕÖ¸Õë½âÒýÓ㺳¢ÊÔ·ÃÎÊֵΪNULLµÄÖ¸Õë
- Ö¸ÕëÐü¹Ò£ºÖ¸ÏòÒѱ»ÊÍ·ÅÄÚ´æÇøÓòµÄÖ¸Õ룬¼ÌÐøÊ¹ÓøÃÖ¸ÕëͬÑù»áµ¼Ö±ÀÀ£
2.3 ²¢·¢Óëͬ²½ÎÊÌâ ¶àÏ̱߳à³ÌÖУ¬Èç¹ûÏ̼߳äµÄͬ²½»úÖÆÉè¼Æ²»µ±£¬»áÒý·¢Êý¾Ý¾ºÕù¡¢ËÀËøµÈÎÊÌâ
- Êý¾Ý¾ºÕù£º¶à¸öÏß³Ìͬʱ¶Áд¹²ÏíÊý¾Ý¶øÎ´½øÐÐÊʵ±Í¬²½£¬µ¼ÖÂÊý¾Ý²»Ò»ÖÂ
- ËÀËø£ºÁ½¸ö»ò¶à¸öÏß³ÌÏ໥µÈ´ý¶Ô·½ÊÍ·Å×ÊÔ´£¬´Ó¶øÏÝÈëÓÀ¾ÃµÈ´ý״̬
- ÓÅÏȼ¶·´×ª£ºµÍÓÅÏȼ¶Ï̳߳ÖÓиßÓÅÏȼ¶Ïß³ÌËùÐèµÄ×ÊÔ´£¬µ¼Ö¸ßÓÅÏȼ¶Ï̱߳»×èÈû
2.4 ϵͳ×ÊÔ´ÏÞÖÆ - ÎļþÃèÊö·ûºÄ¾¡£ºÃ¿¸ö½ø³Ì¿É´ò¿ªµÄÎļþÊýÁ¿ÓÐÏÞ£¬³¬¹ýÏÞÖÆ½«µ¼ÖÂÎÞ·¨´ò¿ªÐÂÎļþ
- ½ø³Ì/Ïß³ÌÊýÏÞÖÆ£ºÏµÍ³¶ÔͬʱÔËÐеĽø³Ì»òÏß³ÌÊýÁ¿ÓÐÉÏÏÞ£¬³¬³öºó¿ÉÄÜÎÞ·¨´´½¨Ð½ø³Ì»òÏß³Ì
- ÄÚ´æºÍCPU×ÊÔ´½ôÕÅ£ºÏµÍ³×ÊÔ´½ôÕÅʱ£¬³ÌÐò¿ÉÄÜÒòÎÞ·¨»ñµÃ×ã¹»µÄ×ÊÔ´¶øÔËÐлºÂýÉõÖÁ±ÀÀ£
2.5 Èí¼þ¼æÈÝÐÔÓëÒÀÀµÎÊÌâ - ¿âÎļþ²»Æ¥Å䣺³ÌÐòÒÀÀµµÄ¿âÎļþ°æ±¾Óë±àÒëʱʹÓõİ汾²»Ò»Ö£¬¿ÉÄܵ¼ÖÂÔËÐÐʱ´íÎó
- ²Ù×÷ϵͳ°æ±¾¼æÈÝÐÔ£ºÄ³Ð©³ÌÐò¿ÉÄܽöÔÚаæ»ò¾É°æµÄLinuxϵͳÉÏÎȶ¨ÔËÐУ¬¿ç°æ±¾Ç¨ÒÆÊ±¿ÉÄܳöÏÖÎÊÌâ
2.6 Ó²¼þ¹ÊÕÏ - ÄÚ´æ¹ÊÕÏ£ºÎïÀíÄÚ´æË𻵻ò½Ó´¥²»Á¼£¬¿ÉÄܵ¼Ö³ÌÐò·ÃÎÊʱ³ö´í
- CPU¹ýÈÈ£º³¤Ê±¼ä¸ß¸ººÉÔËÐпÉÄܵ¼ÖÂCPU¹ýÈÈ£¬Ó°ÏìÆäÕý³£¹¤×÷
- ´ÅÅÌ´íÎó£ºÎļþϵͳË𻵻ò´ÅÅ̹ÊÕÏ£¬Ó°ÏìÊý¾ÝµÄ¶Áд²Ù×÷
Èý¡¢Ó¦¶Ô²ßÂÔ 3.1 ¼ÓÇ¿ÄÚ´æ¹ÜÀí - ʹÓù¤¾ßÈç`valgrind`¡¢`AddressSanitizer`½øÐÐÄÚ´æÐ¹Â©¼ì²âºÍ·Ç·¨ÄÚ´æ·ÃÎʼì²é
- ¶¨ÆÚÓÅ»¯´úÂ룬ȷ±£ÄÚ´æµÄÓÐЧ·ÖÅäºÍÊÍ·Å
- ¶ÔÓÚC/C++³ÌÐò£¬¾¡Á¿Ê¹ÓÃÖÇÄÜÖ¸ÕëµÈ¸ß¼¶ÌØÐÔ¹ÜÀíÄÚ´æ
3.2 ½÷É÷´¦ÀíÖ¸Õë - Ñϸñ¼ì²éÖ¸ÕëµÄ³õʼ