[Pthread] Linux³ÌÐòµ÷ÊԵĻùʯ(¶þ)
3. GDBµÄʵÏÖ
GDBÊÇGNU·¢²¼µÄÒ»¸öÇ¿´óµÄ³ÌÐòµ÷ÊÔ¹¤¾ß£¬ÓÃÒÔµ÷ÊÔC/C++³ÌÐò¡£¿ÉÒÔʹ³ÌÐòÔ±ÔÚ³ÌÐòÔËÐеÄʱºò¹Û²ì³ÌÐòÔÚÄÚ´æ/¼Ä´æÆ÷ÖеÄʹÓÃÇé¿ö¡£ËüµÄʵÏÖÒ²ÊÇ»ùÓÚptraceϵͳµ÷ÓÃÀ´Íê³ÉµÄ¡£
Æä
ÔÀíÊÇÀûÓÃptraceϵͳµ÷Óã¬ÔÚ±»µ÷ÊÔ³ÌÐòºÍgdbÖ®¼ä½¨Á¢¸ú×Ù¹ØÏµ¡£È»ºóËùÓз¢Ë͸ø±»µ÷ÊÔ³ÌÐòµÄÐźÅ(³ýSIGKILL)¶¼»á±»gdb½Ø»ñ£¬gdb
¸ù¾Ý½Ø»ñµÄÐźţ¬²é¿´±»µ÷ÊÔ³ÌÐòÏàÓ¦µÄÄÚ´æµØÖ·£¬²¢¿ØÖƱ»µ÷ÊԵijÌÐò¼ÌÐøÔËÐС£GDB³£ÓõÄʹÓ÷½·¨ÓжϵãÉèÖú͵¥²½¸ú×Ù£¬½ÓÏÂÀ´ÎÒÃÇÀ´·ÖÎöÒ»ÏÂËûÃÇÊÇÈç
ºÎʵÏֵġ£
3.1 ½¨Á¢µ÷ÊÔ¹ØÏµ
ÓÃgdbµ÷ÊÔ³ÌÐò£¬¿ÉÒÔÖ±½Ógdb ./test,Ò²¿ÉÒÔgdb <pid>(testµÄ½ø³ÌºÅ)¡£Õâ¶ÔÓ¦×ÅʹÓÃptrace½¨Á¢¸ú×Ù¹ØÏµµÄÁ½ÖÖ·½Ê½:
1)fork: ÀûÓÃfork+execveÖ´Ðб»²âÊԵijÌÐò£¬×Ó½ø³ÌÔÚÖ´ÐÐexecve֮ǰµ÷ÓÃptrace(PTRACE_TRACEME)£¬½¨Á¢ÁËÓ븸½ø³Ì(debugger)µÄ¸ú×Ù¹ØÏµ¡£ÈçÎÒÃÇÔÚ·ÖÎöstraceʱËùʾÒâµÄ³ÌÐò¡£
2)attach:
debugger¿ÉÒÔµ÷ÓÃptrace(PTRACE_ATTACH£¬pid,...)£¬½¨Á¢×Ô¼ºÓë½ø³ÌºÅΪpidµÄ½ø³Ì¼äµÄ¸ú×Ù¹ØÏµ¡£¼´ÀûÓÃ
PTRACE_ATTACH£¬Ê¹×Ô¼º±ä³É±»µ÷ÊÔ³ÌÐòµÄ¸¸½ø³Ì(ÓÃps¿ÉÒÔ¿´µ½)¡£ÓÃattach½¨Á¢ÆðÀ´µÄ¸ú×Ù¹ØÏµ£¬¿ÉÒÔµ÷ÓÃptrace
(PTRACE_DETACH£¬pid,...)À´½â³ý¡£×¢Òâattach½ø³ÌʱµÄȨÏÞÎÊÌ⣬ÈçÒ»¸ö·ÇrootȨÏ޵Ľø³ÌÊDz»ÄÜattachµ½Ò»¸ö
root½ø³ÌÉϵġ£
3.2 ¶ÏµãÔÀí
¶ÏµãÊÇ´ó¼ÒÔÚµ÷ÊÔ³ÌÐòʱ³£ÓõÄÒ»¸ö¹¦ÄÜ,Èçbreak linenumber£¬µ±Ö´Ðе½linenumberÄÇÒ»ÐеÄʱºò±»µ÷ÊÔ³ÌÐò»áÍ£Ö¹£¬µÈ´ýdebuggerµÄ½øÒ»²½²Ù×÷¡£
¶ÏµãµÄʵÏÖÔÀí£¬¾ÍÊÇÔÚÖ¸¶¨µÄλÖòåÈë¶ÏµãÖ¸Áµ±±»µ÷ÊԵijÌÐòÔËÐе½¶ÏµãµÄʱºò£¬²úÉúSIGTRAPÐźš£¸ÃÐźű»gdb²¶»ñ²¢½øÐжϵãÃüÖÐÅж¨£¬µ±gdbÅжϳöÕâ´ÎSIGTRAPÊǶϵãÃüÖÐÖ®ºó¾Í»áתÈëµÈ´ýÓû§ÊäÈë½øÐÐÏÂÒ»²½´¦Àí£¬·ñÔò¼ÌÐø¡£
¶ÏµãµÄÉèÖÃÔÀí: ÔÚ³ÌÐòÖÐÉèÖöϵ㣬¾ÍÊÇÏȽ«¸ÃλÖõÄÔÀ´µÄÖ¸Áî±£´æ£¬È»ºóÏò¸ÃλÖÃдÈëint 3¡£µ±Ö´Ðе½int 3µÄʱºò£¬·¢ÉúÈíÖжϣ¬ÄÚºË»á¸ø×Ó½ø³Ì·¢³öSIGTRAPÐźţ¬µ±È»Õâ¸öÐźŻᱻת·¢¸ø¸¸½ø³Ì¡£È»ºóÓñ£´æµÄÖ¸ÁîÌæ»»int3,µÈ´ý»Ö¸´ÔËÐС£
¶ÏµãÃüÖÐÅж¨:gdb°ÑËùÓеĶϵãλÖö¼´æ·ÅÔÚÒ»¸öÁ´±íÖУ¬ÃüÖÐÅж¨¼´°Ñ±»µ÷ÊÔ³ÌÐòµ±Ç°Í£Ö¹µÄλÖúÍÁ´±íÖеĶϵãλÖýøÐбȽϣ¬¿´ÊǶϵã²úÉúµÄÐźţ¬»¹ÊÇÎÞ¹ØÐźš£
3.3 µ¥²½¸ú×ÙÔÀí
µ¥²½¸ú×Ù¾ÍÊÇÖ¸ÔÚµ÷ÊÔ³ÌÐòµÄʱºò£¬ÈóÌÐòÔËÐÐÒ»ÌõÖ¸Áî/Óï¾äºó¾Íͣϡ£GDBÖг£ÓõÄÃüÁîÓÐnext, step, nexti, stepi¡£µ¥²½¸ú×ÙÓÖ³£·ÖΪÓï¾äµ¥²½(next, step)ºÍÖ¸Áîµ¥²½(È
Ïà¹ØÎĵµ£º
The physical memory map for Linux is completely independent from the virtual map and is designed to maximize contiguous space. Given that the kernel image will always be at the start of DRAM, the Linux kernel maximizes contiguous space by allocating runtime memory from the end of physical DRAM movin ......
Õâ¸öÐéÄâÎļþϵͳÔÚÄں˿ռäºÍÓû§¿Õ¼äÖ®¼ä´ò¿ªÁËÒ»¸öͨÐÅ´°¿Ú
ÎĵµÑ¡Ïî
´òÓ¡±¾Ò³
½«´ËÒ³×÷Ϊµç×ÓÓʼþ·¢ËÍ
ÑùÀý´úÂë
¼¶±ð£º ³õ¼¶
M. Tim Jones (mtj@mtjones.com), ×ÊÉîÊ×ϯÈí¼þ¹¤³Ìʦ, Emulex
2006 Äê 4 ÔÂ 24 ÈÕ
/proc ÎļþϵͳÊÇÒ»¸öÐéÄâÎļþϵͳ£¬Í¨¹ýËü¿ÉÒÔʹÓÃÒ»ÖÖÐµķ½·¨ÔÚ Linux® Äں˿ռäºÍÓà ......
¼òµ¥µÄ˵£¬ÐźžÍÊÇÔÚÈí¼þ²ã´ÎÉ϶ÔÖжϻúÖÆµÄÒ»ÖÖÄ£Ä⣬ÊÇÒ»ÖÖÒ첽ͨÐÅ·½Ê½¡£Ëü¿ÉÒÔʵÏÖÄں˽ø³ÌºÍÓû§½ø³ÌÖ®¼äµÄ½»»¥¡£ÊµÏÖ·½Ê½ÊÇ£¬ÔÚÈκÎʱºò·¢¸ø
ijһ½ø³Ì£¬Èç¹û¸Ã½ø³ÌûÓд¦ÓÚÖ´ÐÐ̬£¬Ôò¸ÃÐźÅÓÉÄں˱£´æ£¬Ö±µ½¸Ã½ø³Ì»Ö¸´Ö´ÐÐÔÙ´«µÝ¸øËüΪֹ¡£Èç¹ûÒ»¸öÐźŽø³ÌÉèÖÃΪ×èÈû£¬Ôò¸ÃÐźŵĴ«µÝ±»ÑÓ³Ù£¬Ö±µ½
Æä×èÈû±»È¡Ïûʱ ......
Linux Ô¶³ÌµÇ¼·þÎñ£ºtelnetºÍssh
ͨ³£Çé¿öÏÂÔ¶³ÌµÇ¼ÎÒÃÇʹÓÃtelnet·þÎñ£¬Red Hat
Linux´øÓÐtelnet·þÎñÆ÷µÄÈí¼þ°ü£¬ÎÒÃÇÐèÒª°²×°telnet-serverºÍxinetdÁ½¸öÈí¼þ°ü£º
[root@rh73 ~]# rpm -ivh
/mnt/cdrom/RedHat/RPMS/telnet-server-0.17-20.i386.rpm
[root@rh73 ~]# rpm -ivh
/mnt/cdrom/RedHat/RPMS/xinetd-2.3.4-0 ......
ÔÎĵØÖ·£ºhttp://blog.csdn.net/Javadino/archive/2008/09/06/2891413.aspx
Òý×Ó:
1.ÔÚLinuxϵͳÖУ¬½ø³Ì״̬³ýÁËÎÒÃÇËùÊìÖªµÄTASK_RUNNING£¬TASK_INTERRUPTIBLE£¬TASK_STOPPEDµÈ£¬»¹ÓÐÒ»¸öTASK_TRACED¡£Õâ±íÃ÷Õâ¸ö½ø³Ì´¦ÓÚʲô״̬£¿
2.strace¿ÉÒÔ·½±ãµÄ°ïÖúÎÒÃǼǼ½ø³ÌËùÖ´ÐеÄϵͳµ÷Óã¬ËüÊÇÈçºÎ¸ú×Ùµ½½ø³ÌÖ´ÐÐµÄ ......