Я пытаюсь использовать rdebug с emacs и cygwin, и у меня возникают проблемы. Всякий раз, когда я делаю M-x rdebug и даю ему соответствующий скрипт для запуска, он останавливается с ошибкой
"apply: Spawning child process: exec format error"
Из некоторых поисковиков кажется, что это может произойти, если я пытаюсь запустить исполняемый файл cygwin через командную строку Windows или наоборот. Это также может произойти, если путь к исполняемому файлу является ссылкой в стиле Unix.
Я пытаюсь выяснить место, из которого выполняется rdebug, чтобы проверить, какая из них является проблемой и как ее исправить.
До сих пор я пробовал следующее, но без радости:
* Используйте edebug на rdebug и его вызывающих: это привело меня к gud-common-init, и я быстро заблудился, пытаясь выяснить, где происходит вызов exec.
* Попробуйте переключить оболочку с cygwin на windows и обратно, чтобы увидеть, есть ли разница: вообще нет разницы.
Обратите внимание, что я могу запустить rdebug из моей оболочки Windows, а также из оболочки Cygwin (вызывается через оболочку M-x). Я предполагаю, что / usr / bin / rdebug и /usr/bin/rdebug.bat как-то связаны с этим.
Любые идеи, чтобы исправить это или отладить эту проблему, были бы действительно хороши.
Некоторый прогресс
Мне удалось выяснить, что я могу повторить ту же проблему, пытаясь выполнить rdebug с помощью comint-run (M-x comint-run ENTER rdebug ENTER). После некоторой отладки и обработки кода, похоже, что 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 вызывал rdebug.bat через оболочку dos. Я бы хотел, чтобы rdebug вызывался через оболочку bash при запуске comint-run. Любые идеи о том, как указать, какую оболочку Comint-Run использует?