Skip to content

How to use the debugpy adapter over tramp? #143

@jsadusk

Description

@jsadusk

Deleting my previous issue because I have a working config, it is just very manual and I'm trying to figure out if there's a way to do this automatically.

Here's my use case. I am developing python, remotely via tramp over ssh, and my python is being launched by the bazel build system. This has a few implications:

  • dape is unable to launch debugpy directly, because all launching is done by bazel run with a config option for debugpy. As a result, an attach config is necessary, and the debugpy config entry doesn't work
  • Since I am developing over ssh, the only way I can reach the debugpy port is using ssh port forwarding, so dape needs to connect to localhost
  • Source paths to place the marker need to be prefixed by the tramp prefix for the current project
  • Bazel has the lovely behavior that it doesn't launch code directly from the project directory, it makes a sandbox directory and symlinks python source back to it. Dape needs to map paths from the sandbox back to the source dir

Given all this, I was able to make dape work, beautifully I might add, with this config:

(add-to-list 'dape-configs
     '(debugpy-attach .
           (modes (python-mode python-ts-mode)
                  port 5678
                  host "localhost"
                  :request "attach"
                  :type "python"
                  :cwd dape-cwd
                  :program dape-buffer-default
                  :args []
                  :justMyCode nil
                  :console "integratedTerminal"
                  :showReturnValue t
                  :stopOnEntry nil
                  prefix-local "/ssh:dev:/home/jsadusk/my/project/dir/"
                  prefix-remote "/data/jsadusk/cache/bazel/_bazel_jsadusk/08376eed31abaac569ecaec66be8adad/execroot/waabi-av/bazel-out/k8-opt/bin/my-bazel-run/-arget.runfiles/base-path/"
                  )
           )
     )

(paths are not real for security reasons)

Setting prefix-local and prefix-remote made everything work. But there's no reason those can't be automatically determined.
First, /ssh:dev: is in the project root, but it looks like dape--path doesn't make use of the project dir.
Second, the file returned by the debugger inside the sandbox is a symlink. I think if dape-path followed symlinks it would be able to resolve this easily.

Does this seem like a reasonable enhancement? I may try to make a PR myself to do this if you don't mind.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions