VS调试python中的DLL

来源:互联网 发布:js json 第n个 编辑:程序博客网 时间:2024/06/04 18:34

    本文主要以前面两篇文章所讲的“LicenseSystem”程序为例,介绍“python和C混合编程”中的调试方法,它包括:

1)python程序调试 (pdb)。

2)配置VS为python的IDE。

3)VS调试python中的DLL。


一、python程序调试(pdb)

    本段主要参考博客:“Python 101: An Introduction to Python's Debugger”

    https://www.blog.pythonlibrary.org/2014/03/19/pytho-101-an-introduction-to-pythons-debugger/

    此外,也阅读了python的官方文档,关于pdb - module的介绍

    https://docs.python.org/3.6/library/pdb.html?highlight=pdb#module-pdb

    综上来说,python程序调试主要是使用pdb模块,大致有两种启动方式:

1)先进入python命令行


    这种方法要先导入pdb,然后导入待调试的程序文件,而且需要指定入口函数。我的程序启动文件“start.py”中没有明确定义入口函数,故它报错了。

2)将pdb以参数形式直接启动



        如上图所示,输入“python -m pdb start.py”即可启动pdb调试。其中“-m”,应该是“module”的意思,pdb也是python的一个模块。

    上图也演示了“打断点” break、“单步” step、和“连续运行” continue、“退出” quit等基本操作。其他更多的操作,可以去阅读pdb文档,并慢慢体会。

The module pdb defines an interactive source code debugger for Python programs. It supports setting (conditional) breakpoints and single stepping at the source line level, inspection of stack frames, source code listing, and evaluation of arbitrary Python code in the context of any stack frame. It also supports post-mortem debugging and can be called under program control.


二、配置IDE

    Visual Studio号称“全宇宙第一IDE”,它当然也支持python啦。我的电脑上安装的是VS2015,而python是WinPython,配置的方法稍有点不同。

1,新建python应用程序

    如下图所示,点击“新建项目” -> “python” -> “python application”



    如果VS中还没有python工具,它会自动下载并安装。安装好后,就可以在其中编辑python程序了。


2,配置python环境

    编辑好python程序后,点击“启动run”,VS会提示“We didn't find any interpreters”——没找到python解释器。同时,下面还给出了四个链接文档:“Download and install Python”、“I already have one”。。。

    如果本机上还没有安装python,可以参照前一个链接。而我电脑上已经有WinPython,所以我参考的是后一个链接文章。

1)打开Python Environments 

    "Select the View > Other Windows > Python Environments menu command."

2)点击“Custom...”,配置python环境

    点击“Custom”    后,它会显示一个配置界面,我们只需要填写“Description”和选择好“Prefix path”,然后点击“Autodetect”即可。VS会智能感知并配置python环境,配置好后,点击“Apply”,重启VS后就生效了。

    以上这些在VS的链接文档里都有,还配有例图,我就不详细描述了。

值得注意的是:VS2015目前不支持python3.6,如果你安装的是Python3.6,那么在配置 Python Environments时,会发现“Custom...”按钮变灰(greyed out),此时,即使你重新安装Python 3.5,也不能解决这个问题。

    唯一的办法是:开启注册表编辑器(regedit),找到“KEY_CURRENT_USER\Software\Microsoft\VisualStudio\14.0\PythonTools\Interpreters”,删除该目录下的文件夹,然后重启VS2015。

    这个解决办法来自“stackoverflow”:

    https://stackoverflow.com/questions/40430831/vs-2015-python-environments-greyed-out


三、VS调试python中的DLL

    还是以“LicenseSystem”程序为例,我们要调试的就是其中的“EncryptorDll.dll”这个C++共享库。

1,首先用VS打开“EncryptorDll.dll”的源码工程。

    右键打开“工程属性”,并作如下配置



    如上图所示,主要配置启动程序为“cmd.exe”,然后配置工作目录。


2,将python程序拷贝到上述的工作目录下。

    所谓的python程序,就是“start.py”和“mainwindow.py”两个文件。


3,启动调试

    与普通VS C++程序一样,按“F5”或点“启动Window调试器”。此时,启动的是cmd.exe程序,并跳转到了之前预设的工作目录下。

    在cmd窗口输入“python start.py”,启动待调试的python程序


4,将VS调试器附加到“目标程序”

    这种调试的本质其实是跨进程调试:python程序和C程序是运行在不同进程空间中的。

    点击VS的工具栏菜单“debug” -> " Attach to Process",就会跳出一个“可用进程”列表。在这个列表中选择目标进程,点击“Attach”即可。


5,开始调试C程序

    经过上面的设置之后,在C程序中打断点,然后让python程序继续运行,当程序调到C程序时,即可命中相应的断点。此时,C程序的调试和一般的工程没有什么区别。

    

    这一部分主要参考:

    https://stackoverflow.com/questions/27154325/how-to-debug-a-windows-dll-used-inside-python


后记:关于VS与Python,Mircrosoft官方给出了一份详细的文档:

            https://docs.microsoft.com/zh-cn/visualstudio/python/python-in-visual-studio


原创粉丝点击