Python vscode 中调试 python 代码

namedlock · 2023年02月01日 · 最后由 huaxiaotian 回复于 2024年07月28日 · 3302 次阅读

vscode 使用的好,真的不比收费软件差。vscode 的代码提示已经很好了,debug 功能也不差。

前提

本文默认 PC 中已经安装 python3、vscode,微软提供的 python 插件和 Python Extension Pack。

调试代码

我们使用如何创建一个超时后不会被 kill 的 python 子进程中的代码来进行调试

import subprocess
from subprocess import TimeoutExpired

if __name__ == '__main__':
    try:
        proc=subprocess.Popen('adb install -g -r -t ~/tmp/app-uiautomator.apk', shell=True, text=True, stdout=subprocess.PIPE)
stdout,errs = proc.communicate(timeout=60)
        print(f'stdout1:\n{stdout}')
    except TimeoutExpired as te:
        print('timeout')
        stdout,errs = proc.communicate()
        print(f'stdout2:\n{stdout}')

调试设置

打开 vscode 后,使用快捷键 shift+command+p 后输入 setting

打开设置页面,如没有以下配置,请加入以下配置

configurations 里的代码

{
    "name":"Python: Current File (Integrated Terminal)",
    "type":"python",
    "request":"launch",
    "program":"${file}",
    "console":"integratedTerminal"
}

解释其中关键的配置选项:

  • name 出现在调试下拉菜单中的名字
  • type 调试类型 * request 执行调试的模式,可选 luanch 和 attch 其中之一
  • program 填写需要调试的文件的全路径名字,${file}代表当前打开的文件 添加后就可以调试当前打开的 python 文件了。

传递代码运行参数

增加 args 配置即可

{
    "name":"Python: Current File (Integrated Terminal)_args",
    "type":"python",
    "request":"launch",
    "program":"${file}",
    "console":"integratedTerminal",
    "args":[
        "--port",
        "1593"
    ]
}

重新执行后,可以在控制台看到我们在 settings.json 中添加的--port 和 1593 参数被打印输出了。

attach 方式调试

如果参数经常需要变化,把参数写死在配置文件里有时也不太方便,我们可以使用 attach 模式来进行调试。
## 安装 debugpy

pip3 install debugpy

setting.json 配置添加

{
    "name":"Python: Attach",
    "type":"python",
    "request":"attach",
    "connect":{
        "host":"localhost",
        "port":5678
    }
}

在命令行执行程序

python3 -m debugpy --listen 5678 --wait-for-client test_subprocess.py

在 vscode 中执行 python attach

attach 成功后,跳过中断点后,就能在控制台里看到输出日志了。

参考文档

后语

如果大家喜欢我写的文章,欢迎大家点赞、收藏、评论留言或者私信与我交流。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 1 条回复 时间 点赞

请教下 Python Test Explorer for Visual Studio Code 这个插件如何设定以 sudo 权限,收集用例

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册