FreeBSD ÇÚµåºÏ : Ä¿³Î µð¹ö±ë : ¿ø°Ý GDB¸¦ ÀÌ¿ëÇÑ ¿Â¶óÀÎ Ä¿³Î µð¹ö±ë
Previous: DDB¸¦ ÀÌ¿ëÇÑ ¿Â¶óÀÎ Ä¿³Î µð¹ö±ë
Next: ÄÜ¼Ö µå¶óÀ̹öÀÇ µð¹ö±ë

22.4. ¿ø°Ý GDB¸¦ ÀÌ¿ëÇÑ ¿Â¶óÀÎ Ä¿³Î µð¹ö±ë

ÀÌ ±â´ÉÀº FreeBSD 2.2 ºÎÅÍ Áö¿øÇØ¿Â °ÍÀ̸ç, ¸Å¿ì »õ·Î¿î ±â´ÉÀÔ´Ï´Ù.

GDB´Â ÀÌ¹Ì ¿À·§µ¿¾È *¿ø°Ý µð¹ö±ë*À» Áö¿øÇß½À´Ï´Ù. µð¹ö±ëÀº ½Ã¸®¾ó ¶óÀÎÀ» ÅëÇØ ¸Å¿ì °£´ÜÇÑ ÇÁ·ÎÅäÄÝÀ» »ç¿ëÇÏ¿© ÀÌ·ç¾îÁý´Ï´Ù. À§¿¡¼­ ¾ð±ÞÇß´ø ´Ù¸¥ ¹æ¹ýµé°ú ´Þ¸®, ÀÌ ÀÛ¾÷À» À§Çؼ­´Â µÎ ´ëÀÇ ½Ã½ºÅÛÀÌ ÇÊ¿äÇÕ´Ï´Ù. Çϳª´Â ¸ðµç ¼Ò½º¿Í ¸ðµç µð¹ö±ë ½Éº¼ÀÌ ´ã±ä Ä¿³Î ¹ÙÀ̳ʸ®ÀÇ º¹»çÆÇÀ» Æ÷ÇÔÇÏ´Â µð¹ö±ë ȯ°æÀ» Á¦°øÇϴ ȣ½ºÆ®ÀÌ°í, ´Ù¸¥ ÇÑ´ë´Â µð¹ö±ë Á¤º¸¸¦ ¶¼¾î³½ °°Àº Ä¿³ÎÀÌ ½ÇÇàµÇ°í ÀÖ´Â µð¹ö±ë ÇÏ°íÀÚ Çϴ ȣ½ºÆ®ÀÔ´Ï´Ù.

Ä¿³Î ¼³Á¤ ÆÄÀÏ¿¡ DDB ¸¦ Æ÷ÇÔÇÏ¿© config -g À» ½ÇÇàÇÏ°í, ÀϹÝÀûÀÎ ¹æ¹ýÀ¸·Î Ä¿³ÎÀ» ÄÄÆÄÀÏÇÕ´Ï´Ù. ±× °á°ú µð¹ö±ë Á¤º¸·Î ÀÎÇÏ¿© Å« Å©±âÀÇ ¹ÙÀ̳ʸ® ÆÄÀÏÀ» Á¦°øÇÕ´Ï´Ù. ÀÌ Ä¿³ÎÀ» Ÿ°Ù ¸Ó½ÅÀ¸·Î º¹»çÇÏ°í, strip -x ¸í·ÉÀ¸·Î µð¹ö±ë ½Éº¼À» ¶¼¾î³½ ´ÙÀ½ -d ºÎÆà ¿É¼ÇÀ» »ç¿ëÇÏ¿© ºÎÆÃÇÕ´Ï´Ù. Ÿ°Ù ¸Ó½ÅÀÇ Ã¹¹ø° ½Ã¸®¾ó ¶óÀÎÀ» µð¹ö±ë È£½ºÆ®ÀÇ ÀÓÀÇÀÇ ½Ã¸®¾ó ¶óÀο¡ ¿¬°áÇÕ´Ï´Ù. µð¹ö±ë ¸Ó½Å »ó¿¡¼­ ÄÄÆÄÀÏ µð·ºÅ丮·Î °¡¼­ gdb¸¦ ½ÇÇà½Ãŵ´Ï´Ù.

% gdb -k kernel
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.16 (i386-unknown-freebsd), 
Copyright 1996 Free Software Foundation, Inc...
(kgdb) 

¿ø°Ý µð¹ö±ë ¼¼¼ÇÀ» ´ÙÀ½°ú °°ÀÌ ÃʱâÈ­ ÇÕ´Ï´Ù(ù¹ø° ½Ã¸®¾ó Æ÷Æ®°¡ »ç¿ë ÁßÀ̶ó°í °¡Á¤ÇÕ´Ï´Ù).

(kgdb) target remote /dev/cuaa0

±×¸®°í ³ª¼­, (µð¹ÙÀ̽º °¨Áö¸¦ ½ÃÀÛÇϱâ Á÷Àü¿¡ DDB¿¡ µé¾î°£ »óÅÂÀÇ) Ÿ°Ù È£½ºÆ®¿¡¼­ ´ÙÀ½À» ÀÔ·ÂÇÕ´Ï´Ù.

Debugger("Boot flags requested debugger")
Stopped at	Debugger+0x35: movb	$0, edata+0x51bc
db> gdb

DDB´Â ´ÙÀ½°ú °°ÀÌ ÀÀ´äÇÒ °ÍÀÔ´Ï´Ù.

Next trap will enter GDB remote protocol mode

``gdb''À̶ó°í Ä¥ ¶§¸¶´Ù, ¿ø°Ý GDB ¸ðµå¿Í ·ÎÄà DDB ¸ðµå°¡ ÀüȯµÉ °ÍÀÔ´Ï´Ù. ´ÙÀ½ Æ®·¦À» °­Á¦·Î ½ÇÇàÇϱâ À§Çؼ­, ``s'' (step)À» Ĩ´Ï´Ù. GDB´Â Ÿ°Ù Ä¿³Î¿¡ ´ëÇÑ Á¦¾î±ÇÀ» °¡Áö°Ô µÉ °ÍÀÔ´Ï´Ù.

Remote debugging using /dev/cuaa0
Debugger (msg=0xf01b0383 "Boot flags requested debugger")
    at ../../i386/i386/db_interface.c:257
(kgdb) 

ÀÌ ¼¼¼ÇÀº ´Ù¸¥ ¾î¶² ¼¼¼Çµé¿¡¼­µµ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ¿¹·Î¼­ Emacs ³»¿¡¼­ (¶Ç ´Ù¸¥ Emacs â¿¡ ÀÚµ¿À¸·Î ¼Ò½º Äڵ带 Ãâ·ÂÇÏ´Â) GUD ¸ðµå·Î µ¿ÀÛÇÔÀ¸·Î½á Àüü ¼Ò½º¸¦ ¾ï¼¼½º ÇÒ ¼öµµ ÀÖ½À´Ï´Ù.

¶ÇÇÑ, ¿ø°Ý GDB´Â LKMµéÀ» µð¹ö±ëÇÒ ¶§¿¡µµ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ù¹ø°·Î, LKMÀÌ µð¹ö±ë ½Éº¼À» Æ÷ÇÔÇϵµ·Ï ºôµåÇÕ´Ï´Ù.

# cd /usr/src/lkm/linux
# make clean; make COPTS=-g

±× ÈÄ¿¡ ÀÌ ¸ðµâÀ» Ÿ°Ù ¸Ó½Å¿¡ ÀνºÅç ÇÏ°í, ·ÎµùÇÑ ´ÙÀ½ ¾î´À ºÎºÐ¿¡ ·ÎµùÇß´ÂÁö ÆľÇÇϱâ À§ÇØ modstatÀ» »ç¿ëÇÕ´Ï´Ù.

# linux
# modstat
Type     Id Off Loadaddr Size Info     Rev Module Name
EXEC      0   4 f5109000 001c f510f010   1 linux_mod

¸ðµâÀÇ ·Îµù ¾îµå·¹½º¸¦ ÃëÇÏ¿© 0x20(a.out Çì´õÀÇ Å©±â¸¦ °í·ÁÇÕ´Ï´Ù)¸¦ ´õÇÕ´Ï´Ù. ÀÌ °è»êÀ¸·Î ³ª¿À´Â ÁÖ¼Ò´Â ¸ðµâ Äڵ尡 ÀçÀ§Ä¡µÈ ÁÖ¼Ò°¡ µË´Ï´Ù. µð¹ö°Å¿¡°Ô ÇØ´ç ¸ðµâ¿¡ ´ëÇØ ¾Ë·ÁÁÖ±â À§ÇØ GDB¿¡¼­ add-symbol-file ¸í·ÉÀ» »ç¿ëÇÕ´Ï´Ù.

(kgdb) add-symbol-file /usr/src/lkm/linux/linux_mod.o 0xf5109020
add symbol table from file "/usr/src/lkm/linux/linux_mod.o" at
text_addr = 0xf5109020?
(y or n) y
(kgdb)

ÀÌÈķδ LKM ³»ÀÇ ¸ðµç ½Éº¼µéÀ» ¾ï¼¼½º ÇÒ ¼ö ÀÖ°Ô µË´Ï´Ù.


FreeBSD ÇÚµåºÏ : Ä¿³Î µð¹ö±ë : ¿ø°Ý GDB¸¦ ÀÌ¿ëÇÑ ¿Â¶óÀÎ Ä¿³Î µð¹ö±ë
Previous: DDB¸¦ ÀÌ¿ëÇÑ ¿Â¶óÀÎ Ä¿³Î µð¹ö±ë
Next: ÄÜ¼Ö µå¶óÀ̹öÀÇ µð¹ö±ë