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

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

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

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

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

Copy
yum install install openssh-server
vim /etc/ssh/sshd_config（PermitRootLoging改成yes）
/usr/sbin/sshd -D &

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

项目远程断点调试
装 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 只要不冲突的随便填一个

Copy
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 配置改成

Copy
[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!