出于各种原因,在一个项目中,我通过从各种源文件生成AST并将其编译为字节码来生成可执行代码(尽管这个问题也适用于直接生成字节码的情况,我想)。
经过一些实验,看起来调试器基本上只是使用嵌入在AST中的
对于我的项目来说,这不一定是这样的,可执行代码可以从多个来源拼凑而成,并且某些或所有这些来源可能已经从网络获取,或者从非磁盘存储(例如数据库)中检索出来。
因此,我的问题是:
经过一些实验,看起来调试器基本上只是使用嵌入在AST中的
lineno
信息和传递给compile
的文件名来为调试器的目的提供表示,但是这假设被执行的代码来自单个磁盘文件。对于我的项目来说,这不一定是这样的,可执行代码可以从多个来源拼凑而成,并且某些或所有这些来源可能已经从网络获取,或者从非磁盘存储(例如数据库)中检索出来。
因此,我的问题是:
- 是否有可能提供某种类型的内存缓冲区,还是必须生成“虚拟源”的单个磁盘表示形式?
- 如果虚拟源不能或不应该被线性化,调试器如何处理在不同的部分之间跳转?
- 最后,Python是否仅支持单个连续源文件的假设是正确的,还是实际上可以以某种方式输入多个源?