解决emacs错误的想法:“apply:产生子进程:exec格式错误”

时间:2010-02-14 12:40:35

标签: emacs cygwin format exec rdebug

我正在尝试使用emacs和cygwin的rdebug,我遇到了麻烦。每当我做一个M-x 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(通过M-x shell调用)运行rdebug。我猜/ usr / bin / rdebug和/usr/bin/rdebug.bat与此有关。

任何解决此问题或调试此问题的想法都会非常棒。

一些进展

我设法弄清楚我可以使用comint-run(M-x 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使用的任何想法?

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,发现了以下简单的解决方法。

输入M-x rdebug后,会提示执行该命令。以下命令显示为默认设置:

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

将此命令修改为:

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

将能够解决报告的问题。