Next: , Previous: Summary, Up: Top   [Contents][Index]


1 GDB¥»¥Ã¥·¥ç¥ó¤Î¥µ¥ó¥×¥ë

¤½¤Îµ¤¤Ë¤Ê¤ì¤Ð¡¢ ¤³¤Î¥Þ¥Ë¥å¥¢¥ë¤ò»È¤Ã¤ÆGDB¤Î¤¹¤Ù¤Æ¤ò³Ø½¬¤¹¤ë¤³¤È¤â¤â¤Á¤í¤ó²Äǽ¤Ç¤¹¤¬¡¢ GDB¤ò»È¤¤»Ï¤á¤ë¤Ë¤Ï¡¢ ¤¤¤¯¤Ä¤«¤Î¥³¥Þ¥ó¥É¤òÃΤäƤ¤¤ì¤Ð½½Ê¬¤Ç¤¹¡£ ËܾϤǤϡ¢¤½¤Î¤è¤¦¤Ê¥³¥Þ¥ó¥É¤Ë¤Ä¤¤¤ÆÀâÌÀ¤·¤Þ¤¹¡£

ÈÆÍÑŪ¤Ê¥Þ¥¯¥í¡¦¥×¥í¥»¥Ã¥µ¤Ç¤¢¤ëGNU m4¤Ë¤Ï¡¢ ¤«¤Ä¤Æ¡¢ ¤Þ¤ÀÀµ¼°¤Ê¥Ð¡¼¥¸¥ç¥ó¤¬¥ê¥ê¡¼¥¹¤µ¤ì¤ë°ÊÁ°¤Ë¡¢ ¼¡¤Î¤è¤¦¤ÊÉÔ¶ñ¹ç¤¬¤¢¤ê¤Þ¤·¤¿¡£ °úÍѤòɽ¤ï¤¹Ê¸»úÎó¤ò¥Ç¥Õ¥©¥ë¥È¤È¤Ï°Û¤Ê¤ë¤â¤Î¤ËÊѹ¹¤¹¤ë¤È¡¢ ¤¢¤ë¥Þ¥¯¥íÄêµÁ¤ÎÆâÉô¤ËÆþ¤ì»Ò¾õÂ֤ˤʤäƤ¤¤ë¾¤Î¥Þ¥¯¥íÄêµÁ¤ò¼è¤ê½Ð¤¹¤¿¤á¤Ë»È¤ï¤ì¤ë¥³¥Þ¥ó¥É¤¬¡¢ Àµ¤·¤¯Æ°ºî¤·¤Ê¤¯¤Ê¤ë¤³¤È¤¬¤¢¤ë¡¢ ¤È¤¤¤¦ÉÔ¶ñ¹ç¤Ç¤¹¡£ °Ê²¼¤Îû¤¤m4¥»¥Ã¥·¥ç¥ó¤Ç¤Ï¡¢ 0000¤ËŸ³«¤µ¤ì¤ë¥Þ¥¯¥ífoo¤òÄêµÁ¤·¤Æ¤¤¤Þ¤¹¡£ ¤µ¤é¤Ë¡¢ m4¤ÎÁȤ߹þ¤ß¥³¥Þ¥ó¥Édefn¤ò»È¤Ã¤Æ¡¢ ¥Þ¥¯¥íbar¤ËƱ°ì¤ÎÄêµÁ¤òÍ¿¤¨¤Æ¤¤¤Þ¤¹¡£ ¤È¤³¤í¤¬¡¢ °úÍѤγ«»Ïʸ»úÎó¤ò<QUOTE>¤Ë¡¢ °úÍѤνªÎ»Ê¸»úÎó¤ò<UNQUOTE>¤Ë¤½¤ì¤¾¤ìÊѹ¹¤¹¤ë¤È¡¢ Á´¤¯Æ±°ì¤Î¼ê½ç¤Ç¿·¤·¤¤Æ±µÁ¸ìbaz¤òÄêµÁ¤·¤è¤¦¤È¤·¤Æ¤â¡¢ ¤¦¤Þ¤¯¤¤¤«¤Ê¤¤¤Î¤Ç¤¹¡£

$ cd gnu/m4
$ ./m4
define(foo,0000)

foo
0000
define(bar,defn(‘foo’))

bar
0000
changequote(<QUOTE>,<UNQUOTE>)

define(baz,defn(<QUOTE>foo<UNQUOTE>))
baz
C-d
m4: End of input: 0: fatal error: EOF in string

¤³¤³¤ÇGDB¤ò»È¤Ã¤Æ¡¢ ²¿¤¬µ¯¤³¤Ã¤Æ¤¤¤ë¤Î¤«Ä´¤Ù¤Æ¤ß¤Þ¤·¤ç¤¦¡£

$ gdb m4
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.18, Copyright 1999 Free Software Foundation, Inc...
(gdb)

GDB¤Ï¡¢ ɬÍפʤȤ­¤Ë¾¤Î¥·¥ó¥Ü¥ë¤ò¸«¤Ä¤±¤ë¤Î¤ËºÇÄã¸ÂɬÍפȤʤ륷¥ó¥Ü¥ë¾ðÊó¤·¤«ÆÉ¤ß¹þ¤ß¤Þ¤»¤ó¡£ ¤½¤Î·ë²Ì¡¢ ºÇ½é¤Î¥×¥í¥ó¥×¥È¤¬É½¼¨¤µ¤ì¤ë¤Þ¤Ç¤Î»þ´Ö¤¬¶Ë¤á¤ÆÃ»¤¤¤Î¤Ç¤¹¡£ ¤³¤³¤Ç¡¢ ½ÐÎϾðÊ󤬤³¤Î¥Þ¥Ë¥å¥¢¥ë¤Î»æÉý¤Ë¼ý¤Þ¤ë¤è¤¦¤Ë¤¹¤ë¤¿¤á¤Ë¡¢ GDB¤ËÂФ·¤ÆÉ½¼¨Éý¤òÄ̾ï¤è¤ê¤â¶¹¤¯¤¹¤ë¤è¤¦»Ø¼¨¤ò½Ð¤·¤Æ¤ß¤Þ¤·¤ç¤¦¡£

(gdb) set width 70

m4¤ÎÁȤ߹þ¤ß¥³¥Þ¥ó¥É¤Ç¤¢¤ëchangequote¤¬¤É¤Î¤è¤¦¤Ëưºî¤¹¤ë¤Î¤«¤òÄ´¤Ù¤Æ¤ß¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£ ¥½¡¼¥¹¤ò¸«¤ë¤È¡¢ ´ØÏ¢¤¹¤ë¥µ¥Ö¥ë¡¼¥Á¥ó¤¬m4_changequote¤Ç¤¢¤ë¤³¤È¤¬¤ï¤«¤ê¤Þ¤¹¡£ ¤½¤³¤Ç¡¢ GDB¤Îbreak¥³¥Þ¥ó¥É¤Ç¥Ö¥ì¥¤¥¯¥Ý¥¤¥ó¥È¤òÀßÄꤷ¤Æ¤ß¤Þ¤¹¡£

(gdb) break m4_changequote
Breakpoint 1 at 0x62f4: file builtin.c, line 879.

run¥³¥Þ¥ó¥É¤ò»È¤Ã¤Æ¡¢ GDB¤Î´ÉÍý²¼¤Çm4¤òÁö¤é¤»¤Þ¤¹¡£ m4_changequote¥µ¥Ö¥ë¡¼¥Á¥ó¤ËÅþ㤹¤ë¤Þ¤Ç¤Ï¡¢ ¥×¥í¥°¥é¥à¤ÏÄ̾ï¤É¤ª¤ê¤Îưºî¤ò¤·¤Þ¤¹¡£

(gdb) run
Starting program: /work/Editorial/gdb/gnu/m4/m4
define(foo,0000)

foo
0000

¥Ö¥ì¥¤¥¯¥Ý¥¤¥ó¥È¤Ç¥×¥í¥°¥é¥à¤òÄä»ß¤µ¤»¤ë¤¿¤á¤Ëchangequote¤ò¼Â¹Ô¤¹¤ë¤È¡¢ GDB¤Ïm4¤Î¼Â¹Ô¤òÄä»ß¤·¡¢ Ää»ß¤·¤¿²Õ½ê¤Î¥³¥ó¥Æ¥­¥¹¥È¾ðÊó¤òɽ¼¨¤·¤Þ¤¹¡£

changequote(<QUOTE>,<UNQUOTE>)

Breakpoint 1, m4_changequote (argc=3, argv=0x33c70) 
    at builtin.c:879
879         if (bad_argc(TOKEN_DATA_TEXT(argv[0]),argc,1,3))

¼¡¤Ën¡Ênext¡Ë¥³¥Þ¥ó¥É¤ò¼Â¹Ô¤¹¤ë¤È¡¢ ¸½ºßÄä»ß¤·¤Æ¤¤¤ë´Ø¿ô¤ÎÃæ¤Ç1¹Ô¤À¤±½èÍý¤¬¼Â¹Ô¤µ¤ì¤Þ¤¹¡£

(gdb) n
882         set_quotes((argc >= 2) ? TOKEN_DATA_TEXT(argv[1])\
 : nil,

set_quotes¤È¤¤¤¦¤Î¤Ï¡¢ ¤¤¤ï¤¯¤¢¤ê¤²¤Ê¥µ¥Ö¥ë¡¼¥Á¥ó¤Ç¤¹¡£ next¥³¥Þ¥ó¥É¤ÎÂå¤ï¤ê¤Ës¡Êstep¡Ë¥³¥Þ¥ó¥É¤ò»È¤¦¤³¤È¤Ç¡¢ ¤³¤Î¥µ¥Ö¥ë¡¼¥Á¥ó¤ÎÃæ¤ËÆþ¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ step¥³¥Þ¥ó¥É¤Ï¡¢ ¤½¤ì¤¬¤É¤Î¥µ¥Ö¥ë¡¼¥Á¥ó¤ÎÃæ¤Ë¤¢¤ë¤«¤È¤¤¤¦¤³¤È¤Ë¤«¤«¤ï¤ê¤Ê¤¯¡¢ ¼¡¤Î1¹Ô¤Ë°Üư¤·¤Þ¤¹¡£ ¤³¤Î¾ì¹ç¡¢ ¼¡¤Î1¹Ô¤Ïset_quotes¤ÎÃæ¤Ç¤¹¤«¤é¡¢ ¤½¤³¤Ø°Üư¤¹¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£

(gdb) s
set_quotes (lq=0x34c78 "<QUOTE>", rq=0x34c88 "<UNQUOTE>")
    at input.c:530
530         if (lquote != def_lquote)

m4¤¬¤½¤ÎÃæ¤Ç¸½ºßÄä»ß¤·¤Æ¤¤¤ë¥µ¥Ö¥ë¡¼¥Á¥ó ¡Ê¤ª¤è¤Ó¡¢¤½¤Î¥µ¥Ö¥ë¡¼¥Á¥ó¤Ø¤Î°ú¿ô¡Ë ¤¬É½¼¨¤µ¤ì¤Æ¤¤¤Þ¤¹¡£ ¤³¤ì¤ò¥¹¥¿¥Ã¥¯¡¦¥Õ¥ì¡¼¥àɽ¼¨¤È¸Æ¤Ó¤Þ¤¹¡£ ¤½¤ì¤Ï¡¢ ¥¹¥¿¥Ã¥¯¤Î¾õÂÖ¤òÍ×Ìó¤·¤¿¾ðÊó¤òɽ¼¨¤·¤Æ¤¤¤Þ¤¹¡£ backtrace¥³¥Þ¥ó¥É ¡Ê¤¢¤ë¤¤¤Ï¡¢ bt¤È¾Êά¤¹¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹¡Ë ¤ò»È¤Ã¤Æ¡¢ ¸½ºß¡¢ ¥¹¥¿¥Ã¥¯Á´ÂΤÎÃæ¤Î¤É¤³¤Ë¤¤¤ë¤«¤òÃΤ뤳¤È¤â¤Ç¤­¤Þ¤¹¡£ backtrace¥³¥Þ¥ó¥É¤Ï¡¢ ¥¢¥¯¥Æ¥£¥Ö¤Ê¥µ¥Ö¥ë¡¼¥Á¥ó¤Î¥¹¥¿¥Ã¥¯¡¦¥Õ¥ì¡¼¥à¤òɽ¼¨¤·¤Þ¤¹¡£

(gdb) bt
#0  set_quotes (lq=0x34c78 "<QUOTE>", rq=0x34c88 "<UNQUOTE>")
    at input.c:530
#1  0x6344 in m4_changequote (argc=3, argv=0x33c70) 
    at builtin.c:882
#2  0x8174 in expand_macro (sym=0x33320) at macro.c:242
#3  0x7a88 in expand_token (obs=0x0, t=209696, td=0xf7fffa30)
    at macro.c:71
#4  0x79dc in expand_input () at macro.c:40
#5  0x2930 in main (argc=0, argv=0xf7fffb20) at m4.c:195

¼¡¤Ë¡¢2¡¢3¹ÔÀè¤Ë¿Ê¤ó¤Ç¡¢ ²¿¤¬µ¯¤³¤Ã¤Æ¤¤¤ë¤Î¤«¤ò¸«¤Æ¤ß¤Þ¤·¤ç¤¦¡£ ºÇ½é¤Î2²ó¤Ï¡¢ ‘s’¥³¥Þ¥ó¥É¤ò»È¤¤¤Þ¤¹¡£ ³¤¯2²ó¤Ï¡¢ xstrdup¥µ¥Ö¥ë¡¼¥Á¥ó¤ÎÃæ¤ËÆþ¤Ã¤Æ¤·¤Þ¤¦¤Î¤òËɤ°¤¿¤á¤Ë¡¢ n¥³¥Þ¥ó¥É¤ò»È¤¤¤Þ¤¹¡£

(gdb) s
0x3b5c  532         if (rquote != def_rquote)
(gdb) s
0x3b80  535         lquote = (lq == nil || *lq == '\0') ?  \
def_lquote : xstrdup(lq);
(gdb) n
536         rquote = (rq == nil || *rq == '\0') ? def_rquote\
 : xstrdup(rq);
(gdb) n
538         len_lquote = strlen(rquote);

ºÇ¸å¤Ëɽ¼¨¤µ¤ì¤¿¹Ô¤Ï¡¢¾¯¤·Ì¯¤Ê´¶¤¸¤¬¤·¤Þ¤¹¡£ 2¤Ä¤ÎÊÑ¿ôlquote¡¢ rquote¤òÄ´¤Ù¤Æ¡¢ ËÜÅö¤Ë¤½¤ì¤¬¡¢ ¿·¤¿¤Ë»ØÄꤵ¤ì¤¿°úÍѳ«»Ïʸ»úÎó¡¢ °úÍѽªÎ»Ê¸»úÎó¤Ç¤¢¤ë¤«¤É¤¦¤«³Îǧ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ ÃͤòÄ´¤Ù¤ë¤Ë¤Ïp¡Êprint¡Ë¥³¥Þ¥ó¥É¤ò»ÈÍѤ·¤Þ¤¹¡£

(gdb) p lquote
$1 = 0x35d40 "<QUOTE>"
(gdb) p rquote
$2 = 0x35d50 "<UNQUOTE>"

lquote¤Èrquote¤Ï³Î¤«¤Ë°úÍѳ«»Ïʸ»úÎó¡¢ °úÍѽªÎ»Ê¸»úÎó¤Î¤è¤¦¤Ç¤¹¡£ Á°¸å´Ø·¸¤òÄ´¤Ù¤ë¤Ë¤Ï¡¢ l¡Êlist¡Ë¥³¥Þ¥ó¥É¤ò»È¤Ã¤Æ¡¢ ¸½ºßÄä»ß¤·¤Æ¤¤¤ë¹Ô¤òÃæ¿´¤Ë¤½¤ÎÁ°¸å10¹Ô¤òɽ¼¨¤·¤Þ¤¹¡£

(gdb) l
533             xfree(rquote);
534
535         lquote = (lq == nil || *lq == '\0') ? def_lquote\
 : xstrdup (lq);
536         rquote = (rq == nil || *rq == '\0') ? def_rquote\
 : xstrdup (rq);
537
538         len_lquote = strlen(rquote);
539         len_rquote = strlen(lquote);
540     }
541
542     void

len_lquote¤Èlen_rquote¤ËÃͤòÀßÄꤷ¤Æ¤¤¤ë¹Ô¤ò¼Â¹Ô¤µ¤»¤Æ¤«¤é¡¢ ¤½¤ì¤é¤ÎÃͤòÄ´¤Ù¤Æ¤ß¤Þ¤·¤ç¤¦¡£

(gdb) n
539         len_rquote = strlen(lquote);
(gdb) n
540     }
(gdb) p len_lquote
$3 = 9
(gdb) p len_rquote
$4 = 7

len_lquote¤Èlen_rquote¤¬¡¢ ¤½¤ì¤¾¤ìlquote¤Èrquote¤ÎŤµ¤Ç¤¢¤ë¤È¤¹¤ë¤È¡¢ ¤³¤³¤Ëɽ¼¨¤µ¤ì¤Æ¤¤¤ëÃͤÏÌÀ¤é¤«¤Ë¸í¤ê¤Ç¤¹¡£ p¥³¥Þ¥ó¥É¤ò»È¤Ã¤Æ¡¢ Àµ¤·¤¤ÃͤòÀßÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ p¥³¥Þ¥ó¥É¤Ë¤è¤Ã¤ÆÇ¤°Õ¤Î¼°¤ÎÃͤòɽ¼¨¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¤¬¡¢ ¤³¤³¤Ç¤¤¤¦¡Ö¼°¡×¤Ë¤Ï¡¢ ¥µ¥Ö¥ë¡¼¥Á¥ó¤Î¸Æ¤Ó½Ð¤·¤ä¡¢ Ãͤγä¤êÅö¤Æ¤â´Þ¤Þ¤ì¤Þ¤¹¡£

(gdb) p len_lquote=strlen(lquote)
$5 = 7
(gdb) p len_rquote=strlen(rquote)
$6 = 9

¿·¤·¤¤°úÍÑʸ»úÎó¤ò¥»¥Ã¥È¤·¤¿¾õÂ֤ǡ¢ m4¤ÎÁȤ߹þ¤ß¥³¥Þ¥ó¥Édefn¤ò»ÈÍѤ·¤è¤¦¤È¤¹¤ë¤ÈȯÀ¸¤¹¤ëÌäÂê¤ò½¤Àµ¤¹¤ë¤Ë¤Ï¡¢ ¤³¤ì¤À¤±¤Ç½½Ê¬¤Ç¤·¤ç¤¦¤«? c¡Êcontinue¡Ë¥³¥Þ¥ó¥É¤ò»È¤¨¤Ð¡¢ m4¤Ë½èÍý¤ò·Ñ³¤µ¤»¤Æ¡¢ ¼ÂºÝ¤ËÌäÂê¤òȯÀ¸¤µ¤»¤Æ¤¤¤¿Îã¤ò¼Â¹Ô¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£

(gdb) c
Continuing.

define(baz,defn(<QUOTE>foo<UNQUOTE>))

baz
0000

º£Å٤Ϥ¦¤Þ¤¯¤¤¤­¤Þ¤·¤¿¡£ ¿·¤¿¤Ë¥»¥Ã¥È¤µ¤ì¤¿°úÍÑʸ»úÎó¤Ï¡¢ ¥Ç¥Õ¥©¥ë¥È¤Î°úÍÑʸ»úÎó¤ÈƱ¤¸¤è¤¦¤Ëµ¡Ç½¤·¤Þ¤·¤¿¡£ ÌäÂê¤Î¸¶°ø¤Ï¡¢ ¥×¥í¥°¥é¥àÆâ¤Î2²Õ½ê¤Î¥¿¥¤¥×¡¦¥ß¥¹¤Ç¡¢ Ťµ¤ÎÀßÄ꤬Àµ¤·¤¯¹Ô¤ï¤ì¤Æ¤¤¤Ê¤¤¤³¤È¤Ë¤¢¤Ã¤¿¤è¤¦¤Ç¤¹¡£ EOF¤òÆþÎϤ·¤Æ¡¢ m4¤ò½ªÎ»¤µ¤»¤Þ¤·¤ç¤¦¡£

C-d
Program exited normally.

Program exited normally.’¤È¤¤¤¦¥á¥Ã¥»¡¼¥¸¤Ï¡¢ GDB¤¬½ÐÎϤ·¤¿¤â¤Î¤Ç¡¢ m4¤Î¼Â¹Ô¤¬½ªÎ»¤·¤¿¤³¤È¤ò°ÕÌ£¤·¤Æ¤¤¤Þ¤¹¡£ GDB¤Î quit¥³¥Þ¥ó¥É¤Ç¡¢ GDB¥»¥Ã¥·¥ç¥ó¤ò½ªÎ»¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£

(gdb) quit

Next: , Previous: Summary, Up: Top   [Contents][Index]