最近在学习用C++ 调用Python, 发现用起来还挺方便的,就是在调试的方面遇到了些问题.
大部分Python IDE都提供了调试功能,比如Eric4, PythonWin, IDLE等, 不是这些IDE都不能调试C++中调用的Python脚本.
我目前的项目框架是使用MFC写的,它是一个关于摄像头测试的程序,由于经常改动所以我在程序里面加入了Python的脚本支持.
本来UI方面想用PyQt写的,但是考虑到这个项目保密性我就还是用MFC实现的.
对于Python的Embedded Debugging, 我开始在网上找了很多资料,最终选择了Winpdb的方案.
Winpdb可以实现Embedded Debugging,还可以实现网络Debugging,使用起来还是比较方便的.
具体使用方法如下:
1. 下载并安装winpdb
我目前使用的winpdb版本是winpdb-1.4.8.zip, 官方下载地址:http://winpdb.org/download/
下载完成后解压, 让后进入命令行并CD到解压目录 ,输入python.exe setup.py install 进行安装.
2. 包含winpdb库
在Python代码中输入import rpdb2
3. 调试文件
在代码要开始调试的地方加入rpdb2.start_embedded_debugger(密码)就可以开始调试了
4. 调试代码文本
由于测试程序和Python脚本要共享一些变量,所以我的测试程序要有调试代码文本的功能, 具体操作如下:
1) MFC中定义脚本文件名
CString strScriptFile;
strScriptFile.Format(_T("g_ScriptFile=r'%s'"), m_strScriptPath);
PyRun_SimpleString(strScriptFile);
2) 定义sourceProvider函数
fScript = g_ScriptFile
def sourceProviderMySelf(filename):
source = ""
file_object = open(fScript)
try:
source = file_object.read()
finally:
file_object.close( )
return source
3)在在代码要开始调试的地方加入一下代码:
rpdb2.start_embedded_debugger(密码, True, False, 超时时间(秒*60), sourceProviderMySelf)
5. 代码编写完成后, 当我们在MFC执行代码时程序会停到我们设置断点的位置, 这是我们就可以在WinPdb中调试了, 如下图: