侧边栏壁纸
博主头像
AI研究僧

hycj89@163.com

  • 累计撰写 1,899 篇文章
  • 累计创建 179 个标签
  • 累计收到 1 条评论
标签搜索

目 录CONTENT

文章目录

pycharm远程调试(debug)openstack代码

AI研究僧
2022-06-08 / 0 评论 / 0 点赞 / 634 阅读 / 700 字

需求

项目需要对openstack的某些组件进行二次开发,但是openstack组件都安装在服务器上,在服务器调试比较麻烦,因此想在本地通过pycharm进行调试。

本方案不仅适用于调试openstack,适用于使用pycharm调试任何项目代码

环境

pycharm
image
服务器:ubuntu18.04
openstack: stable/stein

pycharm配置

打开pycharm,创建一个项目,注意该项目是要和服务器项目文件对应的,因此命名自行注意即可。本项目以zun-dev命名,因为要调试zun组件

SFTP配置

Snipaste_2022-06-08_10-04-51

Snipaste_2022-06-08_10-06-49

Snipaste_2022-06-07_17-55-41
点击ok 创建完成
从服务器下载代码(注意这里是因为服务器先有代码,如果是本地先有代码则是先将代码上传到服务器)
Snipaste_2022-06-07_17-56-54

远程解释器配置

Snipaste_2022-06-07_17-57-45

Snipaste_2022-06-07_17-58-18

Snipaste_2022-06-07_18-00-26

Snipaste_2022-06-07_18-01-18

至此python解释器使用的是服务器的解释器

远程debug配置

Snipaste_2022-06-07_18-03-26

Snipaste_2022-06-07_18-03-58

Snipaste_2022-06-07_18-06-28

Snipaste_2022-06-08_09-28-37
注意上图中的pydevd插件,安装时按照当前的pycharm版本在服务器上安装即可。

如果服务器无法联网,则需要将本机文件上传,文件在
Snipaste_2022-06-08_09-29-24
pydevd-pycharm.egg文件上传到服务器任意位置,如果能安装则安装,不过不建议,很可能安装失败。后续会有说明如何使用

远程debug

从前边配置debug时,能够看到pydevd的使用说明,代码如下:

# 该代码是当通过pip安装pydevd插件时的写法
import pydevd_pycharm
pydevd_pycharm.settrace('172.30.2.168', port=54321, stdoutToServer=True, stderrToServer=True)  # 这里的ip和port就是之前配置的

# 下边代码是将pydevd-pycharm.egg上传至服务器时的写法,假设文件上传至服务器的/opt/debug-egg/目录中
import sys
sys.path.append("/opt/debug-egg/pydevd-pycharm.egg")
import pydevd_pycharm

pydevd_pycharm.settrace('172.20.208.95', port=12345, stdoutToServer=True, stderrToServer=True)

只需要将如上代码添加到需要调试的地方,然后将代码上传至服务器。
image-1654654561924
点击debug图标
image-1654654583331
会显示等待连接

服务器重启该服务的代码,等到运行到调试代码处时,会出现如下情况
image-1654654635773
可以看到已经建立连接
之后就可以正常调试了,也可以正常打断点。

如果不能在调试代码处停下,可能是因为多线程导致的。可以尝试如下方法,本例以zun源码演示

在源代码的cmd/__init__.py中修改

import eventlet

eventlet.monkey_patch(os=False, thread=False)  # 这是修改后代码
#eventlet.monkey_patch()  # 这是原始代码

其他服务一般也有类似的配置项

参考

https://www.jetbrains.com/help/pycharm/remote-debugging-with-product.html

博主关闭了所有页面的评论