C++调用Python并用Winpdb调试

最近在学习用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中调试了, 如下图:


猜你喜欢

转载自blog.csdn.net/mishara/article/details/9021189