¸®´ª½º °ü·Ã °Á¶õ |
---|
Á¦¸ñ | GDB °Á #1 1998/07/10 (17:13) |
À̸§ | ±èÈ¿¿ø |
¹øÈ£ | 46 |
Á¶È¸ | 313 |
º»¹® |
¡º¸®´ª½º Çдç-¸®´ª½º °Á / ¿¬Àç (go LINUX)¡» 332¹ø Á¦ ¸ñ:gdb »ç¿ë¹ý<1> ¿Ã¸°ÀÌ:»ýüÁ¹º´(À¯¼öÇà ) 96/09/29 23:03 ÀÐÀ½:2324 °ü·ÃÀÚ·á ¾øÀ½ ----------------------------------------------------------------------------- [¼µÎ : ÇÁ·Î±×·¥ µð¹ö°Å¶õ???] µð¹ö°Å¶õ ÇÁ·Î±×·¥ °³¹ß µµ±¸·Î½á, ÇÁ·Î±×·¥À» °³¹ßÇÏ´Ù°¡ ¿¡·¯°¡ ¹ß»ýÇÏ¸é ¹ß»ý À§Ä¡ ¹× ¹ß»ýÀÌÀ¯¸¦ ½±°Ô ãÀ» ¼ö ÀÖµµ·Ï µµ¿Í ÁØ´Ù. [gdb] ¸í·É ¿ä¾à ÇÁ·Î±×·¥ ½ÇÇà°ú Æ®·¹À̽º(trace)¿¡ °ü·ÃµÈ ¸í·Éµé --------------------------------------------------------- run ÇöÀçÀÇ Àμö¸¦ »ç¿ëÇÏ¿© ÇÁ·Î±×·¥À» ½ÇÇà run <args> »õ·Î¿î <Àμö>¸¦ °¡Áö°í ÇÁ·Î±×·¥À» ½ÇÇà continue ÇöÀç À§Ä¡¿¡¼ ÇÁ·Î±×·¥À» °è¼Ó ½ÇÇà½ÃŲ´Ù. (¾àÀÚ) c, cont, (dbx)return next ÇÑ ÁÙ¾¿ ½ÇÇà ½ÃŲ´Ù. ÀÌ ¶§ ÇÔ¼ö¸¦ Æ÷ÇÔÇÏ°í ÀÖÀ¸¸é ÇÔ¼ö¸¦ ¼öÇà½ÃŲ´Ù. (¾àÀÚ) n next <n> <n>ÁÙÀ» ½ÇÇà½ÃŲ´Ù. step ÇÑ ÁÙ¾¿ ½ÇÇà ½ÃŲ´Ù. ÀÌ ¶§ ÇÔ¼ö¸¦ Æ÷ÇÔÇÏ°í ÀÖÀ¸¸é ÇÔ¼ö ³»ºÎ·Î µé¾î°¡¼ ÇÑ ÁÙ¾¿ ½ÇÇàÇÑ´Ù. (¾àÀÚ) s step <n> <n>ÁÙÀ» ½ÇÇà½ÃŲ´Ù. " " break <line number> ¶óÀÎ ¹øÈ£¿¡¼ ÇÁ·Î±×·¥ ½ÇÇàÀ» ¸ØÃß°Ô ÇÑ´Ù. (dbx) stop at <line number> (¾àÀÚ) b break <ÇÔ¼ö ¸í> ÇÔ¼ö ³»ºÎÀÇ Ã¹¹ø° ¶óÀο¡¼ ÇÁ·Î±×·¥ÀÇ ½ÇÇàÀ» ¸ØÃß°ÔÇÑ´Ù. (dbx) stop in <ÇÔ¼ö¸í> quit gdb¸¦ Á¾·á ½ÃŲ´Ù. ------------------------------------------------------------ µ¥ÀÌŸ¿¡ °ü·ÃµÈ ¸í·Éµé ----------------------------------------------------------- whatis <name> ÁöÁ¤ÇÑ <º¯¼ö>¿¡ °ü·ÃµÈ Á¤º¸¸¦ º¸¿©ÁØ´Ù. print <eval> <eval>¿¡ ÁöÁ¤µÈ ½ÄÀÇ °ªÀ» º¸¿©ÁØ´Ù. (¾àÀÚ) p display ÇöÀç ÁöÁ¤µÈ display ¸í·ÉÀÇ ¸ñ·ÏÀ» º¸¿©ÁØ´Ù. (dbx) history list ÇöÀç À§Ä¡¿¡¼ ¼Ò½º ÆÄÀÏÀÇ ³»¿ëÀ» 10ÁÙ º¸¿©ÁØ´Ù. list <first>,<last> <½ÃÀÛÁÙ>°ú <³¡ÁÙ>»çÀÌÀÇ ¼Ò½ºÆÄÀÏ ³»¿ëÀ» º¸¿©ÁØ´Ù. ----------------------------------------------------------- gdb »ç¿ë¹ýÀ» ¾Ë±â À§Çؼ ¿ì¼± bug°¡ ÀÖ´Â ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏÀÚ. ~#vi test.c ---------------< test.c ³»¿ë>-------------- 1 #include <stdio.h> 2 3 main() 4 { 5 int i; 6 double j; 7 char *bug = NULL; 8 /* ´ÙÀ½Àº i/2 + i ÀÇ °ªÀ» Ãâ·Â ½ÃÅ°´Â ¹®ÀÌ´Ù. i °¡ 1 À̸é, j ´Â 1.5 °¡ µÇµµ·Ï § °ÍÀÌ´Ù. ±×·¯³ª ½ÇÁ¦·Î ±×·¸Áö ¾Ê´Ù. */ 9 for( i = 0; i < 5; i++) { 10 j = i/2 + i; 97 10 j = i/2 + i; 11 printf(" j is %lf \n", j ); 12 } /* ´ÙÀ½Àº bug º¯¼ö¿¡ hi¸¦ copyÇÏ·Á´Â °ÍÀÌ´Ù. º¯¼ö¸í bug¿¡¼ ´À³¢°ÚÁö¸¸, ÀϺηÁ bug¸¦ ¸¸µé¾ú´Ù. ¹«¾ùÀϱî ? */ 13 strcpy(bug,"hi"); 14 printf("bug is %s \n", bug); 15 16 return; 17 } --------------------------------------------- À§ÀÇ ³»¿ëÀ» ÀúÀåÇÏ°í ³ª¼, yoo:~# cc -g test.c -o test <¼³¸í>------------------ À§ ¸í·É¾î¿¡¼ cc ´Â c language¸¦ compile ÇÑ ÈÄ ½ÇÇàÈÀÏ Çü¼ºÇÒ ¶§ »ç¿ëÇÏ´Â ¸í·ÉÀ̸ç, gnu c¿¡¼´Â gcc·Î ´ëÄ¡µÉ ¼ö ÀÖ´Ù. -g option Àº Çü¼ºµÈ ½ÇÇàÈÀÏÀ» °¡Áö°í debugµÉ ¼ö ÀÖ°Ô compile ÇØ ´Þ¶ó´Â ÀÏÁ¾ÀÇ ºÎŹÇÏ´Â optionÀÌ´Ù. -o optionÀº -o µÚÀÇ ÈÀÏ À̸§À» °¡Áø ½ÇÇàÈÀÏÀ» ¸¸µé¾î ´Þ¶ó¶ó´Â °ÍÀÌ´Ù. À§ÀÇ test.c¸¦ compileÇϸé error ¸Þ¼¼Áö´Â ¾ø´Ù. ------------------------------------------------------------ yoo:~# test yoo:~# mv test a.out yoo:~# a.out j is 0.000000 j is 1.000000 j is 3.000000 j is 4.000000 j is 6.000000 Segmentation fault (core dumped) yoo:~# rm core <¼³¸í>----------------------------------------------------- test ½ÇÇàÈÀÏÀ» ½ÇÇà½ÃÄ×´õ´Ï ¾Æ¹«·± ¹ÝÀÀÀÌ ¾ø¾î¼ ±ô¦³î¶ú´Ù. ÇÊÀÚ´Â º¸Åë SGI¿¡¼ ÇÁ·Î±×·¥À» Â¥¼, ÀÌ·± Çö»óÀº óÀ½ÀÌ´Ù. ¾Æ¹¸µç, a.out·Î ¹Ù²Ù°í º¸´Ï core°¡ Çü¼ºµÇ¾ú´Ù. ±×¸®°í, j °ªÀÌ ÀÌ»óÇÏ´Ù. ----------------------------------------------------------- yoo:~# gdb a.out GDB is free software and you are welcome to distribute copies of it under certain conditions; type "show copying" to see the conditions. There is absolutely no warranty for GDB; type "show warranty" for details. GDB 4.15.1 (i486-slackware-linux), Copyright 1995 Free Software Foundation, Inc... (gdb) --<¼³¸í>------------------------------------------------------ ÀÌÁ¦ºÎÅÍ test.c ¸¦ µð¹ö±×(debug)ÇÑ´Ù. ÇÁ·Î±×·¥ Â¥´Â °Íº¸´Ù ÈξÀ Àç¹ÌÀÖ´Ù. (¾Æ½Ç¶û°¡ ¸ð¸£°Ú³×....) ¹æ±ÝÀü ½ÇÇàÈÀÏ (test)À» a.out·Î ¹Ù²Û»ç½ÇÀ» ±â¾ïÇÏÁÒ. ±×·¡¼ gdb (½ÇÇàÈÀÏ) Áï, gdb a.out·Î Ä¡¸é µÈ´Ù. BSD °è¿¿¡¼± dbx (½ÇÇàÈÀÏ) Áï, dbx a.out·Î Ä¡¸éµÈ´Ù. ----------------------------------------------------------------- (gdb) list 1 #include <stdio.h> 2 3 main() 4 { 5 int i; 6 double j; 7 char *bug = NULL; 8 9 for( i = 0; i < 5; i++) { 10 j = i/2 + i; --< ¼³¸í > ---------------------------------------------------- list´Â ¼Ò½º ³»¿ëÀ» º¸¿©ÁÝ´Ï´Ù. -------------------------------------------------------------- (gdb) list 4, 13 4 { 5 int i; 6 double j; 7 char *bug = NULL; 8 9 for( i = 0; i < 5; i++) { 10 j = i/2 + i; 11 printf(" j is %lf \n", j ); 12 } 13 --<¼³¸í> -------------------------------------------------------- list < ù¹ø° ÁÙ>, < ³¡ÁÙ> Ä¡¸é À§Ã³·³ º¸ÀÔ´Ï´Ù. --------------------------------------------------------------- (gdb) break 9 Breakpoint 1 at 0x80484b1: file test.c, line 9. (gdb) run Starting program: /root/a.out Breakpoint 1, main () at test.c:9 9 for( i = 0; i < 5; i++) { (gdb) --<¼³¸í>----------------------------------------------------- debugÇÏ·Á¸é ¿ì¼± bug°¡ ÀÖÀ»¸¸ÇÑ ¶óÀÎ ¾ÕÀ» break point·Î Àâ½À´Ï´Ù. Àú´Â for ¹®¿¡ ÀÌ»óÀÌ ÀÖ´Ù°í ÆÇ´ÜÇÏ°í 9 for( i = 0; i < 5; i++) { for¹®ÀÇ line number °¡ 9 À̹ǷÎ, break 9·Î ÇßÀ¾´Ï´Ù. ´Ù¸¥ ¿¹, ÇÔ¼ö ³»ºÎ¿¡ breakpoint¸¦ Àâ´Â ¹ýÀº ³ªÁß¿¡ ... ±×¸®±¸, run ÇßÀ¾´Ï´Ù. --------------------------------------------------------------- 9 for( i = 0; i < 5; i++) { (gdb) step 10 j = i/2 + i; (gdb) step 11 printf(" j is %lf \n", j ); (gdb) step j is 0.000000 9 for( i = 0; i < 5; i++) { (gdb) step 10 j = i/2 + i; (gdb) p i $1 = 1 (gdb) p j $2 = 0 (gdb) s 11 printf(" j is %lf \n", j ); (gdb) p j $3 = 1 (gdb) ----<¼³¸í>---------------------------------------- À§ÀÇ °æ¿ì´Â step ÀÇ ¼³¸íÀÔ´Ï´Ù. s·Î Ãĵµ µË´Ï´Ù. stepÀº ÇÑÁÙ¾¿ ½ÇÇà ½Ãŵ´Ï´Ù. i = 1 ÀÏ ¶§ j = 1 ÀÔ´Ï´Ù. ¿¹»ó ¹ÛÀÌÁÒ. Áï 10 line¿¡¼ À߸øµÈ °ÍÀÔ´Ï´Ù. ¹«¾ùÀÌ À߸øµÈ °ÍÀÎÁö´Â ¿©·¯ºÐÀÌ ±ú´ÞÀ¸½Ã°í, j = (double)i/2. + i;Çϸé Á¦´ë·Î µÉ °ÍÀÔ´Ï´Ù. -------------------------------------------------- (gdb) b 14 Breakpoint 2 at 0x80484fc: file test.c, line 14. (gdb) continue Continuing. j is 1.000000 j is 3.000000 j is 4.000000 j is 6.000000 Breakpoint 2, main () at test.c:14 14 strcpy(bug,"hi"); (gdb) ---<¼³¸í>--------------------------------------- b 14´Â 14¹ø° ¶óÀο¡¼ break point¸¦ Àâ¾Ò´Ù. ¸¸¾à dbx »ç¿ëÀÚ´Â stop at 14·Î ÇÏ¸é µÈ´Ù. continue´Â ÇÁ·Î±×·¥ ½ÇÇàÀ» ´ÙÀ½ breakpoint±îÁö °è¼Ó ½ÇÇà ½ÃÅ°´Â °ÍÀÌ´Ù. dbx »ç¿ëÀÚ´Â returnÀ» Ä¡¸é µÈ´Ù. ----------------------------------------------------------- (gdb) p bug $1 = 0x0 (gdb) s Program received signal SIGSEGV, Segmentation fault. 0x400602cf in __fpu_control () (gdb) ---<¼³¸í>------------------------------------------------- µåµð¾î core °¡ ¹ß»ýÇÏ´Â À§Ä¡·Î ¿Ô´Ù. Áï 14¹ø ¶óÀÎÀ» ½ÇÇà½ÃÄ×´õ´Ï error message°¡ º¸¿´´Ù. Áï 14¹ø° ¶óÀο¡¼ ¹ö±×°¡ ÀÖ´Â °ÍÀÌ´Ù. ¹«¾ùÀϱî? ¿ì¼± p bug(º¯¼ö bugÀÇ ³»¿ëÀ» º¸¿©¶ó)ÀÇ °á°ú°¡ 0x0ÀÌ´Ù . gdb¿¡¼± 0x0 Àº null ÀÌ´Ù´Â °ÍÀÌ´Ù. Áï ¹øÁö(address)°¡ ¾ø´Ù. ±×·¡¼, 14¹ø ¶óÀÎÀ» ½ÇÇà½ÃÅ°Àü¿¡ º¯¼ö bug¿¡ ¹øÁö¸¦ ÇÒ´ç ÇØ¾ß ÇÑ´Ù. Áï bug = (char *) calloc(1, sizeof(char)); ¸¦ ¸ÕÀú ½ÇÇà½ÃÅ°¸éµÈ´Ù. -------------------------------------------------------- (gdb) quit The program is running. Quit anyway (and kill it)? (y or n) y yoo:~# ----< ¼³¸í>------------------------------------------------- core À§Ä¡¿Í ¿Ö À߸øµÇ¾ú´ÂÁö¸¦ ã¾ÒÀ¸¸é, source¸¦ °íÃÄ¾ß ÇÑ´Ù. ±×¸®°í, ½ÇÇàÁßÀÎ gdb¿¡¼ ºüÁ®³ª¿Í¾ßÇÑ´Ù. ¼Ò±âÀÇ ¸ñÀûÀ» ´Þ¼ºÇßÀ¸´Ï±î.. ±×¸®°í, À§¿¡¼ ¾ð±ÞÇѵ¥·Î ¼öÁ¤ÇÏ°í ´Ù½Ã gdb¸¦ ½ÇÇàÇØ º¸¾Æ¶ó. ±×·¯¸é bug°¡ »ç¶óÁø ±â»ÝÀ» ´À³¥ °ÍÀÌ´Ù. ¿ìÈñÈñ (¿ôÀ½ ¼Ò¸®).. ------------------------------------------------------------ Áö±Ý±îÁø Ãʱ޼öÁØ¿¡¼ debugging Çß´Ù. ¸¸¾à source°¡ ¿©·¯°³ ÀÖ´Ù¸é, Áï ***.c ÈÀÏÀÌ ¿©·¯°³ ÀÖ´Ù¸é, ¾î¶»°Ô debuggingÇØ¾ß ÇÒ±î? ´ÙÀ½¿¡ ¼³¸íÇÏ°Ú´Ù. ±â´ëÇØ ÁÖ¼¼¿ä. |