7

私はpdbを使用してPythonプログラムをデバッグしていますが、その動作に不満があります。

画面を複数のemacsウィンドウに分割し、pdbを実行すると、ウィンドウの1つが* gud*デバッガーの出力に(ランダムに?)置き換えられます。

また、ブレークポイントが検出されると、デバッグバッファーがウィンドウに既に表示されている場合でも、通常、このバッファーは別のウィンドウに配置され、別のウィンドウがソースファイルの内容に置き換えられます。(ちなみに、ソースファイルの正しい行にジャンプするのが好きです)

gud / pdbがウィンドウを管理できないようにするにはどうすればよいですか?emacsでウィンドウと画面レイアウトのすべてのプログラムによる操作を防ぐことは可能ですか?

編集:私は別の投稿でこれを部​​分的に解決する答えを見つけました:専用ウィンドウを切り替えます

4

4 に答える 4

4

これらすべてのアプローチを試してみましたが、Emacs 24 では成功しませんでした。まだ興味がある場合は、gdb/emacs 相互作用の古い動作を実装する「gud-gdb」を使用して古い gdb 動作に戻しました (専用ウィンドウと I/O バッファーなし) )。使用時に Mx gud-gdb を呼び出したくない場合は、Mx gdb のエイリアスを定義できます。

于 2013-03-22T21:17:27.147 に答える
3

スティッキー ウィンドウを調べます。

于 2009-05-01T16:52:08.243 に答える
3

gdb がウィンドウを盗むのを防ぐ解決策があります。Emacs 24.4 (2014-07-18 スナップショット) で動作し、専用バッファーは必要ありません。他の回答よりも優れている点は、バッファーを変更するたびにバッファーの専用化と非専用化を気にする必要がないことです。これはすぐに面倒になります。

このアドバイスを .emacs に入れます:

(defadvice gdb-inferior-filter
    (around gdb-inferior-filter-without-stealing)
  (with-current-buffer (gdb-get-buffer-create 'gdb-inferior-io)
    (comint-output-filter proc string)))
(ad-activate 'gdb-inferior-filter)

これは、gdb-mi.el で定義されているようにこの関数を効果的に置き換え、ウィンドウの窃盗の原因である gdb-display-buffer を呼び出すブランチを削除します。

于 2014-07-24T00:39:51.260 に答える
2

スティッキー Windowsを使用して、ウィンドウとバッファーをその場所に固定する必要がありますが、スティッキー Windows は、gud/pdb がウィンドウを盗もうとするのを止めません。gud/pdb がソース コード ウィンドウを盗むことができない場合、現在のフレームに別のウィンドウがある場合でも、新しい Emacs フレームが開きます。

py-pdbtrack-track-stack-fileこれは、gud-pdb バッファー ( )にジャンプしようとする関数pop-to-bufferが、引数 OTHER-WINDOW を に設定して関数を呼び出すという事実に由来しtます。

pop-to-bufferpop-to-buffer を呼び出すすべてのライブラリでこの動作を回避するには、 (.emacs で) にアドバイスを定義して OTHER-WINDOW の役割を取り消すことができます。

(defadvice pop-to-buffer (before cancel-other-window first)
  (ad-set-arg 1 nil))

(ad-activate 'pop-to-buffer)

pop-up-windowsまた、新しいウィンドウを作成しないように強制するために、変数を nil にカスタマイズする必要がありますdisplay-buffer(ウィンドウとフレームに特定のバッファーを表示するために使用される低レベルのルーチン)。

于 2011-03-03T01:45:35.083 に答える