[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)ºÍÖ¸Áîµ¥²½(È
Ïà¹ØÎĵµ£º
gcc£¬gdbµÄʹÓÃ
×÷Õߣºzccst
ÉÏÖÜÎåÔÚͼÊé¹Ý½èÁËÒ»±¾¡¶LinuxÈí¼þ¹¤³Ìʦ£¨CÓïÑÔ£©ÊµÓý̡̳·£¬ÈÃÎÒÊÕ»ñÁ¼¶à¡£²»½ö½öÊÇÊéÖеÄ֪ʶ£¬»¹ÓжÔ֪ʶÌåϵºÍ¼Ü¹¹ÈÏʶµÄÉîÈë¡£
LinuxÏÂC¿ª·¢£º
1£¬gcc,gdbµÄʹÓá£
2£¬MakefileÎļþµÄ±àд¡£
3£¬ÏµÍ³º¯ÊýµÄʹÓÃ
4£¬Îļþ²Ù×÷
5£¬´®ÐÐͨÐÅ
6£¬½ø³Ì¿ØÖÆ
7£¬½ø³Ì¼ ......
ÊÖÍ·Óиöep9315µÄ°å£¬½ñÌìͻȻÏëÆðÅÜÒ»ÏÂadslÉÏÍø¡£ÍíÉÏ»ØÀ´¾Í¿ªÊ¼¸ã¡£
´Ó10µãµ½ÏÖÔÚ£¬ÖÕÓÚÄܹ»ÅÜÆðÀ´¡£
¸ø´ó¼Ò½è¼øÒ»Ï¡£
1.±àÒëÄںˣ¬°ÑpppµÄÄÇЩѡÏîÑ¡ÉÏ¡£ (ÎÒÓÃ2.6.8.1µÄkernel£¬cirrus µÄpatch)
2.libpcap-0.9.1 Õâ¸ö°üÊÇpppdÐèÒªµÄ¡£
./configure CC=arm-linux-gcc CFLAGS=-msoft-float --target=arm-linu ......
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 ......
linuxÐźŻúÖÆÔ¶Ô¶±ÈÏëÏóµÄ¸´ÔÓ£¬±¾ÎÄÁ¦ÕùÓÃ×î¶ÌµÄƪ·ù£¬¶Ô¸Ã»úÖÆ×öÁËÉîÈëϸÖµķÖÎö¡£¶ÁÕß¿ÉÒÔÏȶÁÒ»ÏÂÐźÅÓ¦ÓÃʵÀý£¨ÔÚÐźţ¨Ï£©ÖУ©£¬ÕâÑù¿ÉÒÔ¶ÔÐźŷ¢ËÍÖ±µ½ÏàÓ¦µÄ´¦Àíº¯ÊýÖ´ÐÐÍê±ÏÕâÒ»¹ý³ÌÓиö´óÖµÄÓ¡Ïó¡£±¾Îľ¡Á¿¸ø³öÁ˽Ïк¯ÊýµÄÓ¦ÓÃʵÀý£¬×ÅÖØËµÃ÷ÕâЩµÄ¹¦ÄÜ¡£
Ò»¡¢Ðźż°ÐźÅÀ´Ô´
Ðźű¾ÖÊ
Ð ......