Kod*_*rok 3 python debugging pdb
我想了解如何__enter__和__exit__方法被调用文件上下文管理。
with open("test.txt") as fp:
fp.read()
Run Code Online (Sandbox Code Playgroud)
我step在 pdb 中尝试过命令 - 而不是去定义函数open,它只是执行它并移动到下一行。
我尝试使用sys.settrace()过,但即使没有捕捉到的函数调用open,__enter__和__exit__在任何事件。
当然,这适用于从其他模块和同一模块中导入的函数。我假设这应该以类似的方式适用于这些开箱即用的内置函数。我找不到任何指向此的文档。是否可以单步执行或跟踪内置函数的执行?
使用 Python 2.7。
在跟踪内置函数时尝试使用sys.setprofile而不是sys.settrace:
系统的配置文件函数的调用方式与系统的跟踪函数类似(参见 settrace()),但它是用不同的事件调用的,例如,它不会为每个执行的代码行调用(仅在调用和返回时调用,而是返回即使设置了异常也会报告事件)
除了事件“call”和“return”,setprofile还提供了“c_call”和“c_return”,它们指的是调用和从内置函数返回。
要注意的其他两个参数的改变意义frame和arg:
如果event等于“c_call”或“c_return”,frame是从哪儿内建函数被调用的外部框架,所以frame.f_code.co_name不会是内建函数的名字,但名字了调用它的python函数。相反,arg是 C 函数对象,而不是返回值。
所以要回答你的问题:
是否可以单步执行或跟踪内置函数的执行?
是的,可以跟踪内置函数的调用/返回,但是,您无法进入其中。我想你甚至没有看到调试器的 c_call/c_return 的原因是因为它使用了 settrace 而不是 setprofile。
| 归档时间: |
|
| 查看次数: |
330 次 |
| 最近记录: |