如何在 Python 的嵌入中实现断点功能

How to implement breakpoint functionality in a embedding of Python

我正在使用 Python C Api 在我们的应用程序中嵌入 python。当前,当用户执行他们的脚本时,我们调用 PyRun_SimpleString()。 运行没问题。

我想扩展此功能以允许用户在 "Debug" 模式下 运行 脚本,就像在典型的 IDE 中一样,他们将被允许设置断点 "watches",并通常单步执行他们的脚本。

我查看了 API 规范,在谷歌上搜索了类似的功能,但没有找到任何有用的信息。

我确实玩过 PyEval_SetTrace(),其中 returns 我需要的所有信息,但是,我们在与主应用程序相同的线程上执行 Python,但我没有找到"pause" python 当跟踪回调命中包含用户检查的断点的行号时执行的方式 - 并在稍后的点恢复执行。

我还看到有各种 "Frame" 功能,例如 PyEval_EvalFrame(),但没有很多地方演示正确的用法。也许这些是我应该使用的功能?

如有任何帮助,我们将不胜感激!

PyEval_SetTrace() 正是您需要使用的 API。不确定为什么需要一些额外的方法来 "pause" 执行;当你的回调被调用时,执行已经暂停并且不会恢复,直到你 return 来自回调。