gpt4 book ai didi

python - 如何跟踪python中的内置函数

转载 作者:行者123 更新时间:2023-12-04 12:49:50 24 4
gpt4 key购买 nike

我想了解如何在文件上下文管理器中调用 __enter____exit__ 方法。

with open("test.txt") as fp:
fp.read()

我已经在 pdb 中尝试了 step 命令 - 而不是去定义函数 open,它只是执行它并移动到下一行。

我也尝试过使用 sys.settrace(),但即使它没有捕获函数调用 open__enter____exit__ 在任何事件中。

当然,这适用于从其他模块和同一模块中导入的函数。我假设这应该以类似的方式对这些开箱即用的内置函数起作用。我找不到任何指向此的文档。是否可以单步执行或跟踪内置函数的执行?

使用 Python 2.7。

最佳答案

尝试使用 sys.setprofile而不是 sys.settrace跟踪内置函数时:

The system’s profile function is called similarly to the system’s trace function (see settrace()), but it is called with different events, for example it isn’t called for each executed line of code (only on call and return, but the return event is reported even when an exception has been set)

除了事件“call”和“return”,setprofile 还提供了“c_call”和“c_return”,它们指的是从内置函数调用和返回。

注意其他两个参数 framearg 的含义改变:
如果 event 等于“c_call”或“c​​_return”,frame 是调用内置函数的外部框架,所以 frame.f_code.co_name 将不是内置函数的名称,而是调用它的 python 函数的名称。相反,arg 是 C 函数对象,而不是返回值。

所以回答你的问题:

Is it possible to step into or trace execution of builtin functions?

是的,可以跟踪内置函数的调用/返回,但是,您无法单步执行。我想您甚至看不到调试器的 c_call/c_return 的原因是因为它使用 settrace 而不是 setprofile。

关于python - 如何跟踪python中的内置函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40674861/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com