FreeBSD ÇÚµåºÏ : Ä¿³Î µð¹ö±ë : KGDB¸¦ ÀÌ¿ëÇÑ Ä¿³Î Å©·¡½Ã ´ýÇÁ(crash dump) µð¹ö±ë
Previous: Ä¿³Î µð¹ö±ë
Next: DDD·Î Å©·¡½Ã ´ýÇÁ µð¹ö±ëÇϱâ

22.1. KGDB¸¦ ÀÌ¿ëÇÑ Ä¿³Î Å©·¡½Ã ´ýÇÁ(crash dump) µð¹ö±ë

ÀÌ Àå¿¡¼­´Â Å©·¡½Ã ´ýÇÁ·ÎºÎÅÍ Ä¿³Î µð¹ö±ë ÀÛ¾÷À» Çϱâ À§ÇÑ ¸í·ÉµéÀ» ¼³¸íÇÕ´Ï´Ù. ÀÌ ¸í·ÉµéÀ» »ç¿ëÇϱâ À§Çؼ­´Â Å©·¡½Ã ´ýÇÁ¸¦ À§ÇÑ ÃæºÐÇÑ µð½ºÅ© ¿ë·®ÀÌ ÇÊ¿äÇÕ´Ï´Ù. ¸¸¾à ¿©·¯ °³ÀÇ ½º¿Ò ÆÄƼ¼ÇÀÌ ÀÖ´Â ½Ã½ºÅÛ¿¡¼­ ù¹ø° ½º¿Ò ÆÄƼ¼ÇÀÌ ´ýÇÁ¸¦ ÀúÀåÇϱ⿡ ¿ë·®ÀÌ ÀÛÀ» ¶§¿¡´Â ´Ù¸¥ ÆÄƼ¼Ç¿¡ ´ýÇÁ¸¦ ¹Þµµ·Ï Ä¿³Î ¼³Á¤À» º¯°æÇϰųª(config kernel ¶óÀÎ), dumpon(8) ¸í·ÉÀ» »ç¿ëÇÏ¿© ´Ù¸¥ ÆÄƼ¼ÇÀ» ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. dumpon(8) ¸í·ÉÀ» »ç¿ëÇÒ °æ¿ì, /etc/rc.confÀÇ dumpdev º¯¼ö¿¡ ¼³Á¤ÇØÁÖ´Â °ÍÀÌ Á¦ÀÏ ÁÁÀº ¹æ¹ýÀÔ´Ï´Ù. ÀϹÝÀûÀ¸·Î /etc/fstab ÆÄÀÏ¿¡ ÁöÁ¤µÇ¾î ÀÖ´Â ½º¿Ò ÀåÄ¡µé Áß Çϳª¸¦ ÁöÁ¤ÇØÁÖ¸é µË´Ï´Ù. Å×ÀÌÇÁ¿Í °°ÀÌ ½º¿Ò ÀåÄ¡°¡ ¾Æ´Ñ ´Ù¸¥ ÀåÄ¡¿¡ ´ýÇÁÇÏ´Â °ÍÀº ÇöÀç Áö¿øµÇÁö ¾Ê½À´Ï´Ù. config -g¸¦ ½ÇÇàÇÏ¿© Ä¿³ÎÀ» ¼³Á¤ÇϽñ⠹ٶø´Ï´Ù. FreeBSD Ä¿³Î ¼³Á¤¿¡ °üÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº FreeBSD Ä¿³Î ¼³Á¤À» Âü°íÇϽñ⠹ٶø´Ï´Ù.

Ä¿³Î¿¡ ¾î´À ÀåÄ¡·Î ´ýÇÁÇÒ °ÍÀÎÁö ÁöÁ¤ÇØÁÖ±â À§Çؼ­ dumpon(8) ¸í·ÉÀ» »ç¿ëÇÕ´Ï´Ù (ÁÖ: swapon(8) ¸í·ÉÀ» ÅëÇØ ¾î¶² ÆÄƼ¼ÇÀ» ½º¿Ò ¿µ¿ªÀ¸·Î »ç¿ëÇÒ °ÍÀÎÁö ¼³Á¤ÇÑ ´ÙÀ½¿¡ »ç¿ëÇØ¾ß ÇÕ´Ï´Ù). ÀϹÝÀûÀ¸·Î /etc/rc.conf¿Í /etc/rc ÆÄÀÏ¿¡ ³ª¶õÈ÷ ¼³Á¤µË´Ï´Ù. ´Ù¸¥ ¹æ¹ýÀ¸·Î, Ä¿³Î ¼³Á¤ ÆÄÀÏ ³»ÀÇ 'config' ¶óÀÎÀÇ 'dump' Àý¿¡ ´ýÇÁ ÀåÄ¡¸¦ Çϵå ÄÚµùÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ´Â ±ÇÀåµÇÁö ¾Ê´Â ¹æ¹ýÀ̸ç, ºÎÆà µµÁß¿¡ ¼Õ»óµÈ Ä¿³ÎÀ¸·ÎºÎÅÍ Å©·¡½Ã ´ýÇÁ¸¦ ¾ò°íÀÚ ÇÒ ¶§¸¸ »ç¿ëÇÏ´Â ÆíÀÌ ¹Ù¶÷Á÷ÇÕ´Ï´Ù.

ÁÖ: ÀÌÁ¦ºÎÅÍ `kgdb' ¶ó´Â ¿ë¾î´Â 'Ä¿³Î µð¹ö±ë ¸ðµå'¿¡¼­ ½ÇÇàµÇ´Â gdb¸¦ ÀǹÌÇÕ´Ï´Ù. gdb¸¦ -k ¿É¼Ç°ú °°ÀÌ ½ÇÇà ½ÃÅ°°Å³ª, kgdb¶ó´Â À̸§À¸·Î ¸µÅ©½ÃÄÑ ½ÇÇà½Ãų ¼ö ÀÖ½À´Ï´Ù. ±×·¯³ª kgdb¶ó´Â À̸§Àº ±âº»À¸·Î Á¦°øµÈ °ÍÀÌ ¾Æ´Ï¸ç, GNU ±¸¼º¿øµéÀº ÀÚ½ÅÀÇ ÇÁ·Î±×·¥µéÀÌ ¼­·Î ´Ù¸¥ À̸§À¸·Î ºÒ¸®¿ì¸é¼­ ´Ù¸¥ ±â´ÉÀ» Á¦°øÇÏ´Â °ÍÀ» ¿øÄ¡ ¾Ê½À´Ï´Ù. ÀÌ·± Ư¡Àº ÇâÈÄ ¸±¸®Áîµé¿¡¼­´Â »ç¶óÁú °ÍÀÔ´Ï´Ù.

Ä¿³Î ºôµå ½Ã kernel.debug µîÀÇ À̸§À¸·Î º¹»çº»À» Çϳª ¸¸µç ´ÙÀ½, Ä¿³Î ¿øº»¿¡ ´ëÇÏ¿© strip -d ¸í·ÉÀ» ¼öÇàÇÏ°í Á¤»óÀûÀ¸·Î ÀνºÅçÇÕ´Ï´Ù. ½Éº¼ Å×À̺íÀ» »èÁ¦ÇÏÁö ¾ÊÀº Ä¿³Î·Î ÀνºÅçÀÌ °¡´ÉÇÏÁö¸¸, ¸î¸î ÇÁ·Î±×·¥¿¡ ´ëÇÑ ½Éº¼ Å×ÀÌºí °Ë»ö ½Ã°£ÀÌ ½É°¢ÇÏ°Ô Áõ°¡ÇÏ°Ô µÇ°í, ºÎÆà ½Ã ½Éº¼ Å×À̺íÀ» Æ÷ÇÔÇÑ Àüü Ä¿³ÎÀÌ ·ÎµùµÇ¾î ³ªÁß¿¡ ½º¿ÒÇÒ ¼ö ¾ø°Ô µÇ¸ç, ¼ö¸Þ°¡ ¹ÙÀÌÆ®ÀÇ ¹°¸®Àû ¸Þ¸ð¸®°¡ ³¶ºñµË´Ï´Ù.

ºÎÆ® ÇÁ·ÒÇÁÆ®¿¡¼­ »õ·Î¿î Ä¿³Î À̸§À» ŸÀÌÇÎÇÏ¿© ºÎÆÃÇÏ´Â ½ÄÀ¸·Î »õ·Î¿î Ä¿³ÎÀ» Å×½ºÆ®ÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×·¯³ª ´Ù½Ã ½Ã½ºÅÛÀ» Á¤»óÀûÀ¸·Î µ¿ÀÛ½ÃÅ°±æ ¿øÇÒ ¶§¿¡´Â, ºÎÆ® ÇÁ·ÒÇÁÆ®¿¡¼­ -s Ç÷¢À» ÀÌ¿ëÇÏ¿© ´ÜÀÏ À¯Àú »óÅ·ΠºÎÆÃÇÕ´Ï´Ù. ±× ÀÌÈĺÎÅÍ ´ÙÀ½ÀÇ ÀýÂ÷¸¦ ¼öÇàÇÕ´Ï´Ù.

  fsck -p
  mount -a -t ufs       # so your file system for /var/crash is writable
  savecore -N /kernel.panicked /var/crash
  exit                  # ...to multi-user
À§ÀÇ ¸í·ÉµéÀº savecore(8)¸¦ ÅëÇØ ´Ù¸¥ Ä¿³Î·ÎºÎÅÍ ½Éº¼ À̸§À» ÃßÃâÇÕ´Ï´Ù. ±×·¸Áö ¾ÊÀ» °æ¿ì ½Éº¼À» ¾ò¾î³»´Â ±âº» ´ë»óÀ¸·Î ÇöÀç µ¿ÀÛÇÏ°í ÀÖ´Â Ä¿³ÎÀÌ »ç¿ëµÇ¸ç, Å©·¡½Ã ´ýÇÁ¿¡¼­ÀÇ Ä¿³Î ½Éº¼°ú ÇöÀç µ¿ÀÛ ÁßÀÎ Ä¿³Î ½Éº¼Àº ´Ù¸£±â ¶§¹®¿¡ ÀüÇô ¾µ¸ð°¡ ¾ø¾îÁö°Ô µË´Ï´Ù.

Å©·¡½Ã ´ýÇÁ°¡ ¹ß»ýÇϸé, /sys/compile/WHATEVER µð·ºÅ丮·Î °¡¼­ kgdb¸¦ ½ÇÇà½Ãŵ´Ï´Ù. kgdb¿¡¼­ ´ÙÀ½À» ¼öÇàÇÕ´Ï´Ù.

  symbol-file kernel.debug
  exec-file /var/crash/kernel.0
  core-file /var/crash/vmcore.0
À̷νá, ´Ù¸¥ ÀÏ¹Ý ÇÁ·Î±×·¥À» µð¹ö±ëÇÒ ¶§¿Í °°ÀÌ Ä¿³Î ¼Ò½º¸¦ ÀÌ¿ëÇÏ¿© Å©·¡½Ã ´ýÇÁ¸¦ µð¹ö±ëÇÒ ¼ö ÀÖ°Ô µË´Ï´Ù.

¾Æ·¡¿¡ ±× °úÁ¤À» ¼³¸íÇØÁÖ´Â kgdb ¼¼¼ÇÀÇ ½ºÅ©¸³Æ® ·Î±×°¡ ÀÖ½À´Ï´Ù. ±æÀÌ°¡ ±ä ¶óÀÎÀº °¡µ¶¼ºÀ» ³ôÀ̱â À§ÇØ ´ÙÀ½ ¶óÀÎÀ¸·Î ³»·È½À´Ï´Ù. ±×¸®°í °¢ ÁÙ¸¶´Ù ÁÙ¹øÈ£¸¦ ´Þ¾Ò½À´Ï´Ù. ¾Æ·¡ÀÇ ·Î±×´Â ½ÇÁ¦ pcvt ÄÜ¼Ö µå¶óÀ̹ö °³¹ß °úÁ¤ÀÇ ¿À·ù ÃßÀû ÀÛ¾÷ÀÔ´Ï´Ù.

   1:Script started on Fri Dec 30 23:15:22 1994
   2:uriah # cd /sys/compile/URIAH
   3:uriah # kgdb kernel /var/crash/vmcore.1 
   4:Reading symbol data from /usr/src/sys/compile/URIAH/kernel...done.
   5:IdlePTD 1f3000
   6:panic: because you said to!
   7:current pcb at 1e3f70
   8:Reading in symbols for ../../i386/i386/machdep.c...done.
   9:(kgdb) where
  10:#0  boot (arghowto=256) (../../i386/i386/machdep.c line 767)
  11:#1  0xf0115159 in panic ()
  12:#2  0xf01955bd in diediedie () (../../i386/i386/machdep.c line 698)
  13:#3  0xf010185e in db_fncall ()
  14:#4  0xf0101586 in db_command (-266509132, -266509516, -267381073)
  15:#5  0xf0101711 in db_command_loop ()
  16:#6  0xf01040a0 in db_trap ()
  17:#7  0xf0192976 in kdb_trap (12, 0, -272630436, -266743723)
  18:#8  0xf019d2eb in trap_fatal (...)
  19:#9  0xf019ce60 in trap_pfault (...)
  20:#10 0xf019cb2f in trap (...)
  21:#11 0xf01932a1 in exception:calltrap ()
  22:#12 0xf0191503 in cnopen (...)
  23:#13 0xf0132c34 in spec_open ()
  24:#14 0xf012d014 in vn_open ()
  25:#15 0xf012a183 in open ()
  26:#16 0xf019d4eb in syscall (...)
  27:(kgdb) up 10
  28:Reading in symbols for ../../i386/i386/trap.c...done.
  29:#10 0xf019cb2f in trap (frame={tf_es = -260440048, tf_ds = 16, tf_\
  30:edi = 3072, tf_esi = -266445372, tf_ebp = -272630356, tf_isp = -27\
  31:2630396, tf_ebx = -266427884, tf_edx = 12, tf_ecx = -266427884, tf\
  32:_eax = 64772224, tf_trapno = 12, tf_err = -272695296, tf_eip = -26\
  33:6672343, tf_cs = -266469368, tf_eflags = 66066, tf_esp = 3072, tf_\
  34:ss = -266427884}) (../../i386/i386/trap.c line 283)
  35:283                             (void) trap_pfault(&frame, FALSE);
  36:(kgdb) frame frame->tf_ebp frame->tf_eip
  37:Reading in symbols for ../../i386/isa/pcvt/pcvt_drv.c...done.
  38:#0  0xf01ae729 in pcopen (dev=3072, flag=3, mode=8192, p=(struct p\
  39:roc *) 0xf07c0c00) (../../i386/isa/pcvt/pcvt_drv.c line 403)
  40:403             return ((*linesw[tp->t_line].l_open)(dev, tp));
  41:(kgdb) list
  42:398        
  43:399             tp->t_state |= TS_CARR_ON;
  44:400             tp->t_cflag |= CLOCAL;  /* cannot be a modem (:-) */
  45:401     
  46:402     #if PCVT_NETBSD || (PCVT_FREEBSD >= 200)
  47:403             return ((*linesw[tp->t_line].l_open)(dev, tp));
  48:404     #else
  49:405             return ((*linesw[tp->t_line].l_open)(dev, tp, flag));
  50:406     #endif /* PCVT_NETBSD || (PCVT_FREEBSD >= 200) */
  51:407     }
  52:(kgdb) print tp
  53:Reading in symbols for ../../i386/i386/cons.c...done.
  54:$1 = (struct tty *) 0x1bae
  55:(kgdb) print tp->t_line
  56:$2 = 1767990816
  57:(kgdb) up
  58:#1  0xf0191503 in cnopen (dev=0x00000000, flag=3, mode=8192, p=(st\
  59:ruct proc *) 0xf07c0c00) (../../i386/i386/cons.c line 126)
  60:       return ((*cdevsw[major(dev)].d_open)(dev, flag, mode, p));
  61:(kgdb) up
  62:#2  0xf0132c34 in spec_open ()
  63:(kgdb) up
  64:#3  0xf012d014 in vn_open ()
  65:(kgdb) up
  66:#4  0xf012a183 in open ()
  67:(kgdb) up
  68:#5  0xf019d4eb in syscall (frame={tf_es = 39, tf_ds = 39, tf_edi =\
  69: 2158592, tf_esi = 0, tf_ebp = -272638436, tf_isp = -272629788, tf\
  70:_ebx = 7086, tf_edx = 1, tf_ecx = 0, tf_eax = 5, tf_trapno = 582, \
  71:tf_err = 582, tf_eip = 75749, tf_cs = 31, tf_eflags = 582, tf_esp \
  72:= -272638456, tf_ss = 39}) (../../i386/i386/trap.c line 673)
  73:673             error = (*callp->sy_call)(p, args, rval);
  74:(kgdb) up
  75:Initial frame selected; you cannot go up.
  76:(kgdb) quit
  77:uriah # exit
  78:exit
  79:
  80:Script done on Fri Dec 30 23:18:04 1994
´ÙÀ½Àº À§ ½ºÅ©¸³Æ®¿¡ ´ëÇÑ ¼³¸íÀÔ´Ï´Ù.

line 6:

À§ ½ºÅ©¸³Æ®´Â DDB(¾Æ·¡ ÂüÁ¶) ³»¿¡¼­ ¾òÀº ´ýÇÁÀ̸ç, ``because you said to!''´Â ÆдÐ(panic) ¸Þ½ÃÁöÀÌ¸ç ´Ù¼Ò ±ä ½ºÅà ÃßÀû(trace)À» º¸¿©ÁÝ´Ï´Ù. DDB·Î ¿Å°Ü°£ ÀÌÀ¯´Â Ä¿³ÎÀÌ ÆäÀÌÁö ÆúÆ® Æ®·¦¿¡ ºüÁ³±â ¶§¹®ÀÔ´Ï´Ù.

line 20:

½ºÅà ÃßÀû¿¡¼­ trap() ÇÔ¼öÀÇ À§Ä¡ÀÔ´Ï´Ù.

line 36:

»õ·Î¿î ½ºÅà ÇÁ·¹ÀÓÀ» °­Á¦·Î »ç¿ëÇÏ´Â ¹æ¹ýÀÔ´Ï´Ù. ÇöÀç´Â ´õ ÀÌ»ó ÇÊ¿ä·Î ÇÏÁö ¾Ê½À´Ï´Ù. Æ®·¦¿¡ ÀâÈù °æ¿ì¶ó ÇÏ´õ¶óµµ ½ºÅà ÇÁ·¹ÀÓÀÌ ÇöÀç ¿Ã¹Ù¸¥ À§Ä¡¸¦ °¡¸®Å°°í ÀÖ´Ù°í °¡Á¤ÇÕ´Ï´Ù. (Àú´Â <g> ¿¡ À¯¿ëÇÑ ÄÚ¾î ´ýÇÁ¸¦ °¡Áö°í ÀÖÁö ¾Ê½À´Ï´Ù. Á¦ Ä¿³ÎÀº ²Ï ¿À·£ ½Ã°£ µ¿¾È Æдп¡ ºüÁø ÀûÀÌ ¾ø¾ú½À´Ï´Ù.) ¼Ò½º ÄÚµåÀÇ 403ÁÙ¿¡¼­ º¼ ¼ö ÀÖ´Â ¹Ù¿Í °°ÀÌ, ``tp''¸¦ °¡¸®Å°´Â Æ÷ÀÎÅÍ°¡ ¾ûÄװųª, ¹è¿­ ¾ï¼¼½º¿¡¼­ °æ°è¸¦ ³Ñ¾î¼¹À» °¡´É¼ºÀÌ ³ô½À´Ï´Ù.

line 52:

Æ÷ÀÎÅÍ°¡ Àǽɽº·´Áö¸¸, ¿Ã¹Ù¸¥ ÁÖ¼Ò¸¦ °¡¸®Å°°í ÀÖ½À´Ï´Ù.

line 56:

±×·¯³ª, ºÐ¸íÈ÷ Æ÷ÀÎÅÍ´Â ¾µ¸ð ¾ø´Â ¿µ¿ªÀ» °¡¸®Å°°í ÀÖ°í, µû¶ó¼­ À̺κп¡¼­ ¿¡·¯¸¦ ã¾Æ³¾ ¼ö ÀÖ½À´Ï´Ù. (ÀÌ·± Ư¼öÇÑ Äڵ忡 ´ëÇØ Àͼ÷ÇÏÁö ¸øÇÑ ºÐµéÀ» À§ÇØ, ¿©±â¼­ tp->t_lineÀº ÄÜ¼Ö ÀåÄ¡ÀÇ ¶óÀÎ ±ÔÄ¢À» ³ªÅ¸³»´Â °ÍÀ̸ç, ÀÛÀº Á¤¼ö °ªÀ» °¡Á®¾ß ÇÏ´Â Á¡À» ¾Ë·Á µå¸³´Ï´Ù.)

22.1.1. DDD·Î Å©·¡½Ã ´ýÇÁ µð¹ö±ëÇϱâ


FreeBSD ÇÚµåºÏ : Ä¿³Î µð¹ö±ë : KGDB¸¦ ÀÌ¿ëÇÑ Ä¿³Î Å©·¡½Ã ´ýÇÁ(crash dump) µð¹ö±ë
Previous: Ä¿³Î µð¹ö±ë
Next: DDD·Î Å©·¡½Ã ´ýÇÁ µð¹ö±ëÇϱâ