| トップ | 読書感想文 | ニュース | Ukki |
login  top
2005/9/7

emacsをgdbで使ってソースコードを追従しなくなった問題
emacsかgdbがバージョンアップしたせいで、Emacsでgdbを使ったとき、うまく対応するソースコード行を追従しなくなった。この問題は検索の結果、gdbの--fullnameオプションを指定することが解決すると判る。しかし、これをコマンドファイルで指定するにはどうしたらよいだろうか?

答えは、set annotate 1とコマンドファイルに書けばよい。解決に至る道程は以下の通り。

gdb 6.3のソースコードを落としてきて見てみると、--fullnameオプションは、main.cc中のstatic struct option long_options[]で定義されている。

static struct option long_options[] = {
...
    /* This is a synonym for "--annotate=1".  --annotate is now preferred,
       but keep this here for a long time because people will be running
       emacses which use --fullname.  */
      {"fullname", no_argument, 0, 'f'},
      {"f", no_argument, 0, 'f'},

      {"annotate", required_argument, 0, OPT_ANNOTATE},
...
このstruct optionは、getoptの構造体。結局--fullnameを指定すると、
          case OPT_ANNOTATE:
            /* FIXME: what if the syntax is wrong (e.g. not digits)?  */
            annotation_level = atoi (optarg);
            break;
          case 'f':
            annotation_level = 1;
/* We have probably been invoked from emacs.  Disable window interface.  */
            use_windows = 0;
            break;
「--annotateを使え」と言っているけれど、use_windowsもセットしなければならないので、まだ時期尚早か。

GDBのマニュアルのannotationsの項を見ると、この設定は、set annotate levelで変更できる。

ソースコード行の追従は、gdbがコマンドラインの前後に発生させる特殊文字^z^zを検出することで実現されているようだ。昔はgudがこの--fullnameオプションを自動的に付与していたようなのだが、それをやらなくなってしまったため問題が起きたのだろう。


tags: gdb emacs gud
コメントする   trackback(0)