Ñ§Ï°Íø¿¼ÊÔѧϰ×ÊÁÏ

Gzu521.com

LinuxϵͳÖÐÕÒ³ö²¢½â¾ö³ÌÐò´íÎó·½·¨(1)

LINUX½Ì³Ì   µã»÷£º´Î   ·¢²¼Ê±¼ä£º2006-11-14   ¡¾×ÖÌ壺´ó ÖРС¡¿   À´Ô´£ºGzu521.com
¹ó ÖÝ Ñ§ ϰ Íø
Äú¿ÉÒÔÓø÷ÖÖ·½·¨À´¼à¿ØÔËÐÐ×ŵÄÓû§¿Õ¼ä³ÌÐò£º¿ÉÒÔΪÆäÔËÐе÷ÊÔÆ÷²¢µ¥²½µ÷ÊԸóÌÐò£¬Ìí¼Ó´òÓ¡Óï¾ä£¬»òÕßÌí¼Ó¹¤¾ßÀ´·ÖÎö³ÌÐò¡£±¾ÎÄÃèÊöÁ˼¸ÖÖ¿ÉÒÔÓÃÀ´µ÷ÊÔÔÚ linux ÉÏÔËÐеijÌÐòµÄ·½·¨¡£ÎÒÃǽ«»Ø¹ËËÄÖÖµ÷ÊÔÎÊÌâµÄÇé¿ö£¬ÕâЩÎÊÌâ°üÀ¨¶Î´íÎó£¬ÄÚ´æÒç³öºÍй©£¬»¹ÓÐ¹ÒÆð¡£  

~ }PL.€=[±¾_ÎÄ_À´_Ô´_ÓÚ_ÎÒ_µÄ_ѧ_ϰ_ÍøµçÄÔ¿ÎÌÃLINUX½Ì³Ì http://Www.GZU521.Com ]~ }PL.€=


¡¡¡¡±¾ÎÄÌÖÂÛÁËËÄÖÖµ÷ÊÔ linux ³ÌÐòµÄÇé¿ö¡£ÔÚµÚ 1 ÖÖÇé¿öÖУ¬ÎÒÃÇʹÓÃÁËÁ½¸öÓÐÄÚ´æ·ÖÅäÎÊÌâµÄÑù±¾³ÌÐò£¬Ê¹Óàmemwatch ºÍ yet another malloc debugger£¨yamd£©¹¤¾ßÀ´µ÷ÊÔËüÃÇ¡£ÔÚµÚ 2 ÖÖÇé¿öÖУ¬ÎÒÃÇʹÓÃÁË linux ÖеĠstrace ÊµÓóÌÐò£¬ËüÄܹ»¸ú×Ùϵͳµ÷ÓúÍÐźţ¬´Ó¶øÕÒ³ö³ÌÐò·¢Éú´íÎóµÄµØ·½¡£ÔÚµÚ 3 ÖÖÇé¿öÖУ¬ÎÒÃÇʹÓàlinux Äں˵Ġoops ¹¦ÄÜÀ´½â¾ö³ÌÐòµÄ¶Î´íÎ󣬲¢ÏòÄúչʾÈçºÎÉèÖÃÄÚºËÔ´´úÂë¼¶µ÷ÊÔÆ÷£¨kernel source level debugger£¬kgdb£©£¬ÒÔʹÓàgnu µ÷ÊÔÆ÷£¨gnu debugger£¬gdb£©À´½â¾öÏàͬµÄÎÊÌ⣻kgdb ³ÌÐòÊÇʹÓô®ÐÐÁ¬½ÓµÄ linux ÄÚºËÔ¶³Ì gdb¡£ÔÚµÚ 4 ÖÖÇé¿öÖУ¬ÎÒÃÇʹÓàlinux ÉÏÌṩµÄħÊõ¼ü¿ØË³Ðò£¨magic key sequence£©À´ÏÔʾÒý·¢¹ÒÆðÎÊÌâµÄ×é¼þµÄÐÅÏ¢¡£  

¡¡¡¡³£¼ûµ÷ÊÔ·½·¨  

¡¡¡¡µ±ÄúµÄ³ÌÐòÖаüº¬´íÎóʱ£¬ºÜ¿ÉÄÜÔÚ´úÂëÖÐij´¦ÓÐÒ»¸öÌõ¼þ£¬ÄúÈÏΪËüÎªÕæ£¨true£©£¬µ«Êµ¼ÊÉÏÊǼ٣¨false£©¡£ÕÒ³ö´íÎóµÄ¹ý³ÌÒ²¾ÍÊÇÔÚÕÒ³ö´íÎóºóÍÆ·­ÒÔǰһֱȷÐÅÎªÕæµÄij¸öÌõ¼þ¹ý³Ì¡£  

¡¡¡¡ÒÔϼ¸¸öʾÀýÊÇÄú¿ÉÄÜÈ·ÐųÉÁ¢µÄÌõ¼þµÄһЩÀàÐÍ£º  

¡¡¡¡ÔÚÔ´´úÂëÖеÄij´¦£¬Ä³±äÁ¿ÓÐÌØ¶¨µÄÖµ¡£  

¡¡¡¡ÔÚ¸ø¶¨µÄµØ·½£¬Ä³¸ö½á¹¹Òѱ»ÕýÈ·ÉèÖᣠ 

¡¡¡¡¶ÔÓÚ¸ø¶¨µÄ if-then-else Óï¾ä£¬if ²¿·Ö¾ÍÊDZ»Ö´ÐеÄ·¾¶¡£  

¡¡¡¡µ±×ÓÀý³Ì±»µ÷ÓÃʱ£¬¸ÃÀý³ÌÕýÈ·µØ½ÓÊÕµ½ÁËËüµÄ²ÎÊý¡£  

¡¡¡¡ÕÒ³ö´íÎóÒ²¾ÍÊÇҪȷ¶¨ÉÏÊöËùÓÐÇé¿öÊÇ·ñ´æÔÚ¡£Èç¹ûÄúÈ·ÐÅÔÚ×ÓÀý³Ì±»µ÷ÓÃʱij±äÁ¿Ó¦¸ÃÓÐÌØ¶¨µÄÖµ£¬ÄÇô¾Í¼ì²éÒ»ÏÂÇé¿öÊÇ·ñÈç´Ë¡£Èç¹ûÄúÏàÐÅ if ½á¹¹»á±»Ö´ÐУ¬ÄÇôҲ¼ì²éÒ»ÏÂÇé¿öÊÇ·ñÈç´Ë¡£Í¨³££¬ÄúµÄ¼ÙÉè¶¼»áÊÇÕýÈ·µÄ£¬µ«×îÖÕÄú»áÕÒµ½Óë¼ÙÉè²»·ûµÄÇé¿ö¡£½á¹û£¬Äú¾Í»áÕÒ³ö·¢Éú´íÎóµÄµØ·½¡£  

¡¡¡¡µ÷ÊÔÊÇÄúÎÞ·¨ÌӱܵÄÈÎÎñ¡£½øÐе÷ÊÔÓкܶàÖÖ·½·¨£¬±ÈÈ罫ÏûÏ¢´òÓ¡µ½ÆÁÄ»ÉÏ¡¢Ê¹Óõ÷ÊÔÆ÷£¬»òÖ»ÊÇ¿¼ÂdzÌÐòÖ´ÐеÄÇé¿ö²¢×ÐϸµØ´§Ä¦ÎÊÌâËùÔÚ¡£  

¡¡¡¡ÔÚÐÞÕýÎÊÌâ֮ǰ£¬Äú±ØÐëÕÒ³öËüµÄÔ´Í·¡£¾ÙÀýÀ´Ëµ£¬¶ÔÓڶδíÎó£¬ÄúÐèÒªÁ˽â¶Î´íÎó·¢ÉúÔÚ´úÂëµÄÄÄÒ»ÐС£Ò»µ©Äú·¢ÏÖÁË´úÂëÖгö´íµÄÐУ¬ÇëÈ·¶¨¸Ã·½·¨ÖбäÁ¿µÄÖµ¡¢·½·¨±»µ÷Óõķ½Ê½ÒÔ¼°¹ØÓÚ´íÎóÈçºÎ·¢ÉúµÄÏêϸÇé¿ö¡£Ê¹Óõ÷ÊÔÆ÷½«Ê¹ÕÒ³öËùÓÐÕâЩÐÅÏ¢±äµÃºÜ¼òµ¥¡£Èç¹ûûÓе÷ÊÔÆ÷¿ÉÓã¬Äú»¹¿ÉÒÔʹÓÃÆäËüµÄ¹¤¾ß¡££¨Çë×¢Ò⣬²úÆ·»·¾³ÖпÉÄܲ¢²»Ìṩµ÷ÊÔÆ÷£¬¶øÇÒ linux ÄÚºËûÓÐÄÚ½¨µÄµ÷ÊÔÆ÷¡££©  

¡¡¡¡ÊµÓõÄÄÚ´æºÍÄں˹¤¾ß  

¡¡¡¡Äú¿ÉÒÔʹÓàlinux Éϵĵ÷ÊÔ¹¤¾ß£¬Í¨¹ý¸÷ÖÖ·½Ê½¸ú×ÙÓû§¿Õ¼äºÍÄÚºËÎÊÌâ¡£ÇëʹÓÃÏÂÃæµÄ¹¤¾ßºÍ¼¼ÊõÀ´¹¹½¨ºÍµ÷ÊÔÄúµÄÔ´´úÂ룺  

¡¡¡¡Óû§¿Õ¼ä¹¤¾ß£º  

¡¡¡¡Äڴ湤¾ß£ºmemwatch ºÍ yamd  

¡¡¡¡strace  

¡¡¡¡gnu µ÷ÊÔÆ÷£¨gdb£©  

¡¡¡¡Ä§Êõ¼ü¿ØË³Ðò  

¡¡¡¡Äں˹¤¾ß£º  

¡¡¡¡ÄÚºËÔ´´úÂë¼¶µ÷ÊÔÆ÷£¨kgdb£©  

¡¡¡¡ÄÚ½¨Äں˵÷ÊÔÆ÷£¨kdb£©  

¡¡¡¡oops  

¡¡¡¡±¾ÎĽ«ÌÖÂÛÒ»Ààͨ¹ýÈ˹¤¼ì²é´úÂë²»ÈÝÒ×ÕÒµ½µÄÎÊÌ⣬¶øÇÒ´ËÀàÎÊÌâÖ»ÔÚºÜÉÙ¼ûµÄÇé¿öÏ´æÔÚ¡£ÄÚ´æ´íÎóͨ³£ÔÚ¶àÖÖÇé¿öͬʱ´æÔÚʱ³öÏÖ£¬¶øÇÒÄúÓÐʱֻÄÜÔÚ²¿Êð³ÌÐòÖ®ºó²ÅÄÜ·¢ÏÖÄÚ´æ´íÎó¡£ 

¡¡¡¡µÚ 1 ÖÖÇé¿ö£ºÄÚ´æµ÷ÊÔ¹¤¾ß  
¡¡¡¡c ÓïÑÔ×÷Ϊ linux ÏµÍ³Éϱê×¼µÄ±à³ÌÓïÑÔ¸øÓèÁËÎÒÃǶԶ¯Ì¬ÄÚ´æ·ÖÅäºÜ´óµÄ¿ØÖÆÈ¨¡£È»¶ø£¬ÕâÖÖ×ÔÓÉ¿ÉÄܻᵼÖÂÑÏÖØµÄÄÚ´æ¹ÜÀíÎÊÌ⣬¶øÕâЩÎÊÌâ¿ÉÄܵ¼Ö³ÌÐò±ÀÀ£»òËæÊ±¼äµÄÍÆÒÆµ¼ÖÂÐÔÄܽµ¼¶¡£  

¡¡¡¡ÄÚ´æÐ¹Â©£¨¼´ malloc() ÄÚ´æÔÚ¶ÔÓ¦µÄ free() µ÷ÓÃÖ´ÐкóÓÀ²»±»ÊÍ·Å£©ºÍ»º³åÇøÒç³ö£¨ÀýÈç¶ÔÒÔǰ·ÖÅ䵽ijÊý×éµÄÄÚ´æ½øÐÐд²Ù×÷£©ÊÇһЩ³£¼ûµÄÎÊÌ⣬ËüÃÇ¿ÉÄܺÜÄѼì²âµ½¡£ÕâÒ»²¿·Ö½«ÌÖÂÛ¼¸¸öµ÷ÊÔ¹¤¾ß£¬ËüÃǼ«´óµØ¼ò»¯Á˼ì²âºÍÕÒ³öÄÚ´æÎÊÌâµÄ¹ý³Ì¡£  

¡¡¡¡memwatch  

¡¡¡¡memwatch ÓÉ johan lindh ±àд£¬ÊÇÒ»¸ö¿ª·ÅÔ´´úÂë c ÓïÑÔÄÚ´æ´íÎó¼ì²â¹¤¾ß£¬Äú¿ÉÒÔ×Ô¼ºÏÂÔØËü£¨Çë²ÎÔı¾ÎĺóÃæ²¿·ÖµÄ²Î¿¼×ÊÁÏ£©¡£Ö»ÒªÔÚ´úÂëÖÐÌí¼ÓÒ»¸öÍ·Îļþ²¢ÔÚ gcc Óï¾äÖж¨ÒåÁË memwatch Ö®ºó£¬Äú¾Í¿ÉÒÔ¸ú×Ù³ÌÐòÖеÄÄÚ´æÐ¹Â©ºÍ´íÎóÁË¡£memwatch Ö§³Ö ansi c£¬ËüÌṩ½á¹ûÈÕÖ¾¼Í¼£¬Äܼì²âË«ÖØÊÍ·Å£¨double-free£©¡¢´íÎóÊÍ·Å£¨erroneous free£©¡¢Ã»ÓÐÊͷŵÄÄڴ棨unfreed memory£©¡¢Òç³öºÍÏÂÒçµÈµÈ¡£  


code:#include "stdlib.h"  
#include "stdio.h"  
#include "memwatch.h"  

int main(void)  
{  
char *ptr1;  
char *ptr2;  

ptr1 = malloc(512);  
ptr2 = malloc(512);  

ptr2 = ptr1;  
free(ptr2);  
free(ptr1);  
}  


Çåµ¥ 1. ÄÚ´æÑù±¾£¨test1.c£© 
¡¡¡¡Çåµ¥ 1 ÖеĴúÂ뽫·ÖÅäÁ½¸ö 512 ×Ö½ÚµÄÄÚ´æ¿é£¬È»ºóÖ¸ÏòµÚÒ»¸öÄÚ´æ¿éµÄÖ¸Õë±»É趨ΪָÏòµÚ¶þ¸öÄÚ´æ¿é¡£½á¹û£¬µÚ¶þ¸öÄÚ´æ¿éµÄµØÖ·¶ªÊ§£¬´Ó¶ø²úÉúÁËÄÚ´æÐ¹Â©¡£  

¡¡¡¡ÏÖÔÚÎÒÃDZàÒëÇåµ¥ 1 µÄ memwatch.c¡£ÏÂÃæÊÇÒ»¸ö makefile Ê¾Àý£º  
i{ wb;S6[ת Ìù ÓÚ ÎÒ µÄ ѧ ϰ Íø µçÄÔ¿ÎÌÃLINUX½Ì³Ì HTtp://wwW.gzU521.coM)i{ wb;S6

code:test1  
gcc -dmemwatch -dmw_stdio test1.c memwatch  
c -o test1  

¡¡¡¡µ±ÄúÔËÐРtest1 ³ÌÐòºó£¬Ëü»áÉú³ÉÒ»¸ö¹ØÓÚй©µÄÄÚ´æµÄ±¨¸æ¡£Çåµ¥ 2 Õ¹Ê¾ÁËʾÀý memwatch.log Êä³öÎļþ¡£  


code:memwatch 2.67 copyright (c) 1992-1999 johan lindh  

...  
double-free: <4> test1.c(15), 0x80517b4 was freed from test1.c(14)  
...  
unfreed: <2> test1.c(11), 512 bytes at 0x80519e4  
{fe fe fe fe fe fe fe fe fe fe fe fe ..............}  

memory usage statistics (global):  
n)umber of allocations made: 2  
l)argest memory usage : 1024  
t)otal of all alloc() calls: 1024  
u)nfreed bytes totals : 512  


Çåµ¥ 2. test1 memwatch.log Îļþ 
¡¡¡¡memwatch ÎªÄúÏÔÊ¾ÕæÕýµ¼ÖÂÎÊÌâµÄÐС£Èç¹ûÄúÊÍ·ÅÒ»¸öÒѾ­ÊͷŹýµÄÖ¸Õ룬Ëü»á¸æËßÄú¡£¶ÔÓÚûÓÐÊͷŵÄÄÚ´æÒ²Ò»Ñù¡£ÈÕÖ¾½áβ²¿·ÖÏÔʾͳ¼ÆÐÅÏ¢£¬°üÀ¨Ð¹Â©Á˶àÉÙÄڴ棬ʹÓÃÁ˶àÉÙÄڴ棬ÒÔ¼°×ܹ²·ÖÅäÁ˶àÉÙÄÚ´æ¡£ 

¡¡¡¡yamd  
¡¡¡¡yamd Èí¼þ°üÓÉ nate eldredge ±àд£¬¿ÉÒÔ²éÕÒ c ºÍ c++ Öж¯Ì¬µÄ¡¢ÓëÄÚ´æ·ÖÅäÓйصÄÎÊÌâ¡£ÔÚ׫д±¾ÎÄʱ£¬yamd µÄ×îа汾Ϊ 0.32¡£ÇëÏÂÔØ yamd-0.32.tar.gz£¨Çë²ÎÔIJο¼×ÊÁÏ£©¡£Ö´ÐРmake ÃüÁîÀ´¹¹½¨³ÌÐò£»È»ºóÖ´ÐРmake install ÃüÁî°²×°³ÌÐò²¢ÉèÖù¤¾ß¡£  

¡¡¡¡Ò»µ©ÄúÏÂÔØÁË yamd Ö®ºó£¬ÇëÔÚ test1.c ÉÏʹÓÃËü¡£Çëɾ³ý #include memwatch.h ²¢¶Ô makefile ½øÐÐÈçÏÂССµÄÐ޸ģºÊ¹Óàyamd µÄ test1¡£  

ÏÂÒ»Ò³
±¾ÎĹ²5Ò³: µÚ [1] [2] [3] [4] [5] Ò³

ÔðÈα༭£ºgzu521

µçÄÔ¿ÎÌ÷ÖÀà
Windows 2000½Ì³Ì
Windows XP½Ì³Ì
Windows 2003½Ì³Ì
Windows Vista½Ì³Ì
LINUX½Ì³Ì
Èí¼þ½Ìѧ
°ì¹«Èí¼þ
Ó²¼þDIY
·ÖÀàÍÆ¼öÐÅÏ¢
¸ü¶à...
´óÀà×îÐÂÎÄÕÂ
¸ü¶à...