¸®´ª½º °ü·Ã °­Á¶õ

HomePage Backward Forward Post Reply List
Delete Modify
  Á¦¸ñ   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ÇØ¾ß ÇÒ±î?

´ÙÀ½¿¡ ¼³¸íÇÏ°Ú´Ù. ±â´ëÇØ ÁÖ¼¼¿ä.




HomePage Backward Forward Post Reply List
1998 by swindler