emacs と cygwin で rdebug を使用しようとしていますが、問題が発生しています。Mx rdebug を実行して適切なスクリプトを実行すると、エラーで停止します。
"apply: Spawning child process: exec format error"
いくつかのグーグルから、Windowsコマンドプロンプトを介してcygwin実行可能ファイルを起動しようとしている場合、またはその逆の場合に、これが発生する可能性があるようです。実行可能ファイルへのパスが UNIX スタイルのリンクである場合にも発生する可能性があります。
rdebug が実行されている場所を特定して、これらのどれが問題であり、どのように修正するかを確認しようとしています。
* rdebug で edebug を使用すると、呼び出し先: これにより、gud-common-init に入り、exec 呼び出しがどこで発生しているかを調べようとしてすぐに道に迷いました。* シェルを cygwin から Windows に切り替えて、違いがあるかどうかを確認してみてください。違いはまったくありません。
Windows シェルと cygwin シェル (Mx シェル経由で起動) から rdebug を実行できることに注意してください。/usr/bin/rdebug と /usr/bin/rdebug.bat がこれに関係していると思います。
これを修正するか、この問題をデバッグするためのアイデアは本当に素晴らしいでしょう.
ある程度の進歩
comint-run (Mx comint-run ENTER rdebug ENTER) を使用して rdebug を実行しようとすると、同じ問題を再現できることがわかりました。いくつかのデバッグとコードの調査から、emacs が start-file-process (comint-run と同様) を呼び出して rdebug プロセスを開始しているように見えます。
Cygwinのロード中に次のこともできます。
;;; Use `bash' as the default shell in Emacs.
(setq exec-path (cons cygwin-bin exec-path))
(setq shell-file-name (concat cygwin-bin "/bash.exe")) ; Subprocesses invoked via the shell.
(setenv "SHELL" shell-file-name)
(setenv "PATH" (concat
(getenv "PATH")
(concat ";" (substring data-directory 0 2) "\\cygwin\\bin")) )
(setq explicit-shell-file-name shell-file-name) ; Interactive shell
(setq explicit-shell-args '("--login" "-i"))
(setq w32-quote-process-args ?\") ;; "
さらなる進歩
一時的に rdebug.bat の名前を変更すると、comint-run が dos シェル経由で rdebug.bat を呼び出していることが明らかになりました。comint-run を起動するときに bash シェル経由で rdebug を起動したいです。comint-run が使用するシェルを指定する方法についてのアイデアはありますか?