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

ÀÌ ±â´ÉÀº FreeBSD 2.2ºÎÅÍ Áö¿øµÈ ±â´ÉÀ̸ç, »ó´çÈ÷ ±â¸·Èù ±â´ÉÀÔ´Ï´Ù.

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

¼³Á¤ ÆÄÀÏ¿¡ DDB ¿É¼ÇÀ» Æ÷ÇÔÇϰí, config -g ¸í·ÉÀ¸·Î Ä¿³Î ¼³Á¤À» ÇÑ ´ÙÀ½¿¡ ÀϹÝÀûÀÎ ¹æ¹ýÀ¸·Î Ä¿³ÎÀ» ÄÄÆÄÀÏ ÇÕ´Ï´Ù. ±× °á°ú µð¹ö±ë Á¤º¸·Î ÀÎÇÑ ¸Å¿ì Å« Å©±âÀÇ ¹ÙÀ̳ʸ® ÆÄÀÏÀÌ »ý¼ºµË´Ï´Ù. strip -x ¸í·ÉÀ¸·Î µð¹ö±ë¿ë ½Éº¼À» Á¦°ÅÇÏ¿© Ÿ°Ù ½Ã½ºÅÛ¿¡ º¹»çÇϰí, -d ºÎÆÃ ¿É¼ÇÀ¸·Î ºÎÆÃÇÕ´Ï´Ù. ÀÚ½ÅÀÇ sio ÀåÄ¡¿¡ "flags 080"À» ¼³Á¤ÇÑ Å¸°Ù ½Ã½ºÅÛÀÇ ½Ã¸®¾ó ¶óÀÎÀ» µð¹ö±ë È£½ºÆ®ÀÇ ÀÓÀÇÀÇ ½Ã¸®¾ó ¶óÀο¡ ¿¬°áÇÕ´Ï´Ù. ÀÌÁ¦ µð¹ö±ë È£½ºÆ® »ó¿¡¼­ Ÿ°Ù Ä¿³ÎÀÇ ÄÄÆÄÀÏ µð·ºÅ丮·Î À̵¿ÇÑ ´ÙÀ½ 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

ÀÌÁ¦, (ÀåÄ¡ °Ë»öÀÌ ½ÃÀ۵DZâ Àü¿¡ 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)

ÀÌ ¼¼¼ÇÀº gud ¸ðµå·Î µ¿ÀÛÇÏ´Â Emacs â(´Ù¸¥ Emacs â¿¡ ÀÚµ¿À¸·Î ¼Ò½º Äڵ带 Ãâ·ÂÇÏ´Â) ³»¿¡¼­ÀÇ ¼Ò½º¿¡ ´ëÇÑ Àüü ¾ï¼¼½º µîÀ» Æ÷ÇÔÇÏ¿©, ´Ù¸¥ GDB ¼¼¼Çµé ó·³ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.