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

HomePage Backward Forward Post Reply List
Delete Modify
  Á¦¸ñ   GDB °­Á #2 1998/07/10 (17:14)
À̸§ ±èÈ¿¿ø
¹øÈ£ 47
Á¶È¸ 281
º»¹®
¡º¸®´ª½º Çдç-¸®´ª½º °­Á / ¿¬Àç (go LINUX)¡» 337¹ø
Á¦  ¸ñ:gdb °­ÁÂ<2>                                                 
¿Ã¸°ÀÌ:»ýüÁ¹º´(À¯¼öÇà  )    96/10/06 20:05    ÀÐÀ½:1548 °ü·ÃÀÚ·á ¾øÀ½
-----------------------------------------------------------------------------

¼­·Ð
*******
 À̹ø °­ÁÂÁÖÁ¦´Â c È­ÀÏÀÌ ¿©·¯°³ ÀÖÀ» ¶§ ¾î¶»°Ô µð¹ö±×Çϳª, ±×¸®°í,
pointer º¯¼ö¸¦ ¾î¶»°Ô º¸³Ä ¿¡ °ü½ÉÀ» ÁÖ°Ú´Ù. ±×¸®°í, MakefileÀÇ ÀÛ¼º¹ýµµ
Æ÷ÇÔ ½Ãų·Á°í ÇßÁö¸¸, ¸¶Ä§ ¸®´ª½º °­Á¶õ¿¡ automake, autoconf°­Á°¡ ÀÖ´Ù.
±×·¡¼­ º¸Åë°ú ´Þ¸® automake, autoconf°­Á¸¦ µû¶ó¼­ MakefileÀ» ¸¸µé¾ú´Ù.
¿©·¯ºÐµµ MakefileÀ» ¸¸µé¾î º¸¶ó .±â»ÝÀ» ´À³¥ °ÍÀÌ´Ù.
 ±×¸®°í,°è½ÃÆÇ  ÀÚ·á½ÇÀΰ¡? ¿©±â¿¡ source file°ú MakefileÀ» ¾ÐÃàÇÑ
score.tgz È­ÀÏÀÌ ÀÖ´Ù. ÀÌ°ÍÀ» down ¹Þ¾Æ¼­ »ç¿ëÇÏ±æ ¹Ù¶õ´Ù.

º»·Ð
*******
 ±¸¼ºµÈ È­ÀÏÀº score.c read.c write.c sample.h sample.inpÀÌ´Ù.
 ½ÇÇàÈ­ÀÏÀÌ ÇÏ´Â ÀÏÀº sample.inp¿¡ ÀúÀåµÈ data¿¡¼­
-------<sample.inp>-------------
# ¹øÈ£  À̸§  ±¹¾î  ¿µ¾î  ¼öÇÐ
"
  2    ÃÖÀ롃 100   90    50
"
--------------------------------
±¹¾î ¿µ¾î ¼öÇÐ Á¡¼ö¸¦ Àо, output file¿¡´Â ÃÑÁ¡°ú Æò±Õ°ªÀ» Ãâ·Â½ÃŲ´Ù.
runÀº ´ÙÀ½°ú °°ÀÌ ÇÑ´Ù.
-----------------------------------
score sample.inp sample.out
-----<¼³¸í>------------------------
  [¸í·É¾î] [input file name] [output file name]
-----------------------------------

 Çì´õÈ­ÀÏ¿¡ Æ÷ÇÔµÈ struct´Â ´ÙÀ½°ú °°´Ù.
---------------------------------
typedef struct score_def SCORE;

struct score_def {
       char    name[10];
       int     num, korea, math, engl, sum;
       float   aver;
       SCORE   * next;
};
-----------------------------------

±×·¯¸é, º»°ÝÀûÀ¸·Î ÀÛ¼ºµÈ cÈ­ÀÏÀ» µð¹ö±ëÇغ¸ÀÚ.
´ÙÀ½Àº score.c È­ÀÏÀ̸ç, main {}ÀÌ Æ÷ÇԵǾîÀÖ´Ù.
------------------------------------------------
    1  #include <stdio.h>
    2  #include <stdlib.h>
    3  #include "sample.h"
    4  
    5  void main(int argc, char * argv [])
    6  {
    7          FILE *  output , * input;
    8          SCORE  * score ;
    9  
   10          if(argc < 3) {
   11                  perror( " TYPE [COMMAND] [INPUT FILE] [OUTPUT FILE] \n")
   12                  exit(1);
   13          }
   14  
   15  /* °¢ »ç¶÷ÀÇ Á¡¼ö°¡ ÀúÀåµÈ input È­ÀÏÀ» ¿­¾î¼­,
   16              inputÈ­ÀÏ¿¡ ÀÖ´Â dataÀ» readÇÔ¼ö¸¦ ÀÌ¿ëÇؼ­ ÀÐ¾î µéÀδÙ. */
   17          input = fopen(argv[1],"rt");
   18          if (input == NULL) {
   19                  printf("There is an error in read input file . \n");
   20                  exit(1);
   21          }
   22  
   23          score = (SCORE *) calloc(1, sizeof(SCORE));
   24          read(input, score);
   25          fclose(input);
   26  
   27  /* output È­ÀÏÀ» ¿­°í, writeÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¿© outputÈ­ÀÏ¿¡ Ãâ·Â½ÃŲ´Ù. */
   28          output = fopen(argv[2],"wt");
   29          write(output, score);
   30          fclose(output);
   31  
   32          return;
   33  }
---<¼³¸í >----------------------------------------------------------------
 5¹ø lineÀ» º¸¸é °£´ÜÇÑ ÇÁ·Î±×·¥°ú ¸ð¾çÀÌ ´Ù¸£°Ô ³ªÅ¸³µ´Ù. Áï
void main() À̳ª int main()ÀÌ ¾Æ´Ñ, void main(int argc, char *argv[])·Î
µÇ¾î ÀÖ´Ù. ÀÌ·± ¸ð¾çÀÌ ¹«½¼ ¿ªÇÒÀ» ÇÒ±î? ¹°·Ð, libray¸¦ ã°Å³ª, ¹®¹ýÃ¥À»
º¸¸é¼­ ¹è¿ì¸é µÇ°ÚÁö¸¸, ³ª´Â gdb·Î ÀÌ¿ëÇؼ­ »ý°¢ÇØ º¸ÀÚ.
 ¿ì¼± ´ÙÀ½°ú °°ÀÌ ÇØ º¸ÀÚ.
[Ãßõ] vi »ç¿ëÀÚ´Â term(¿¹, ÇÑÅÒ)À» 2°³ ¿­¾î³õ°í, ÇÑ termÀº vi editor·Î
´Ù¸¥ termÀº gdb·Î ÀÌ¿ëÇؼ­ »ç¿ëÇϸé ÁÁ´Ù.(ÀÏÁ¾ÀÇ ÅëÇÕȯ°æ...)
----------------------------------------------------------------------
hacker:~/score-0.0/src$ gdb score
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)
---<¼³¸í>-------------------------------------------------------------
À§ÀÇ ¸ð½ÀÀº Áö³­¹ø °­Á·Π´«¿¡ Àͼ÷ÇØ Á³À» °ÍÀÌ´Ù.

----------------------------------------------------------------------
(gdb) b 10
Breakpoint 1 at 0x804864d: file score.c, line 10.
(gdb) run sample.inp sample.out
Starting program: /usr/home/ysh/score-0.0/src/score sample.inp sample.out

Breakpoint 1, main (argc=3, argv=0xbffff724) at score.c:10
10              if(argc < 3) {
(gdb)
---<¼³¸í>-----------------------------------------------------------
 score.c È­ÀÏ ³»¿¡¼­ 10¹ø° ¶óÀο¡¼­ breakpoint¸¦ Àâµµ·Ï ÇÏ°í,
½ÇÇàÀ» ½ÃÅ°ÀÚ. ½ÇÇà¸í·ÉÀº run sample.inp[ input file À̸§ÀÌ´Ù] sample.out[
output file À̸§ÀÌ´Ù] ó·³Ä£´Ù.
±×·¯¸é, ½ÇÇàÀÌ 10¹ø° ¶óÀο¡¼­ ¸ØÃá´Ù.

-----------------------------------------------------------------
(gdb) p argc
$1 = 3
(gdb) p *argv
$2 = 0xbffff80e "/usr/home/ysh/score-0.0/src/score"
(gdb) p argv[0]
$3 = 0xbffff80e "/usr/home/ysh/score-0.0/src/score"
(gdb) p argv[1]
$4 = 0xbffff830 "sample.inp"
(gdb) p argv[2]
$5 = 0xbffff83b "sample.out"
(gdb) p argv[3]
$6 = 0x0
(gdb)
---<¼³¸í>--------------------------------------------------------
Áö±Ý º¸¿©ÁØ ³»¿ëÀº main(int argc, char *argv[])¿¡ ÀÖ´Â argc¿Í argv°¡
¾î¶² °ªÀ» °¡Áö´Â Áö º¸¿©ÁØ´Ù. argc´Â argumentÀÇ °¹¼ö¸¦ ¸»ÇÏ°í,
argv´Â °¢ argumentÀÇ º¯¼ö ¸íÀÌ´Ù.
½ÇÇà ½ÃŲ ¸í·É¾î°¡ run[score] sample.inp sample.outÀ̹ǷÎ, argument
°¹¼ö°¡ 3°³ ÀÌ°í, argv[0]Àº scoreÀÌ´Ù. º¸½Ã´Ù½ÃÇÇ, directory ¸í°ú ÇÔ²²
ÀúÀåµÈ´Ù. argv[1]Àº sample.inpÀÌ°í, ....
argv[3]Àº 0x0Áï NULL Áï pointer, ÁÖ¼Ò°¡ ¾ø´Ù.
------------------------------------------------------------------

(gdb) b 24
Breakpoint 2 at 0x8048697: file score.c, line 24.
(gdb) c
Continuing.

Breakpoint 2, main (argc=3, argv=0xbffff724) at score.c:24
24              read(input, score);
(gdb) p input
$7 = (_IO_FILE *) 0x80499a8
(gdb) p *input
$8 = {_flags = -72539000, _IO_read_ptr = 0x0, _IO_read_end = 0x0,
 _IO_read_base = 0x0, _IO_write_base = 0x0, _IO_write_ptr = 0x0,
 _IO_write_end = 0x0, _IO_buf_base = 0x0, _IO_buf_end = 0x0,
 _IO_save_base = 0x0, _IO_backup_base = 0x0, _IO_save_end = 0x0,
 _markers = 0x0, _chain = 0x40085ec8, _fileno = 5, _blksize = 0,
 _offset = -1, _cur_column = 0, _unused = 0 '\000', _shortbuf = "",
 _IO_lock = {ptr = 0x0, field1 = 0, field2 = 0}}
(gdb)
---< ¼³¸í >--------------------------------------------------------
breakpoint¸¦ 24¹ø° ¶óÀÎ read(input, score);À¸·Î Á¤Çß´Ù.
c ´Â continueÀÇ ¾àÀÚ·Î ´ÙÀ½ breakpoint±îÁö ¤Ô½ÇÇàÇ϶ó´Â °ÍÀÌ´Ù.
p input Çß´õ´Ï, ÁÖ¼Ò°¡ ³ª¿Â´Ù. ±×¸®°í, struct type·Î º¸¿©ÁØ´Ù.
Àû¾îµµ inputÀÌ pointerÀÎ °ÍÀº ¾Ë ¼öÀÖ´Ù. ½ÇÁ¦·Î inputÀ» ¼±¾ðÇßÀ» ¶§,
FILE * input·Î Çß´Ù. ±×·¯¸é, pointer º¯¼öÀÇ ³»¿ëÀº ¾î¶»°Ô º¸´Â°¡?
p *( º¯¼ö¸í)ó·³ÇÏ¸é µÈ´Ù.
----------------------------------------------------------------
(gdb) p score
$9 = (SCORE *) 0x8049a00
(gdb) p *score
$10 = {name = "\000\000\000\000\000\000\000\000\000", num = 0, korea = 0,
 math = 0, engl = 0, sum = 0, aver = 0, next = 0x0}
(gdb)
---<¼³¸í >-----------------------------------------------------
 scoreµµ pointer·Î ¼±¾ðµÇ¾ú´Ù. SCORE *score;
 ½ÇÁ¦·Î p score Ä¡¸é, ¹øÁö¿Í struct type nameÀÌ ³ª¿Ô´Ù.
 ³»¿ëÀ» º¼ ¶§´Â ¾î¶»°Ô ÇÏÁö?
--------------------------------------------------------------

ÈÞ ½Ä
*********
 ÀÏ´Ü  gdb ¿¡¼­ ÆÄÁ® ³ª¿ÀÀÚ.

HomePage Backward Forward Post Reply List
1998 by swindler