python卡死了怎么办?
一般的python程序卡死,可以用pycharm debug。但是有时候是python和c/c++库混合开发,比如pyqt或者boost python程序卡死,就非常难查。以前都是二分法注释代码查找问题,异常低效。
于是我尝试了vs2017的新功能:python & c++ 混合调试 Debug Python and C++ together
vs2017 python
vs一直被称为宇宙最强IDE,貌似python支持是vs2017新加的功能。相比pycharm之类的python编辑器,vs2017最大的优势就是在python和native c/c++代码的混合调试。包括:
- python / c++ 调用栈合并显示
- python / c++ 都可以断点
- python / c++ 代码之间step
- python / c++ 对象都可以watch
由于python的性能瓶颈,很多时候混合开发需要同时调试,这正是我们需要的!
环境搭建
下面以Sunshine
(一个PyQt5程序)为例
- 安装vs2017 python支持
-
导入Sunshine项目,会在主目录生成Sunshine.sln,以后都可以双击打开了
New Project->Python->From Existing Python Code
- 按照官网文档配置Enable mixed-mode debugging in a Python project
- 安装python的
pdb
文件,3.6直接用python installer安装,参考这里 - 配置
pdb
文件,主要是qt5的。qt5.9之后提供了pdb文件下载,5.11.2的在这里(PyQt最新版5.11.3,用的是Qt5.11.2,别问我为什么知道) - 选择
Sunshine.py
F5启动!
启动会比较慢,从输出窗口可以看出vs再加载各个py文件的symbol。。。(额,毕竟是试验性的功能)
让我们试试吧
卡死时候暂停
假设我们现在的Sunshine卡死了,这时候点击vs上的暂停按钮,就能立马停住。
回想起Pycharm停不住的恐惧!毕竟vs是native的暂停,宇宙第一!
强大的混合调试
这时候就能使用强大的混合调试功能了,包括但不限于:
- 同时查看python/c++ callstack
- callstack双击跳转到源码
- 切换线程
- 查看locals
混合的单步调试
以前python调到Qt里面去之后,就不知道发生了什么,现在可以从python step到c++中。
双击callstack中的c++ frame,vs会提示你打开。当然,这需要你本地下载了qt的c++代码。
然后你就可以在c++中打断点,做各种基本操作了
换成Attach模式
vs Debug启动python项目真的超级慢(感觉是有bug),而且我们经常是使用过程中进程卡死,这时候就需要Attach到卡死的python进程。
Debug->Attach to Process
连上之后所有功能一样使用
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2022-01-29 使用gprof2dot和graphivz生成程序运行调用图
2022-01-29 绘制函数调用图(call graph):doxygen + graphviz
2021-01-29 C++得到当前进程所占用的内存
2021-01-29 32位Exe程序突破系统内存限制
2021-01-29 zookeeper 的介绍以及使用
2019-01-29 Linux中的configure,make,make install到底在做些什么
2019-01-29 cmake中添加-fPIC编译选项方法