gdb 立即退出 `Process finished with exit code 1` 或 lldb `'A packet returned error 8'` on docker

gdb exits immediately `Process finished with exit code 1` or lldb `'A packet returned error 8'` on docker

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

我正在 docker 图像上开发 C++。我正在使用 clion。
我的代码是在调试模式下编译的,运行 在 运行 模式下很好,但是当尝试调试时,进程立即退出并显示非常有用的

Process finished with exit code 1


切换调试器时

尝试调试仍然存在,但会在 clion 中产生一个弹出窗口

'A packet returned error 8'

相同的代码在本地计算机上可以正常调试。

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})"

如何在 docker 上调试 C++?

最终,我找到了 this comment which led me to this blog post,其中我了解到 docker 默认情况下不允许进行 C++ 调试。

The arguments --cap-add=SYS_PTRACE and --security-opt seccomp=unconfined are required for C++ memory profiling and debugging in Docker.

我加了

--cap-add=SYS_PTRACE --security-opt seccomp=unconfined

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