gdb 在 docker 上立即退出“进程已完成,退出代码 1”或 lldb“数据包返回错误 8”。另外:如何在 docker 中允许进行 C++ 调试

Gul*_*zar 2 c++ debugging docker

这花了我一整天的时间才找到,所以我将其发布以供将来参考。

我正在 docker 镜像上开发 C++。我正在使用克利翁。
我的代码是在调试模式下编译的,并且在运行模式下运行良好,但是当尝试调试时,进程会立即退出,并显示非常丰富的信息

Process finished with exit code 1
Run Code Online (Sandbox Code Playgroud)

当从调试器切换时
在此输入图像描述

在此输入图像描述

尝试调试仍然退出,但在 clion 中产生弹出窗口

'A packet returned error 8'
Run Code Online (Sandbox Code Playgroud)

相同的代码在本地计算机上调试得很好。

命令docker run

RUN_CMD="docker run --group-add ${DOCKER_GROUP_ID} \
                --env HOME=${HOME} \
                --env="DISPLAY" \
                --entrypoint /bin/bash \
                --interactive \
                --net "host" \
                --rm \
                --tty \
                --user=${USER_ID}:${GROUP_ID} \
                --volume ${HOME}:${HOME} \
                --volume /mnt:/mnt \
                $(cat ${HOME}/personal-uv-docker-flags) \
                -v "${HOME}/.Xauthority:${HOME}/.Xauthority:rw" \
                --volume /var/run/docker.sock:/var/run/docker.sock \
                --workdir ${HOME} \
                ${IMAGE} $(${DIR}/impl/known-tools.py cmd-line ${TOOL})"
Run Code Online (Sandbox Code Playgroud)

如何在docker上调试C++?

Gul*_*zar 5

最终,我发现了这条评论,这让我看到了这篇博文,其中我了解到 docker 默认情况下不允许进行 C++ 调试。

在 Docker 中进行 C++ 内存分析和调试需要参数 --cap-add=SYS_PTRACE 和 --security-opt seccomp=unconfined。

我添加了

--cap-add=SYS_PTRACE --security-opt seccomp=unconfined
Run Code Online (Sandbox Code Playgroud)

命令docker run,调试器能够连接。