[lldb-dev] Remote debugging a docker process
Mason Kramer via lldb-dev
lldb-dev at lists.llvm.org
Sat Mar 2 19:17:42 PST 2019
Greetings and salutations!
I am trying to remotely debug a process running inside of a Docker
container. I can connect to lldb-server from my host, but can't launch a
debugging process. I can debug the target locally, inside or outside of
the container.
Container:
lldb-server-4.0 platform --verbose --listen "*:5000"
Connection established.
Host:
$ lldb
(lldb) target create target/debug/hist
(lldb) platform connect connect://localhost:5000
Platform: remote-linux
Triple: x86_64-pc-linux-gnu
OS Version: 4.15.0 (4.15.0-45-generic)
Kernel: #48-Ubuntu SMP Tue Jan 29 16:28:13 UTC 2019
Hostname: 4ce058c8dba3
Connected: yes
WorkingDir: /seraphim
(lldb) run
error: connect remote failed (Connection refused)
error: process launch failed: Connection refused
Docker is a containerization system that sandboxes the processes it
manages in various ways. Processes inside of the container are running
on a virtualized network stack and do not know the IP address of their
host and cannot communicate to the outside except on "published" ports,
for instance.
A mail [1] on this list dating to 2017 suggested the problem is that the
gdbserver child process spawned by `process launch` can't talk to Docker
over the firewall. However, I don't believe it's the issue - or at
least, not the only one.
I isolated this problem by binding 5000 and 5001 in the container to the
same values in the host. Then, I restricted the acceptable range of
gdbserver ports to just 5001, using the flags suggested in the email.
lldb-server-4.0 platform --verbose --listen "*:5000"
--min-gdbserver-port 5001 --max-gdbserver-port 5001
This had no apparent effect.
I also found a pull request [2] from 2018 which suggested that the
problem is the virtualized IP address in the container. That is a
promising direction, but unfortunately, that patch was abandoned and
nothing took its place.
There are traces of this issue all over the net, but none of them that I
have found were ever resolved. I think that remote-debugging a Docker
container is an increasingly important use-case for lldb-remote, and if
anyone is interested in this, I'm happy to work with you to hammer it out.
Unanswered Stack Overflow [3]
A bug filed on Swift's tracker [4]
[1] http://lists.llvm.org/pipermail/lldb-dev/2017-February/012004.html
[2] https://reviews.llvm.org/D42845
[3]
https://stackoverflow.com/questions/45533026/remote-lldb-debugging-docker-container
[4] https://bugs.swift.org/browse/SR-3596?attachmentViewMode=list
More information about the lldb-dev
mailing list