我正在使用py.test对我的python程序进行单元测试.我希望用python调试器以正常的方式调试我的测试代码(我的意思是代码中的pdb.set_trace())但是我无法使它工作.
将pdb.set_trace()放入代码中不起作用(引发IOError:在捕获输出时从stdin读取).我也尝试使用选项--pdb运行py.test但是如果我想探索在断言之前发生的事情,那似乎并不起作用.当断言失败时它会中断,从该行继续前进意味着终止程序.
有没有人知道一种方法来调试,或者调试和py.test只是不想在一起?
我正在使用nosetests运行一套测试(.py文件).使用经典
import pdb; pdb.set_trace()
Run Code Online (Sandbox Code Playgroud)
测试运行从未完成.它只是挂在断点已设置的位置,但从不插入pdb调试器.
任何想法为什么会这样?我已经尝试将断点移动到许多不同的位置(其他测试功能,其他文件)无济于事.
Python非常酷,但不幸的是,它的调试器不如perl -d好.
在试验代码时,我常常做的一件事是从调试器中调用一个函数,然后进入该函数,如下所示:
# NOTE THAT THIS PROGRAM EXITS IMMEDIATELY WITHOUT CALLING FOO()
~> cat -n /tmp/show_perl.pl
1 #!/usr/local/bin/perl
2
3 sub foo {
4 print "hi\n";
5 print "bye\n";
6 }
7
8 exit 0;
~> perl -d /tmp/show_perl.pl
Loading DB routines from perl5db.pl version 1.28
Editor support available.
Enter h or `h h' for help, or `man perldebug' for more help.
main::(/tmp/show_perl.pl:8): exit 0;
# MAGIC HAPPENS HERE -- I AM STEPPING INTO A FUNCTION THAT I AM …Run Code Online (Sandbox Code Playgroud) 我正在调试一个python脚本,我想看一个变量来进行更改(很像你可以在gdb中观看内存地址).有没有办法做到这一点?
我看到我不是第一个提出这个问题的人,但对此没有明确答案:
如何在Python开发中使用pdb和docker-composer?
当你问谷歌叔叔django docker你得到了很棒的docker-composer示例和教程,我有一个环境工作 - 我可以运行docker-compose up,我有一个整洁的开发人员环境,但PDB不工作(这是非常悲伤).
我可以运行定居docker-compose run my-awesome-app python app.py 0.0.0.0:8000,但后来我可以通过访问我的应用程序http://127.0.0.1:8000从主机(我可以带docker-compose up),似乎每次使用时间run新容器等制成的:dir_app_13和dir_db_4我不欲望.
善意的人请帮助我.
PS
我正在使用pdb ++作为该示例,并使用此django示例中的基本docker-compose.yml .我也进行了实验,但似乎没有什么可以帮助我.我正在使用docker -composer 1.3.0rc3,因为它有Dockerfile指向支持.
如何在emacs中调试python程序?
我用 python-mode.el
我得到了参考
import pdb; pdb.set_trace();
Run Code Online (Sandbox Code Playgroud)
但不知道如何使用它.
在pdb该next指令不跨过列表内涵,而是通过每个迭代步骤.有没有办法跨过它们,所以调试将在列表理解后的下一行继续?
我不得不求助于列出代码,在下一行设置断点,然后继续执行到下一个断点.这很烦人,我认为必须有更好的方法.
我正在使用pdb调试我的Python脚本,手册说我可以使用p变量命令在某个点打印指定变量的值.但是,如果我有很多变量,比如20个变量,我想追踪所有这些变量的价值呢?如何在不指定每个手动的情况下打印所有这些?以此脚本为例:
a = 1
b = 2
c = 3
Run Code Online (Sandbox Code Playgroud)
我可以使用pdb调试它并使用pa,b,c打印所有这些,如下所示:
$ python -m pdb test.py
> /media/test.py(1)<module>()
-> a = 1
(Pdb) n
> /media/test.py(2)<module>()
-> b = 2
(Pdb) n
> /media/test.py(3)<module>()
(Pdb) n
--Return--
> /media/test.py(3)<module>()->None
-> c = 3
(Pdb) p a, b, c
(1, 2, 3)
(Pdb)
Run Code Online (Sandbox Code Playgroud)
但我必须手动指定每个变量.有没有一种方法可以一次打印所有变量,而无需指定每一个变量?
在我点击n来评估一条线之后,我想回去然后点击s以进入该功能,如果它失败了.这可能吗?
文档说:
j(ump)lineno 设置将要执行的下一行.仅适用于最底部的框架.这使您可以跳回并再次执行代码,或者跳转到跳过您不想运行的代码.
有没有办法在单元测试失败时自动启动调试器?
现在我只是手动使用pdb.set_trace(),但这非常繁琐,因为我需要每次添加它并在结束时将其取出.
例如:
import unittest
class tests(unittest.TestCase):
def setUp(self):
pass
def test_trigger_pdb(self):
#this is the way I do it now
try:
assert 1==0
except AssertionError:
import pdb
pdb.set_trace()
def test_no_trigger(self):
#this is the way I would like to do it:
a=1
b=2
assert a==b
#magically, pdb would start here
#so that I could inspect the values of a and b
if __name__=='__main__':
#In the documentation the unittest.TestCase has a debug() method
#but I don't understand how to use it
#A=tests() …Run Code Online (Sandbox Code Playgroud)