我正在为我的测试套件使用pytest.虽然在复杂的组件间测试中捕获错误,但我想放在import ipdb; ipdb.set_trace()我的代码中间以允许我调试它.
但是,由于pytest陷阱sys.stdin/sys.stdout ipdb失败.如何在使用pytest进行测试时使用ipdb.
我没有兴趣在失败后跳转到pdb或ipdb,但是在代码中的任何地方放置中断并且能够在发生故障之前在那里调试它.
有没有办法调试python脚本而不是在*nix系统中保留vim(执行脚本,设置断点,在监视列表中显示变量等)?
我需要调试由它生成的子进程multiprocessing.Process().该pdbdegugger似乎不知道分叉的,无法连接到已经运行的进程.
有没有更智能的python调试器可以附加到子进程?
我显然不明白这里的一些东西。我正在尝试pdb在 Docker 容器中以交互方式运行调试器。
这是一些代码:
Dockerfile:
FROM python:3.6
ENV PROJECT_DIR=/opt/foo
WORKDIR $PROJECT_DIR
COPY . .
RUN pip install -r requirements.txt
CMD ["python", "foo.py"]
Run Code Online (Sandbox Code Playgroud)
foo.py:
def hello_world():
print("hello world")
if __name__ == '__main__':
#import pdb; pdb.set_trace()
hello_world()
Run Code Online (Sandbox Code Playgroud)
如果我运行docker build -t foo .然后docker run foo,它会按预期打印出“hello world”。
但是如果我取消对pdb.set_trace()上面的调用的注释并重试,我会收到以下错误:
/opt/foo/foo.py(8)<module>()
-> hello_world()
(Pdb)
Traceback (most recent call last):
File "foo.py", line 8, in <module>
hello_world()
File "foo.py", line 8, in <module>
hello_world()
File "/usr/local/lib/python3.6/bdb.py", line 51, in …Run Code Online (Sandbox Code Playgroud)