debugging 用于.pdbrc文件中断点的命令

ghhaqwfi  于 2022-11-14  发布在  其他
关注(0)|答案(3)|浏览(162)

我想在.pdbrc中保存断点的命令,如下所示:

b 81 
commands 1 
pp foo.attr1 
pp foo.attr2 
end 
b 108 
commands 2 
pp bar.attr1 
pp bar.attr2 
end

这将自动设置调试会话的环境。但是,这不适用于python -m pdb script.py,因为在commands 1行,pdb提示符启动并要求我输入第一个断点的命令,忽略了我在.pdbrc中编写的内容;此外,在pdb提示符下键入end后,它会引发NameError,因为存在foo.attr1foo.attr2甚至end。对于其余断点也会发生同样的情况,因此我最终设置了它们,但没有设置它们的命令。
正确的方法是什么?这可能吗?

u91tlkcl

u91tlkcl1#

您可能不希望每次在任何地方使用pdb时都设置此别名。

alias setup_myproj b 81;; commands 1;; pp foo.attr1;; pp foo.attr2;; end

然后,您可以在适当的时候运行setup_myproj

jfewjypa

jfewjypa2#

我的第一个想法是命令必须在一行中定义:

commands 1;; pp foo.attr1;; pp foo.attr2;; end;;

但是,这似乎只在提示符下起作用,您将错误地得到:

Usage : commands [bnum]
        ...
        end

如果将上面的行放在.pdbrc中
查看pdb.py,作者似乎没有正确处理pdbrc中的定义命令。
我个人只会暂时将打印行放在我正在调试的代码中,同时使用pdbrc保存感兴趣的断点来解决这个问题。

wnrlj8wa

wnrlj8wa3#

十多年后,不幸的是,当从.pdbrc文件阅读commands时,pdb仍然不能正确处理end命令。
同时,* 对于简单的控制流 *,可以通过 * 不 * 使用commands命令来解决此问题。例如,您可以执行以下操作:

# set the breakpoints
b 81 
b 108 
# continue to the first breakpoint
continue 
# execute commands at first breakpoint
pp foo.attr1 
pp foo.attr2 
# continue to the second breakpoint
continue
# execute commands at second breakpoint
pp bar.attr1 
pp bar.attr2
...

显然,这只适用于简单的情况,即您知道下一个将到达哪个断点。

相关问题