.pdbrc 文件中的断点命令

问题描述 投票:0回答:4

我想将断点命令保存在

.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 提示符下输入
NameError
后,由于
end
foo.attr1
甚至
foo.attr2
,它会引发
end
。其余断点也会发生同样的情况,所以我最终设置了它们,但没有设置它们的命令。

执行此操作的正确方法是什么?还可能吗?

python debugging
4个回答
2
投票

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

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

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

Usage : commands [bnum]
        ...
        end

如果将上面的行放在 .pdbrc 中

查看 pdb.py 看来作者没有正确处理 pdbrc 中的定义命令。

我个人会暂时将打印行放在我正在调试的代码中,同时使用 pdbrc 保存感兴趣的断点来解决这个问题。


1
投票

您可能不希望每次在任何地方使用 pdb 时都进行此设置。我的建议是设置一个别名,例如:

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

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

setup_myproj


0
投票

今天(2023 年 6 月)这个问题仍然没有解决,这对我有用:

$ echo 'run;; b 81;; cont;; pp foo.attr1;;' | python3 -m pdb main.py

或者,将命令放入

commands.txt
(作为单行)并运行:

$ cat commands.txt | python3 -m pdb main.py

0
投票

编辑:

看起来这个问题现在已经通过 PR 110496

解决了

原文:

十多年过去了,但不幸的是,当从

pdb
文件读取
end
时,看起来
commands
仍然无法正确处理
.pdbrc
命令。现在有一个与 cpython 相关的问题

同时,对于简单的控制流,只需使用 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
...

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

© www.soinside.com 2019 - 2024. All rights reserved.