vscode中Python插件按F5键调试没反应的解决方法

有的老版本软件有bug,有的系统设置比较老,不兼容,甚至软件之间有冲突,都是会产生一些问题。

https://www.jianshu.com/p/bf6b7af6184e
https://docs.pingcode.com/ask/ask-ask/179417.html?p=179417

在VSCode中调试其他软件执行的python文件

0. 实际场景

我有一段python代码想在Metashape中运行,但是又想在中间某一步停下来查看变量值。由于Metashape的python环境不容易在vscode中配置,所以直接用vscode调试单个文件的方式无法实现这个想法。还好,通过Python Debugger插件和在代码中使用debugpy库,可以得到一种新的调试方式,下面介绍详细步骤。

1. 在VSCode中安装插件Python Debugger

在这里插入图片描述

2. 配置launch.json

打开要执行的python文件所在文件夹,配置调试方式:
点击下图所示的“创建launch.json文件”:
在这里插入图片描述
vscode的中上部弹出菜单:
在这里插入图片描述
选择“Python Debugger”,弹出调试配置选项菜单:

在这里插入图片描述
选择“远程附加”,然后依次输入远程主机ip(默认为localhost,代表本机)和端口号(默认5678,也可以改为其他值):

在这里插入图片描述
在这里插入图片描述
完成后,在.vscode目录下自动生成了调试配置文件launch.json,内容如下:

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python 调试程序: 远程附加",
            "type": "debugpy",
            "request": "attach",
            "connect": {
                "host": "localhost",
                "port": 5678
            },
            "pathMappings": [
                {
                    "localRoot": "${workspaceFolder}",
                    "remoteRoot": "."
                }
            ]
        }
    ]
}

 
 

    这条配置的意思是,将调试器附加到localhost:5678端口。

    为了使断点功能正常工作,我们还需要修改上面的json内容

    1. "pathMappings"属性在本机调试时无需设置,因此应删去;
    2. 同时为了这个调试配置好记,把"name"属性的值改为"Python本机端口附加调试"

    修改后的launch.json如下:

    {
        // 使用 IntelliSense 了解相关属性。 
        // 悬停以查看现有属性的描述。
        // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
        "version": "0.2.0",
        "configurations": [
            {
                "name": "Python本机端口附加调试",
                "type": "debugpy",
                "request": "attach",
                "connect": {
                    "host": "localhost",
                    "port": 5678
                }
            }
        ]
    }
    
     
     

      3. 修改代码

      调试配置已经完成,接下来就是让代码监听localhost:5678端口。

      首先给出修改前的python代码:

      import os
      import numpy as np
      if __name__=='__main__':   
          a = np.array([0,0,1,1])
          b = a*2
          c=a+b
          print(c)
      
       
       

        想让代码中途停下来,不仅要让代码监听localhost:5678端口,还需要调用debugpy.breakpoint()

        import os
        import debugpy
        if __name__=='__main__':
            if debugpy.is_client_connected() is False:##### 防止重复listen
                debugpy.listen(("localhost", 5678))#####
                debugpy.wait_for_client()#####
            print('wait_for_client called')
            debugpy.breakpoint()#####
            a = np.array([0,0,1,1])
            b = a*2
            c=a+b
            print(c)
        
         
         

          在修改过的代码中,

              if debugpy.is_client_connected() is False:##### 防止重复listen
                  debugpy.listen(("localhost", 5678))#####
                  debugpy.wait_for_client()#####
          
           
           

            用于让debugpy监听本机5678端口,并且等待客户端(也就是VSCode的Python Debugger)连接;
            连接上调试器后,python继续往下执行代码,直到遇到debugpy.breakpoint()语句暂停执行,在VSCode中停下。此时便可查看各变量名,并且开始单步调试。

            4. 运行代码,启动Debugger

            完成2、3两步配置之后,先在Metashape中运行python脚本,再在VSCode中按配置的调试信息启动调试器,即可。
            代码执行在debugpy.breakpoint()后一句暂停。

            大意的同学可能会遇到如下图所示的问题:尝试设置断点发现,本应是红色实心圆的断点标志成了空心圆。也就是说,无法在目标行单击设置断点在这里插入图片描述
            这是由于,launch.json中默认生成的"pathMappings"属性还没有删去。删掉之后再运行,即可解决问题。

            或者,实在不愿意删去这个属性,那就把"localRoot"和"remoteRoot"改成正确的路径,也可以解决问题。

                        "pathMappings": [
                            {
                                "localRoot": "本地路径",
                                "remoteRoot": "远程路径"
                            }
                        ]
            
             
             

              这个属性实际上在Docker容器代码调试和远程调试中非常有用。

              5.参考

              VSCode官方文档——Debugging
              debugpy代码仓库
              调试在容器中运行的python代码

              更多参考

              https://worktile.com/kb/ask/568901.html
              https://blog.csdn.net/weixin_49457347/article/details/123601191
              https://blog.csdn.net/JingpengSun/article/details/130308831
              https://blog.csdn.net/sepnineth/article/details/136270431

              • 0
                点赞
              • 0
                收藏
                觉得还不错? 一键收藏
              • 0
                评论

              “相关推荐”对你有帮助么?

              • 非常没帮助
              • 没帮助
              • 一般
              • 有帮助
              • 非常有帮助
              提交
              评论
              添加红包

              请填写红包祝福语或标题

              红包个数最小为10个

              红包金额最低5元

              当前余额3.43前往充值 >
              需支付:10.00
              成就一亿技术人!
              领取后你会自动成为博主和红包主的粉丝 规则
              hope_wisdom
              发出的红包
              实付
              使用余额支付
              点击重新获取
              扫码支付
              钱包余额 0

              抵扣说明:

              1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
              2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

              余额充值