banner
TerryHu

Terry's Site

bilibili

用Pycharm断点调试远程uwsgi启动的代码

image

这个 blog 只为记录和梳理自己整个探索的流程,细节方面如有需要可以评论或者联系我,虽然估计也没人看

  1. 在公司 JetBrains 官网被禁的情况下,下载 Pycharm 2025.1.2 并激活专业版

  2. 保证本地与远程文件同步
    用 pycharm->deployment 一劳永逸

  3. 使用远程容器内的 py 解释器
    因为很多库装在容器镜像里的,pycharm 里可以用 ssh 连上容器然后用容器里的 py 解释器,要连上容器里的解释器就要在容器里装 sshd

yum install install openssh-server
vim /etc/ssh/sshd_config(PermitRootLoging改成yes)
/usr/sbin/sshd -D &

其实到这一步就可以单个文件远程调试了,看 Pycharm Run/Debug 里自带一个 current file 的调试模式,打上断点就能断点调试了

  1. 项目远程断点调试
    装 pydevd-pycharm~=251.26094.141 (具体哪个版本,你点开 python debug server 的 edit configurations 会提醒你的)
    pydevd-pycharm·PyPI里下载 tar.gz,用 tar -zxvf 解压,python3 setup.py install 安装,最后可以看 pip3 list 验证下

在项目代码入口加代码,ip 填本地的,port 只要不冲突的随便填一个

import pydevd_pycharm
pydevd_pycharm.settrace('1.2.3.4', port=50010, stdoutToServer=True, stderrToServer=True)

先启动本地 python debug server,会提示你 Waiting for process connection... 这时再启动远程项目,我这里用的是 uwsgi --ini platform.ini,uwsgi 会调用 wsgi.py 文件,我的 import pydevd_pycharm 就是加在这个文件开头的

但最后还是遇到一个问题,wsgi.py 文件里可以断点调试,但是之后发起 http 请求后在 url 处理函数里没停住,问题的表现就是请求看似被断点卡住,但实则 pycharm 也没抓住,大概率是因为 uwsgi 我配置的是多进程处理高并发请求,而后把 uwsgi 配置改成

[uwsgi]  
http=0.0.0.0:9000  
processes = 1  
threads = 1  
master = false  
vacuum=true  
enable-threads=true  
chdir=/xx/xxx
module=xxxx.wsgi

扫了一眼 python debug server 里有个 "allow multiple instances",这个我也给顺手勾选了,但这个选项到底是否搭嘎我也不知道。

Finally, it fucking works!

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。