我的项目中有一个 .dir-locals.el 文件,我在其中配置我的项目,以便使用 Emacs 中的 dap-debug 和 debugpy 进行调试。
我有 .dir-locals.el 文件的这个变体,工作得很好:
((nil . ((eval . (progn
(setq-local my-local-root (projectile-project-root))
(setq-local my-local-path (expand-file-name "linux-application/my_app" my-local-root))
(message "Project root is: %s" my-local-root)
(message "Concatenated path: %s" my-local-path)))
(dap-debug-template-configurations
. (("Docker Pytest Debug"
:type "python"
:request "attach"
:hostName "localhost"
:port 5678
:name "Docker Pytest Debug"
:pathMappings ((
( :localRoot . "/home/my_user/projects/our-gateway/linux-application/my_app")
( :remoteRoot . "/usr/src/app/linux-application/my_app")
))))))))
现在,为了让事情更通用一些,我想替换:
( :localRoot . "/home/my_user/projects/our-gateway/linux-application/my_app")
像这样:
( :localRoot . my-local-path)
但这不起作用。进行更改时,调试器找不到源代码。
这让我相信路径“my-local-path”与我的工作变体中的字符串不同。当我查看 Emacs 消息缓冲区中变量“my-local-path”的打印时,它看起来是相同的。我还检查过它们都是字符串。文件 .dir-local.el 位于文件夹 /home/my_user/projects/our-gateway 中。
我也尝试过使用“concat”进行串联,但这会产生相同的问题。
谢谢tripleee,你是对的。这是我的工作文件:
((nil . ((eval . (progn
(setq-local my-local-root (projectile-project-root))
(setq-local my-local-path (expand-file-name "linux-application/my_app" my-local-root))
(message "Project root is: %s" my-local-root)
(message "Concatenated path: %s" my-local-path)
(setq dap-debug-template-configurations
`(("Docker Pytest Debug"
:type "python"
:request "attach"
:hostName "localhost"
:port 5678
:name "Docker Pytest Debug"
:pathMappings (((:localRoot . ,my-local-path)
(:remoteRoot . "/usr/src/app/linux-application/my_app")))))))))))