『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 6990|回复: 8

Visual Studio Code调试Home Assistant代码(WSL版)

[复制链接]

23

主题

302

帖子

2165

积分

论坛技术达人

积分
2165
金钱
1838
HASS币
110

活跃会员教程狂人

发表于 2019-9-9 08:58:27 | 显示全部楼层 |阅读模式
本帖最后由 cnk700i 于 2019-9-10 21:14 编辑

备注

  • 拷贝自博客,排版格式随缘,如有问题可看原文。。。
  • 不设置隐藏了,觉得有用帮忙顶一下让更多人看到~

正文


最近在看到M大的写插件教程帖子提及用pycharm断点调试插件,想到自己一直以来开发插件全靠logging埋点看输出、研究HA核心功能代码依靠人肉追踪,真有点内牛满面。不过M大的调试方法不是放在普通原代码上的,貌似也没法追踪HA主程序代码,用的工具也不是自己熟悉的,于是乎狠下决心去折腾实现能用VS Code对HA代码进行直接调试,发现坑真不少。


0.环境
  • Win10 LTSC 2019 + WSL(Ubuntu 18.04)
  • Visual Studio Code 1.38.0

1.问题及结论
这几天先是按官方的搭建开发环境文档去搭了(VS Code+容器)环境,结果发现压根没提到调试方面的操作。后来在官方的论坛中有搜到不少无法追踪断点的问题,不过没发现解决方法。再后来百度有人提及是目录位置问题才有了转机,瞎折腾测试一番总是解决了。
  • 问题
    • pip安装后,使用site-packages/homeassistant安装目录作为VS Code主目录,运行会跳过所有断点,显示“未验证的断点”。

                                     
      登录/注册后可看大图
    • 在其它路径放置HA代码目录homeassistant作为VS Code主目录,断点在__main__.py程序入口373行之后就不停了。

                                     
      登录/注册后可看大图

  • 结论

    • 要正常调试需要Linux环境,并且不能用pip安装目录的代码。
    • 要跟踪断点的代码需要在同一个VS Code主目录。
  • 解决方法

    • 将配置目录和程序代码放一起,这样可以调试自定义组件。
    • HA程序代码使用了不少from homeassistant import xx方式导入包,如果以HA代码目录比如d:\homeassistant作为VS Code主目录,则运行点就跑到pip的site-packages/homeassistant安装目录里的代码去,所以需要利用Python的搜索优先规则,给HA代码目录加多一层上级目录,使得导入的是VS Code主目录下的HA代码,也就能调试HA主程序代码


2.安装Linux子系统
  • Windows下启用Linux子系统功能,开始菜单->设置->应用和功能->程序和功能->启用或关闭Windows功能->适用于Linux的Windows子系统。

                                   
    登录/注册后可看大图

                                   
    登录/注册后可看大图
    INFO:也可以PowerShell(管理员权限)运行Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
    INFO:安装完毕需要重启。
  • 下载Ubuntu 18.04安装包。下载地址
    INFO:也可以在Microsoft Store中安装,不过下载安装包安装可以选择安装路径。
  • 解压安装包至安装路径,运行ubuntu1804.exe进行注册。

                                   
    登录/注册后可看大图
    INFO:在Microsoft Store安装的安装路径是在C:\Users\ [用户名]\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\LocalState\rootfs


3.VS Code
  • 下载安装Visual Studio Code
  • 安装Remote Development插件,用于远程WSL调试

                                   
    登录/注册后可看大图
    INFO:实际上用到的是Remote - WSL插件,安装Remote Development插件会打包安装。
  • 打开远程窗口连接WSL,在WSL上安装Python插件,代码调试需要;PS:注意截图截到本地窗口的了

                                   
    登录/注册后可看大图

                                   
    登录/注册后可看大图
  • 打开远程窗口连接WSL,在WSL上安装软件包,中途会有确认步骤

                                   
    登录/注册后可看大图
    复制
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # VS Code远程窗口的bash终端执行。PS:不嫌CMD辣眼睛也可以在CMD下敲命令安装。
    sudo su
    sed -i "s@http://\(security.ubuntu.com\|archive.ubuntu.com\)@http://mirrors.aliyun.com@g" /etc/apt/sources.list && \
    apt update && \
    apt install python3-pip && \
    mkdir -p ~/.pip/ && \
    echo "[global]" > ~/.pip/pip.conf && \
    echo "index-url = https://pypi.tuna.tsinghua.edu.cn/simple" >> ~/.pip/pip.conf && \
    echo "[install]" >> ~/.pip/pip.conf && \
    echo "trusted-host = https://pypi.tuna.tsinghua.edu.cn" >> ~/.pip/pip.conf && \
    pip3 install homeassistant

    INFO:Ctrl+Shift+`打开新的终端。


4.准备代码目录
  • 新建一个文件夹d:\workspace,作为VS Code主目录,内容如下:

    • 放入homeassistant目录,github下载指定版本HA取相应的文件夹即可。
    • 新建config目录,作为HA配置目录。
    • 新建debug.py,用于启动HA,内容如下:
      复制
      1
      2
      3
      4
      5
      from homeassistant import __main__ as hass_entry
      import sys

      if __name__ == "__main__":
          sys.exit(hass_entry.main())
    • 用CMD命令新建.vscode目录
      复制
      1
      2
      3
      rem 命令行下新建.vscode文件夹,直接右键新建会报错
      cd d:\workspace
      mkdir .vscode
    • .vscode目录下新建launch.json文件
      复制
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      //launch.json内容
      {
          // 使用 IntelliSense 了解相关属性。
          // 悬停以查看现有属性的描述。
          // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
          "version": "0.2.0",
          "configurations": [
              {
                  "name": "Home Assistant Debug",
                  "type": "python",
                  "request": "launch",
                  "program": "${workspaceRoot}/debug.py", //运行HA
                  "console": "integratedTerminal",
                  "args": ["-c", "config"], //指定配置文件
              }
          ]
      }

    INFO:该步骤也可以打开文件夹后,在VS Code调试页添加配置,添加完配置后会生成对应文件。
  • 最终目录结构如图

                                   
    登录/注册后可看大图


5.开始调试
  • 加载主目录,有两种方法:

    • 先打开文件夹,再点左下角弹出选项选”Reopen Folder in WSL”

                                     
      登录/注册后可看大图
    • 点左下角弹出选项选”New Window”,在新建窗口再打开文件夹(WSL中的windows文件夹路径对应为/mnt/[盘符]/[文件夹A]/[文件夹B])

                                     
      登录/注册后可看大图

                                     
      登录/注册后可看大图
    • 后续可以快速重新打开

                                     
      登录/注册后可看大图

  • 设置python解析器,一般会自动识别出来,直接选择即可。

                                   
    登录/注册后可看大图
    INFO:WSL环境自带有3.6.8版本,Windows不用安装Python。
  • 按F5即可运行调试。

                                   
    登录/注册后可看大图
    WARN:首次运行先不要设断点,待配置目录初始化完成后,再加入配置信息调试。


6.其它
  • 有时候无法正常退出调试,会占用8123端口导致无法访问网页,需要手工终止一下进程。

                                   
    登录/注册后可看大图
    复制
    1
    2
    3
    sudo su
    ps -aux | grep python3 | grep config
    kill -9 [进程号]


7.小结
  • VS Code的远程调试挺有意思的,一开始看的是容器方式的文档,看得各种懵逼,后来改看WSL方式的发现简单不少,调试果然是一门水深的学问。




评分

参与人数 6金钱 +95 HASS币 +20 收起 理由
ttimasdf + 20 感谢楼主分享!
chiunownow + 7 在下对你的景仰犹如滔滔长江之水,连绵不绝.
lidicn + 20 论坛有你更精彩!
+ 20 + 20 膜拜大神!
neroxps + 20 感谢楼主分享!
jyz_0501 + 8 论坛有你更精彩!

查看全部评分

博客 https://ljr.im
回复

使用道具 举报

1

主题

237

帖子

962

积分

论坛积极会员

积分
962
金钱
725
HASS币
0
发表于 2019-9-9 10:56:17 | 显示全部楼层
这对于小白来说,属于高阶教程了。天书啊。不过还是点赞收藏了再说
回复

使用道具 举报

3

主题

78

帖子

243

积分

中级会员

Rank: 3Rank: 3

积分
243
金钱
165
HASS币
0
发表于 2019-9-9 11:23:33 | 显示全部楼层
好高端,小白还是继续Log吧。
回复

使用道具 举报

73

主题

1165

帖子

6669

积分

论坛元老

Rank: 8Rank: 8

积分
6669
金钱
5499
HASS币
30
发表于 2019-9-10 14:42:32 | 显示全部楼层
有空好好学习一下
回复

使用道具 举报

21

主题

188

帖子

1483

积分

金牌会员

Rank: 6Rank: 6

积分
1483
金钱
1290
HASS币
60
发表于 2019-11-1 08:45:55 | 显示全部楼层
学习一下。我写企业微信插件全靠print()……玩蛇才三天 丢人了
回复

使用道具 举报

0

主题

246

帖子

1825

积分

金牌会员

Rank: 6Rank: 6

积分
1825
金钱
1579
HASS币
0
发表于 2019-11-8 10:21:47 | 显示全部楼层
感谢楼主分享
回复

使用道具 举报

0

主题

19

帖子

120

积分

注册会员

Rank: 2

积分
120
金钱
101
HASS币
0
发表于 2020-4-18 23:39:02 | 显示全部楼层
楼主大佬,感谢分享
回复

使用道具 举报

1

主题

18

帖子

172

积分

论坛分享达人

积分
172
金钱
154
HASS币
10
发表于 2024-7-30 21:36:17 | 显示全部楼层
ImportError: cannot import name 'bytes_to_ulid_or_none' from 'ulid_transform' 照着步骤来报这个错,暂时解决不了
回复

使用道具 举报

0

主题

21

帖子

64

积分

注册会员

Rank: 2

积分
64
金钱
43
HASS币
0
发表于 6 天前 | 显示全部楼层
学习学习
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-12-22 11:47 , Processed in 0.162562 second(s), 33 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表