pdb中修改c命令为quit命令子类实现失效求助
解决pdb子类化后自定义命令无响应的问题
你在子类化pdb.Pdb时遇到的命令失效问题,核心原因是自定义方法里没有实际执行quit的处理逻辑,我来帮你拆解问题并给出修正方案。
问题根源分析
先看你无效代码里的关键疏漏:
def custom_quit(self,arg): self.do_quit
这里你只是引用了self.do_quit这个方法对象,但没有调用它。当输入c命令触发custom_quit时,函数执行后没有任何实际操作,自然看不到quit的效果。
另外,虽然你通过给实例do_c赋值的方式绑定命令是可行的,但必须确保自定义方法能正确触发目标逻辑。
修正后的有效代码
把custom_quit改成实际调用do_quit,同时传递必要的参数:
import pdb def fun(no): print("a") print("b") for i in range(0,no): print(i) return 'abc' class dbg(pdb.Pdb): def custom_quit(self, arg): # 调用quit的处理函数,并传递命令参数arg self.do_quit(arg) db = dbg() no = 3 # 将c命令绑定到自定义的custom_quit方法 db.do_c = db.custom_quit db.runcall(fun, no)
修改后输入c命令,就会触发custom_quit进而调用do_quit,实现退出pdb的效果。
更简洁的子类扩展方式
其实你可以直接在子类中定义do_c方法,不需要手动赋值,更符合pdb的命令扩展规范:
import pdb def fun(no): print("a") print("b") for i in range(0,no): print(i) return 'abc' class dbg(pdb.Pdb): def do_c(self, arg): self.do_quit(arg) db = dbg() no = 3 db.runcall(fun, no)
这种方式直接覆盖了父类的do_c方法,逻辑更清晰,也避免了手动赋值可能带来的绑定问题。
内容的提问来源于stack exchange,提问作者user9855363
相关产品推荐
相关产品推荐

