我可以在Bazel测试中使用Python调试器吗

Mih*_*hai 5 debugging bazel

我尝试在使用bazel进行测试时使用pdb(Python调试器)调试测试。

这是我的样本测试:

class TestMembersResource(TestCase):

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

当我尝试运行它时,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
Run Code Online (Sandbox Code Playgroud)

没有pdb,一切都将顺利进行。

有没有一种方法来获取交互式shell并在bazel test中使用标准pdb命令?

谢谢!

ari*_*ing 4

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

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

$ which python3.6
/Library/Frameworks/Python.framework/Versions/3.6/bin/python3.6
Run Code Online (Sandbox Code Playgroud)

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

/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/pdb.py
Run Code Online (Sandbox Code Playgroud)

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

bazel run --run_under="/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/pdb.py"
Run Code Online (Sandbox Code Playgroud)