[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)ºÍÖ¸Áîµ¥²½(È
Ïà¹ØÎĵµ£º
ÊÖÍ·Óиö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 ......
ÆäÖÐÓÐһЩº¯ÊýµÄ×÷ÓÃÍêÈ«Ïàͬ£¬Ö»ÊDzÎÊý²»Í¬¡££¨¿ÉÄܺܶàÊìϤC++ÅóÓÑÂíÉϾÍÄÜÁªÏëÆðº¯ÊýÖØÔØ£¬µ«ÊDZðÍüÁËLinuxºËÐÄÊÇÓÃCÓïÑÔдµÄ£¬ËùÒÔÖ»
ÄÜÈ¡³É²»Í¬µÄº¯ÊýÃû£©¡£»¹ÓÐһЩº¯ÊýÒѾ¹ýʱ£¬±»ÐµĸüºÃµÄº¯ÊýËù´úÌæÁË£¨gccÔÚÁ´½ÓÕâЩº¯Êýʱ»á·¢³ö¾¯¸æ£©£¬µ«ÒòΪ¼æÈݵÄÔÒò»¹±£Áô×Å£¬ÕâЩº¯ÊýÔÚǰ
Ãæ±êÉÏ“*”ºÅÒÔÊ ......
²ÉÓù²ÏíÄÚ´æÍ¨ÐŵÄÒ»¸öÏÔ¶øÒ×¼ûµÄºÃ´¦ÊÇЧÂʸߣ¬ÒòΪ½ø³Ì¿ÉÒÔÖ±½Ó¶ÁдÄڴ棬¶ø²»ÐèÒªÈκÎÊý¾ÝµÄ¿½±´¡£¶ÔÓÚÏñ¹ÜµÀºÍÏûÏ¢¶ÓÁеÈͨÐÅ·½Ê½£¬ÔòÐèÒªÔÚÄÚ
ºËºÍÓû§¿Õ¼ä½øÐÐËĴεÄÊý¾Ý¿½±´£¬¶ø¹²ÏíÄÚ´æÔòÖ»¿½±´Á½´ÎÊý¾Ý[1]£ºÒ»´Î´ÓÊäÈëÎļþµ½¹²ÏíÄÚ´æÇø£¬ÁíÒ»´Î´Ó¹²ÏíÄÚ´æÇøµ½Êä³öÎļþ¡£Êµ¼ÊÉÏ£¬½ø³ÌÖ®¼äÔÚ¹²
ÏíÄÚ´æÊ±£¬²¢²»×ÜÊ ......
64λ linux ±àÒëÁ´½Ó´í¿âµÄÎÊÌâ
ÔÚ64λ»úÆ÷ÏÂÃæ±àÒëÈí¼þµÄʱºò£¬¾³£»áÓöµ½±àÒëµÄʱºòÐèÒªÁ´½Ó64λµÄ¿â£¬µ«ÊDZàÒëʱÕÒµÄÈ´ÊÇ32λµÄ¿â£¬¿ÉÒÔͨ¹ýÈçÏÂµÄ°ì·¨Ç¿ÖÆ±àÒë³ÌÐòÈ¥ÕÒ64λµÄ¿â
LDFLAGS="-L/usr/lib64 -L/lib64" \
ÔÚÅäÖÃʱ¼ÓÉÏÕâôһ¸öÑ¡Ïî¼´¿É¡£
......