pyr*_*ade 15
所以我能够通过使用Visual Studio 2008成功解决我的问题.我松散地按照这里列出的步骤 -
http://www.velocityreviews.com/forums/t329214-debugging-python-extensions.html
这里有一些关于解决方法的提示 -
以下是我可能遇到此问题的其他人的步骤版本.
如果您还没有,请确保在VS中设置Python头和libs目录
一个.转到工具>选项>项目和解决方案> VC++目录.请务必分别将include和libs路径添加到Include和Library文件的路径中.(例如C:\Python27\include,C:\Python27\libs)
转到Python包含文件夹(例如C:\Python27\include,再次)并编辑pyconfig.h.注释掉该行# define Py_DEBUG并保存.转到您的libs文件夹(例如C:\Python27\libs)并制作副本python27.lib.命名副本python27_d.lib.
创建一个新项目.选择Win32 Project并将其命名为模块名称(在我的例子中pyodbc.单击Next,然后选择DLL for Application type并选中Empty Project.
在解决方案资源管理器中,右键单击"头文件",然后选择"添加">"现有项".选择所需的所有头文件.对源文件执行相同操作.
转到项目>属性,然后在配置属性下 -
一个.常规 - 确保使用正确的字符集.对我来说是Use Multi-Byte Character Set.Python 3可能需要Use Unicode Character Set.
湾 调试 - 在命令字段中输入Python的路径.(例如C:\Python27\python.exe).然后设置Attach to Yes.
C.链接器>常规 - 将输出文件更改为结束.pyd而不是.dll.
确保您的配置设置为Debug.转到Build> Build Solution.
打开cmd并cd进入pyd编译文件的目录.从cmd窗口启动python.要在此运行的python进程上附加调试器,请返回Visual Studio并单击绿色播放按钮以开始调试.您还可以使用Debugging - > Attach to Process ...现在返回Python并导入您的模块.玩,测试,并尝试打破它!
sch*_*mar 10
此工作流将为Release版本创建调试信息,因此您不必弄乱Python的原始包含和库文件.
下载并安装Windows调试工具
获取Python版本的符号文件并将其解压缩.对于Python 2.7.3,这将是http://www.python.org/ftp/python/2.7.3/python-2.7.3-pdb.zip.
修改setup.py以生成调试文件.您必须添加'/Zi'到
extra_compile_args和'/DEBUG'到extra_link_args.例:
ext_modules = [Extension('pyuv', sources=['src/pyuv.c'],
extra_compile_args=['/Zi'],
extra_link_args=['/DEBUG'])
]
Run Code Online (Sandbox Code Playgroud)始终构建扩展(python setup.py ...).
启动WinDbg并指定符号搜索路径(Ctrl + S).
C:\Path\To\Extension_pdb
C:\Path\To\Extracted\python-2.7.3-pdb
srv*;SRV*c:\tmp*http://msdl.microsoft.com/download/symbols
Run Code Online (Sandbox Code Playgroud)
最后一行将下载并缓存Windows模块所需的符号.
启动Python可执行文件(Ctrl + E).您可以直接执行脚本或以交互模式运行.
使用"Go"跳过初始断点(F5).
如果存在分段错误,则执行将中断,您将 在WinDbg控制台中看到类似访问冲突的内容 - 代码c0000005(第一次机会).
您可以通过键入!analyze -v
WinDbg控制台和当前堆栈跟踪来获取详细的异常信息kb.
这是一个这样的输出的例子.
如果省略第二步并使用Release配置构建项目,您应该能够将此方法与pyrospade 用Visual Studio调试 的答案结合起来 .
可以在这里找到WinDbg的进一步教程.