从 python 调试 VS2010 中的 c++ dll

Posted

技术标签:

【中文标题】从 python 调试 VS2010 中的 c++ dll【英文标题】:debugging a c++ dll in VS2010, from python 【发布时间】:2012-03-02 20:54:53 【问题描述】:

我在 VS2010 下有一个用 c++ 构建的 dll,我从一个 python 项目中调用它。

我有一个错误,在 dll 中,我希望能够使用 VS 工具进行调试,进入解决方案,直到我到达“读取无效内存位置”的任务。

调试/单步执行函数没有单步执行 dll 中的函数代码。

我尝试附加调试器(并从命令行运行 python 代码/在给我 pid 的 raw_input 处停止,然后附加调试器)。同样的事情发生了。我在 python 代码中打了断点,但在 dll 中没有。

我最终发现了我的错误,在我的头撞到我的显示器之后,使用 dll 中的旧式跟踪。但是必须有一种方法能够在 VS 中调试现有/打开的项目......我将再次遇到这个问题,所以我希望现在能学到一些东西,并避免将来损坏我的显示器。 :)

注意:c++ dll和pdb文件和python文件都在同一个目录下,它们当然是自动内置到Debug文件夹中的,它们也在系统路径下的文件夹中。启用任何可能的 DEBUG 符号。我正在使用 python 2.7。

【问题讨论】:

【参考方案1】:

如果您希望能够进入并调试 dll,则需要在 bin 目录中拥有 .pdb 文件,否则您将无法访问任何调试符号。此 .pdb 允许 Visual Studio 读取 .dll 文件并单步执行其方法调用。

【讨论】:

bin 目录在哪里?我必须为 cdll.LoadLibrary 手动指定我的 dll 的路径 - 在 path\foldername\output\Win32\Debug\ 中。这也是我看到 .pdb 文件的地方。我没有 bin 目录 - python 解决方案不会创建任何其他目录。 好的,如果 pdb 文件已经存在,那么它应该在您构建项目时加载这些符号。当您运行 exe 时,您可以将调试器附加到此进程,并且当您点击该部分代码时它应该进入文件(在第一个使用 dll 的方法上放置断点) 它没有——这就是我如此困惑的原因。顺便说一句,我从 python 程序(不是 exe)调用 dll 您是否尝试过从外部启动程序,然后将调试器附加到进程?对于 dll 来说,这通常是你必须做的才能让它们被拾取。 是的,我试过了 - 请参阅我帖子中的第 3 段。这就是其他人(不是来自论坛)的建议。它没有用。

以上是关于从 python 调试 VS2010 中的 c++ dll的主要内容,如果未能解决你的问题,请参考以下文章

C++中的VS2010调试器,“unused=???”的意思或“未使用=0”

vs2012调试时怎么查看堆中的数据(动态数组)? 求详细解答。 用的c++

VS2010 模块列表中缺少 DLL

vs2010调试c++总是说此项目已经过期怎么办

自定义 VS C++ 调试器 [重复]

有没有办法从 VS 中的调试器中转储流