【问题标题】:Can I use Python Debugger In Bazel Test我可以在 Bazel 测试中使用 Python 调试器吗
【发布时间】:2018-08-06 14:09:26
【问题描述】:

我正在尝试使用 pdb(Python 调试器)调试我的测试,同时使用 bazel 运行它们。

这是我的一个示例测试:

class TestMembersResource(TestCase):

    def test_get(self):
        response = self.client.get('/api/v1/members/')
        import ipdb; ipdb.set_trace()
        self.assertEqual(response.status_code)

当我尝试使用 bazel test ... 运行它时,我得到以下输出:

Traceback (most recent call last):
    File "/root/.cache/bazel/_bazel_root/ae988d93859d448ae36776fcb135b36c/execroot/__main__/bazel-out/k8-fastbuild/bin/webserver/members/api/tests/test_members_resource.runfiles/__main__/webserver/members/api/tests/test_members_resource.py", line 22, in test_get
    self.assertEqual(response.status_code, 200,
    File "/root/.cache/bazel/_bazel_root/ae988d93859d448ae36776fcb135b36c/execroot/__main__/bazel-out/k8-fastbuild/bin/webserver/members/api/tests/test_members_resource.runfiles/__main__/webserver/members/api/tests/test_members_resource.py", line 22, in test_get
    self.assertEqual(response.status_code, 200,
    File "/usr/lib/python2.7/bdb.py", line 49, in trace_dispatch
    return self.dispatch_line(frame)
    File "/usr/lib/python2.7/bdb.py", line 68, in dispatch_line
    if self.quitting: raise BdbQuit
BdbQuit

如果没有 pdb,一切都会非常顺利。

有没有办法获得交互式 shell 并使用标准 pdb 命令和 bazel 测试?

谢谢!

【问题讨论】:

  • 检查这个答案,不确定它是否满足您的需求 - stackoverflow.com/a/40352901/742501
  • 感谢您的回答!我已经检查了这个响应,对于我的用例,如果可能的话,我宁愿复制nosetests -s <test_file> 的行为以保持相同的开发流程。如果不可能,这将是要走的路。
  • 这能回答你的问题吗? Debugging python tests in TensorFlow

标签: debugging bazel


【解决方案1】:

如前所述,您可以使用 --run_under 标志执行此操作。请务必注意,您需要指向 pdb.py 以进行 python 安装。要找到指向的位置,您可以执行以下操作:

检查您的 python 版本的安装位置。这应该使用类似 python2.7 或 python3.6 的东西,而不仅仅是 python 或 python3,因为它们通常只是符号链接。

$ which python3.6
/Library/Frameworks/Python.framework/Versions/3.6/bin/python3.6

请注意,这是二进制文件所在的位置,而我们想要指向一个库文件。为此,请将最后一个 bin 替换为 lib,并指定所需的文件,如下所示:

/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/pdb.py

现在您可以像这样运行您的目标:

bazel run --run_under="/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/pdb.py"

【讨论】:

    【解决方案2】:

    你需要使用--run_under:

    bazel test --run_under=/usr/bin/pdb //webserver/members/api/tests:test_members_resource
    

    【讨论】:

    • 不起作用。如果我在没有它的情况下运行我的(失败的)测试,测试会以bdb.BdbQuit 失败。如果我使用--run_under 运行它,那么它们只会传入0.1swhich pdb 返回/usr/bin/pdb。我也尝试了pdb3,结果相同。我的代码中是否有import pdb; pdb.set_trace() 没有影响。
    猜你喜欢
    • 1970-01-01
    • 2011-02-10
    • 1970-01-01
    • 1970-01-01
    • 2010-09-27
    • 2011-10-18
    • 1970-01-01
    • 2020-12-04
    • 1970-01-01
    相关资源
    最近更新 更多