相关疑难解决方法(0)

如何在运行pytest测试时随意执行ipdb.set_trace()

我正在为我的测试套件使用pytest.虽然在复杂的组件间测试中捕获错误,但我想放在import ipdb; ipdb.set_trace()我的代码中间以允许我调试它.

但是,由于pytest陷阱sys.stdin/sys.stdout ipdb失败.如何在使用pytest进行测试时使用ipdb.

我没有兴趣在失败后跳转到pdb或ipdb,但是在代码中的任何地方放置中断并且能够在发生故障之前在那里调试它.

pytest

89
推荐指数
4
解决办法
2万
查看次数

vim和python脚本调试

有没有办法调试python脚本而不是在*nix系统中保留vim(执行脚本,设置断点,在监视列表中显示变量等)?

python vim

33
推荐指数
4
解决办法
3万
查看次数

如何将调试器附加到python子进程?

我需要调试由它生成的子进程multiprocessing.Process().该pdbdegugger似乎不知道分叉的,无法连接到已经运行的进程.

有没有更智能的python调试器可以附加到子进程?

python debugging subprocess multiprocessing

31
推荐指数
4
解决办法
1万
查看次数

如何在 Docker 容器中运行 pdb

我显然不明白这里的一些东西。我正在尝试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)

python pdb docker

8
推荐指数
2
解决办法
3457
查看次数

标签 统计

python ×3

debugging ×1

docker ×1

multiprocessing ×1

pdb ×1

pytest ×1

subprocess ×1

vim ×1