我正在尝试将 rdebug 与 emacs 和 cygwin 一起使用,但遇到了麻烦。每当我执行 Mx rdebug 并为其提供适当的脚本以运行时,它都会因错误而停止
"apply: Spawning child process: exec format error"
从一些谷歌搜索来看,如果我试图通过 Windows 命令提示符启动 cygwin 可执行文件,或者反之亦然,这似乎可能会发生。如果可执行文件的路径是 unix 样式的链接,也可能发生这种情况。
我试图找出执行 rdebug 的位置,以检查其中哪些是问题以及如何解决它。
到目前为止,我已经尝试了以下方法,但没有任何乐趣: * 在 rdebug 上使用 edebug,它是被调用者:这让我进入了 gud-common-init,我很快就迷失了方向,试图找出 exec 调用发生的位置。* 尝试将 shell 从 cygwin 切换到 windows 并返回,看看是否有任何区别:完全没有区别。
请注意,我可以从我的 windows shell 以及我的 cygwin shell(通过 Mx shell 调用)运行 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 shell 调用 rdebug.bat。当我调用 comint-run 时,我希望通过 bash shell 调用 rdebug。关于如何指定哪个 shell comint-run 使用的任何想法?