如何在 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 来自回调。
我正在使用 Python C Api 在我们的应用程序中嵌入 python。当前,当用户执行他们的脚本时,我们调用 PyRun_SimpleString()
。 运行没问题。
我想扩展此功能以允许用户在 "Debug" 模式下 运行 脚本,就像在典型的 IDE 中一样,他们将被允许设置断点 "watches",并通常单步执行他们的脚本。
我查看了 API 规范,在谷歌上搜索了类似的功能,但没有找到任何有用的信息。
我确实玩过 PyEval_SetTrace()
,其中 returns 我需要的所有信息,但是,我们在与主应用程序相同的线程上执行 Python,但我没有找到"pause" python 当跟踪回调命中包含用户检查的断点的行号时执行的方式 - 并在稍后的点恢复执行。
我还看到有各种 "Frame" 功能,例如 PyEval_EvalFrame()
,但没有很多地方演示正确的用法。也许这些是我应该使用的功能?
如有任何帮助,我们将不胜感激!
PyEval_SetTrace()
正是您需要使用的 API。不确定为什么需要一些额外的方法来 "pause" 执行;当你的回调被调用时,执行已经暂停并且不会恢复,直到你 return 来自回调。