本文主要解决pycharm与docker desktop容器里面的代码调试的问题。

我自己的宿主机是windows系统的,需要的深度学习环境是需要linux系统ubuntu的,当初为了方便能在自己电脑上运行使用深度学习环境,使用了docker来管理,这里吐槽docker的镜像创建好麻烦,对新手很不友好。后面为了理解代码,需要调试看看代码的运行过程,使用了很多方法。这里介绍3个方法

目录

方法一:使用调试解释器(推荐)

步骤1.此时你已经创建好了容器,并且通过pycharm连接上了容器,这个时候你需要启动容器

步骤2.添加解释器,使用调试服务器。

步骤3.按照提示安装依赖​编辑

步骤4.启动调试

方法二:使用python解释器

方法三:使用Pdb,加入breakpoint()


首先第一个和第二个方法pycharm得是专业版的(vscode我不知道行不行,我习惯用pycharm),可以找一找破解的资源,买点付费的资源也不贵。

方法一:使用调试解释器(推荐)

步骤1.此时你已经创建好了容器,并且通过pycharm连接上了容器,这个时候你需要启动容器

步骤2.添加解释器,使用调试服务器。

IDE主机名和端口按照我的填就行,主机名一定得是0.0.0.0,因为这样好像可以检测所有端口。路径映射就是你宿主机上的文件映射到你虚拟机里面的文件,当初创建容器的时候应该是提前设置好的,比如我的创建容器的代码:

docker run --network host -it --gpus all --name pillarnext_debug   --shm-size=16g  -v "D:/Program Files/Docker Desktop/pytorch_cu124_devel_ubantu20.04/pillarnext-main:/home/pillarnext"   --workdir /home/pillarnext   pillarnext:debug   bash

这里就指定了宿主机的本地路径和容器内部的工作路径

步骤3.按照提示安装依赖

安装的版本按照你们自己的提示的版本装,我这里显示的是243.26574.90。

pip install pydevd-pycharm~=243.26574.90

另外注意安装依赖需要进入容器终端,并在你自己的环境(我这里是pillarnext_py39)里面装

装好后需要在需要调试的代码里面加入两行代码,把上面提示的代码复制下来,把'0.0.0.0’,改成

'host.docker.internal'
(host.docker.internal 是 Docker Desktop 专门提供的域名,自动解析为 Windows 宿主机 IP。)

步骤4.启动调试

可以看到2的部分提示等待进程连接

这个时候得在你的代码里面设置断点

这个时候开始在容器的终端里面输入指令运行该代码,调试器就能捕捉到进程,进行调试

这样就算是成功了,可以进行调试了

方法二:使用python解释器

这个方法问题出在PyCharm 调试器的路径处理机制上。PyCharm 的调试器pydevd.py在传递--file参数时,没有正确使用路径映射将本地路径转换为容器内的 Linux 格式路径,而是直接使用了 Windows 风格的反斜杠路径​,我没成功,跟pycharm版本有关,不排除成功的可能性

把相应参数设置好,这里不过多赘述。重点是使用python路径要搞对,我图中的就是怎么连接容器内部的环境的python不多说,网上有教程。有问题再说

弄好后,正常选好代码进行调试即可

方法三:使用Pdb,加入breakpoint()

这个方法可以当作保底,可以直接在终端命令行使用,不需要pychram。

在你想调试的地方加入breakpoint(),注意这里代码一定改在容器内部的代码才有效果,因为你的解释器是在容器内部的,跟你的代码是在一块的。我这里因为对宿主机的代码文件做了映射,所以在宿主机里面改会自动映射到容器里面。

正常的在终端输入指令运行

显示(Pdb)就是成功进入了调试状态,至于怎么输入指令调试网上也有教程,这里不过多赘述

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐