2

我正在尝试将 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 使用的任何想法?

4

1 回答 1

1

我有同样的问题,并找到了以下简单的解决方法。

输入mx rdebug后,提示要执行的命令。以下命令显示为默认设置:

Run rdebug (like this): rdebug --emacs 3 hanoi.rb

将此命令修改为:

Run rdebug (like this): ruby /usr/bin/rdebug --emacs 3 hanoi.rb

将能够解决报告的问题。

于 2011-07-26T19:33:41.863 回答