调试嵌入式Python

2024-03-04

我遵循了有关嵌入和扩展 Python 运行时的官方 Python 文档。虽然我已经设法让它工作,但我不知道如何一起调试 C++ 和 Python 代码。

Visual Studio 提供了混合模式调试选项,您可以单步执行代码并从 C++ 断点跳转到 Python 断点。我尝试遵循有关此问题的官方微软文档,并且我让它工作,但仅适用于 c/c++ 扩展。当解释器被嵌入时,我无法让它工作,也找不到任何关于如何让它工作的资源。

是否可以嵌入解释器并且仍然能够在 Visual Studio 中一起调试 Python 和 C++ 代码?


好吧,事实证明我犯了几个错误。

官方文档提到了调试 Python 的 c++ 扩展。 Microsoft 文档将“Visual Studio 的 Python 工具”包称为您需要在 Visual Studio 安装程序中安装以进行混合模式调试的必要包。很公平。然而,混合模式调试的文档仅探讨了使用 Python 调试 C++ 扩展的场景。 发生的情况是,当您安装 Python 工具时,Visual Studio 会安装它自己的 Python 副本(或多个版本的 Python)。您可以在 Python 环境窗口中选择使用哪个版本的解释器。 但我试图调试在嵌入式解释器中运行的 Python 代码!发生的事情是,Visual Studio 启动了一个单独的、独立的 Python 解释器。它附加了一个调试器,但自然地,它不运行任何代码,因为所有 Python 脚本都在嵌入式解释器上运行。

解决方案如下(我使用的是 cPython):

  1. 安装 Visual Studio 的 Python 工具。其中包含 Python 调试器。
  2. 从源代码到目录构建 cPython。请注意,Python 需要两个目录:构建它的目录和克隆 cPython 存储库的目录。稍后我将参考这些目录。在 Windows 上,您可以使用提供的 PC 构建脚本构建 Python。
  3. 参考Python官方文档 https://docs.python.org/3/extending/embedding.html关于嵌入解释器。您需要从存储库添加包含文件并链接步骤 2 中构建的库。
  4. 您需要为嵌入式解释器创建一个 Visual Studio Python 环境。此环境设置让 Visual Studio 知道不要使用它自己的解释器。在Python环境窗口中,添加一个新环境:使用Python构建目录作为前缀路径。由此,Visual Studio 就会搞清楚其他大部分领域。最后,您可以向此环境添加自定义 PATH 环境变量。嵌入式解释器需要知道 Python 标准库以及其他构建工件的位置。只需将步骤 2 中记录的两个目录附加到 PATH 环境变量(例如“PATH=%PATH%;dir\to\build\python;dir\to\repositories\cpython”,不带引号)。
  5. 最后需要切换到Python\native调试并选择新的Python环境。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

调试嵌入式Python 的相关文章

  • 如何从数据框的单元格中获取值?

    我构建了一个条件 从我的数据框中提取一行 d2 df df l ext l ext df item item df wn wn df wd 1 现在我想从特定列中获取一个值 val d2 col name 但结果 我得到一个包含一行和一列
  • Python 垃圾收集有时在 Jupyter Notebook 中不起作用

    我的一些 Jupyter 笔记本经常出现 RAM 不足的情况 而且我似乎无法释放不再需要的内存 这是一个例子 import gc thing Thing result thing do something thing None gc col
  • 无法加载文件或程序集“EntityFramework,版本=6.0.0.0”

    我究竟做错了什么 我该如何解决这个问题 我有一个包含多个项目的解决方案 它是一个 MVC NET 4 5 Web 应用程序 在调试模式下启动后调用其中一个项目时 出现此错误 导致此错误的项目具有以下参考 两个都是版本6 0 0 0 应用程序
  • 防止GDB中的PLT(过程链接表)断点

    在最新版本的 GDB 中 在库函数调用上设置断点会导致多个实际断点 调用过程链接表 PLT 实际的函数调用 这意味着当调用库函数时 我们每次都会经历两次中断 在以前的 GDB 版本中 只会创建 2 因此您只能得到一次中断 那么问题来了 是否
  • 为 Python 2.4 改进“with”语句的直接替换

    您能否建议一种方法来编写可在 Python 2 4 中使用的 with 语句的直接替换代码 这将是一个 hack 但它可以让我更好地将我的项目移植到 Python 2 4 EDIT 删除了不相关的元类草图 只需使用 try finally
  • Flask SQLAlchemy 与 MyPy - 模型类型错误

    我遇到了以下组合问题flask sqlalchemy and mypy 当我定义一个新的 ORM 对象时 例如 class Foo db Model pass where db是使用创建的数据库SQL炼金术应用于flask app mypy
  • 在简单注入器中注册具有多个构造函数和字符串依赖项的类型

    我正在尝试弄清楚如何使用 Simple Injector 我在项目中使用了它 注册简单服务及其组件没有任何问题 但是 当组件具有两个以上实现接口的构造函数时 我想使用依赖注入器 public DAL IDAL private Logger
  • 使用 AdHocWorkspace 会导致“不支持语言‘C#’”。

    在VS2015中使用Microsoft CodeAnalysis CSharp Workspaces的RC2 这段代码会抛出异常 var tree CSharpSyntaxTree ParseText var workspace new A
  • 从事务范围调用 WCF 服务方法

    我有这样的代码 using TransactionScope scope TransactionScopeFactory CreateTransactionScope some methodes calls for which scope
  • 纯虚函数可能没有内联定义。为什么?

    纯虚函数是那些虚函数并且具有纯说明符 0 第 10 4 条第 2 款C 03 的内容告诉我们什么是抽象类 顺便说一句 如下 注意 函数声明不能 同时提供纯说明符和定义 尾注 示例 struct C virtual void f 0 ill
  • ASP.NET Core Razor Page 多路径路由

    我正在使用 ASP NET Core 2 0 Razor Pages 不是 MVC 构建系统 但在为页面添加多个路由时遇到问题 例如 所有页面都应该能够通过 abc com language 访问segment shop mypage 或
  • 在 C++ 和 Windows 中使用 XmlRpc

    我需要在 Windows 平台上使用 C 中的 XmlRpc 尽管我的朋友向我保证 XmlRpc 是一种 广泛可用的标准技术 但可用的库并不多 事实上 我只找到一个库可以在 Windows 上执行此操作 另外一个库声称 您必须做很多工作才能
  • django 组合对两个不同基本模型的查询

    我有两个不同的查询集 我想将两个查询集合并 q1 tbl nt 123 objects values list id value geometry filter restriction height exclude condition id
  • C++ [Windows] 可执行文件所在文件夹的路径[重复]

    这个问题在这里已经有答案了 我需要访问一些文件fstream在我的 Windows 上的 C 应用程序中 这些文件都位于我的exe文件所在文件夹的子文件夹中 获取当前可执行文件的文件夹路径的最简单且更重要的 最安全的方法是什么 Use 获取
  • 如何让你的精灵在pygame中跳跃

    目前我已经制作了一个平台游戏 可以左右移动我的角色 他从地上开始 关于如何让他跳的任何想法 因为我不明白 目前 如果我按住向上键 我的玩家精灵将连续向上移动 或者如果我按下它 我的玩家精灵将向上移动并保持向上 我想找个办法远离他 让我重新跌
  • 在Python中从列表中获取n个项目组的惯用方法? [复制]

    这个问题在这里已经有答案了 给定一个列表 A 1 2 3 4 5 6 是否有任何惯用的 Pythonic 方式来迭代它 就好像它是 B 1 2 3 4 5 6 除了索引之外 这感觉像是 C 的遗留物 for a1 a2 in A i A i
  • 启动画面后主窗口出现在其他窗口后面

    我有一个带有启动屏幕的 Windows 窗体应用程序 当我运行该应用程序时 启动屏幕显示正常 消失并加载应用程序的主窗体 但是 当我加载主窗体时 它出现在包含该应用程序的 Windows 资源管理器目录下 这是运行启动画面然后运行主窗体的代
  • c# 模拟 IFormFile CopyToAsync() 方法

    我正在对一个异步函数进行单元测试 该函数将 IFormFile 列表转换为我自己的任意数据库文件类列表 将文件数据转换为字节数组的方法是 internal async Task
  • 无法使 Polly 超时策略覆盖 HttpClient 默认超时

    我正在使用 Polly 重试策略 并且正如预期的那样 在重试过程中HttpClient达到 100 秒超时 我尝试了几种不同的方法来合并 Polly 超时策略 将超时移至每次重试而不是总计 但 100 秒超时仍然会触发 我读过大约 5 个
  • 新的 .NET 6 控制台模板中的 C# 函数重载不起作用

    我在尝试重载该函数时遇到错误Print object in the 新的 NET 6 C 控制台应用程序模板 https learn microsoft com en us dotnet core tutorials top level t

随机推荐