debugging gdb exits immediately `Process finished with exit code 1` or lldb 'A packet returned error 8'` on docker. Also:如何在docker中允许c++调试

mbzjlibv  于 2023-10-24  发布在  Docker
关注(0)|答案(1)|浏览(127)

这花了我整整一天的时间才找到,所以我把它贴出来供将来参考。
我在一个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++?

fslejnso

fslejnso1#

最后,我发现了这条评论,这条评论让我想到了this blog post,在这条评论中,我了解到Docker默认情况下不允许C调试。
参数--cap-add= unlimited_PTRACE和--security-opt seccomp=unconfined是Docker中C
内存分析和调试所必需的。
我加

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

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

相关问题