6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Windows 上の emacs において pdb を使う際のメモ

Posted at

はじめに

本稿は Windows 上の emacs において Python デバッガである pdb を使えるようにした際の備忘録である.

RealGud をインストールする

M-x package-refresh-contents RET      (to refresh your package database)
M-x package-install RET realgud RET   (to install and compile `realgud` and its dependencies)

以下の文章では RealGud のインストールフォルダである
/home/.emacs.d/elpa/realgud-20160829.1821
をカレントフォルダとする.

pdb 起動時のデフォルト引数をフルパスから相対パスに変更する

ファイル ./realgud/common/core.el において,関数定義 (defun realgud-suggest-invocation ... の中の

(setq filename (realgud:suggest-file-from-buffer lang-str))
(concat debugger-name " " (shell-quote-argument filename)))

という部分を次のように変更する.

(setq filename (realgud:suggest-file-from-buffer lang-str))
(setq filename (first (last (split-string filename "/")))) ;; <= 追加
(concat debugger-name " " (shell-quote-argument filename)))

その後,M-x byte-compile-file により core.el ファイルをコンパイルする.

  • この関数の呼ばれ方.
realgud:pdb(./realgud/debugger/pdb/pdb.el)
 -> realgud:run-debugger(./realgud/common/run.el)
  -> pdb-query-cmdline(./realgud/debugger/pdb/core.el) (as a callback function)
   -> realgud-query-cmdline(./realgud/common/core.el)
    -> pdb-suggest-invocation(./realgud/debugger/pdb/core.el) (as a callback function)
     -> realgud-suggest-invocation(./realgud/common/core.el)
  • 注意.
    この修正は必須ではないがフルパスで実行するには Windows 形式にて,
    次のように打たなければならず非常に面倒である.
Run pdb (like this): pdb c:\\Users\\...\\hoge.py

pdb 実行時の引数をフォルダ区切り(/)のフルパスに自動変換するのをやめる

ファイル ./realgud/common/run.el において,関数定義 (defun realgud:run-debugger ... の中の

(realgud:run-process debugger-name script-name parsed-cmd-args
		     minibuffer-history no-reset)

という部分を次のように変更する.

(realgud:run-process debugger-name script-name
                     cmd-args ;; <= パースしない
                     minibuffer-history no-reset)

その後, M-x byte-compile-file により run.el ファイルをコンパイルする.

  • この関数の呼ばれ方.
realgud:pdb(./realgud/debugger/pdb/pdb.el)
 -> realgud:run-debugger(./realgud/common/run.el)

ソースファイルを別のバッファに開くためにパスの表記を変更する

ファイル ./realgud/common/file.el において,関数定義 (defun realgud:file-loc-from-line ... の中の

(setq remapped-filename
      buffer-file-name
      (compilation-find-file (point-marker) filename directory)))

という部分を次のように変更する.

(setq filename (first (last (split-string filename "\\\\")))) ;; <= 追加
(setq remapped-filename
      buffer-file-name
      (compilation-find-file (point-marker) filename directory)))

その後, M-x byte-compile-file により file.el ファイルをコンパイルする.

  • デバッガが実行されコマンドバッファが開くと Realgud-Track モードに入る.
    すると関数 realgud-track-mode-setup (./realgud/common/track-mode.el) が実行され
    comint-output-filter-functions API (コマンドバッファのイベント発生時に実行される関数)
    に realgud-track-comint-output-filter-hook (./realgud/common/track.el) がフックされる.
    これによりコマンドバッファ上のイベントに付随してソースバッファが書き換えられていく.

  • この関数の呼ばれ方.

イベント発生
 -> realgud-track-comint-output-filter-hook(./realgud/common/track.el)
  -> realgud:track-from-region(./realgud/common/track.el)
   -> realgud-track-loc(./realgud/common/track.el)
    -> realgud:file-loc-from-line(./realgud/common/file.el)

ソースファイル上でブレークポイントを打った際に正しく動作するように修正する

ファイル ./realgud/common/send.el において,関数定義 (defun realgud-expand-format ... の中の

(setq fmt-str (substring fmt-str (match-end 2))))

という部分を次のように変更する.

(setq result
      (replace-regexp-in-string "/" "\\\\"
                                (replace-regexp-in-string "/c" "c:"
                                                          result)))
;; <= 追加
(setq fmt-str (substring fmt-str (match-end 2))))

その後, M-x byte-compile-file により send.el ファイルをコンパイルする.

  • この関数の呼ばれ方.
ソースファイル上で "b"
 -> realgud:cmd-break(./realgud/common/cmds.el)
  -> realgud:cmd-run-command(./realgud/common/cmds.el)
   -> realgud-command(./realgud/common/send.el)
    -> realgud-expand-format(./realgud/common/send.el)

おわりに

以上の変更によってソースを見ながらブレークポイントを打てるようになったので,満足.

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?