Emacs 24 で GDB を にgdb-many-windows設定して使用tします。通常は独自のフレームで使用します。私は別の編集フレームを持っているのが好きです。次のようになります (粗雑な ASCII ダイアグラムで申し訳ありません)。
+-------------+-------------+
| gdb | locals |
+-------------+-------------+
| source | I/O |
| | |
+-------------+-------------+
| stack | breakpoints |
+-------------+-------------+
これは、1 つの大きな問題を除けば、非常にうまく機能します。gdb が別のソース バッファを表示する必要がある場合 (たとえば、アップ/ダウン/ステップの後)、常に「ソース」ウィンドウに表示されるとは限りません。たとえば、別のフレームのウィンドウで同じバッファーを開いている場合、gdb フレームでキーボード フォーカスを維持しながら、そのフレームが発生します。これは、フレームが互いに重なっている単一モニターのセットアップでは非常に厄介です。
同じソース バッファが別の場所に表示されているかどうかに関係なく、gdb-many-windows セットアップでソース ウィンドウを常に使用してソースを表示するようにします。どうやってやるの?
編集:再現するためのより詳細な手順。GDB 7.5-ubuntu で Emacs 24.2.1 を使用しています。この問題は、Ubuntu 10.04 と Linux Mint Nadia と Cinnamon で見られました。
- この式を評価します。
(setq gdb-many-windows t) - 少なくとも 2 つのファイルで C プログラムをコンパイルします。
例えば:
// foo.c
void bar(int);
void foo(int c) {
if (c > 0)
bar(c - 1);
}
int main(void) {
foo(100);
return 0;
}
// bar.c
void foo(int c);
void bar(int c) {
if (c > 0)
foo(c - 2);
}
// compile with gcc -g -O0 foo.c bar.c -o test
- メインフレームにbar.cを表示させます。で新しいフレームを開き
M-x 5 2ます。そのフレームで、gdb を で開始しM-x gdbます。上記のように、そのフレームには 6 つのウィンドウがあるはずです。ソース フレームの上に gdb フレームを配置します。 - にブレークポイントを設定し、との
main呼び出しをステップ実行します。が呼び出されると、bar.c が既にそこに表示されているため、メイン フレームが gdb フレームの上に持ち上げられますが、キーボード フォーカスは gdb フレームにとどまります。foobarbar
gdb-display-source-buffer問題の関数はgud.el.gzにあると思います。これを でオーバーライドしようと計画していますdefadviceが、アドバイスに詳しくありません。私がそれを理解したら、私はここに答えを投稿します。