Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can I use Python Debugger In Bazel Test

I am trying to debug my tests using pdb (Python debugger) while running them with bazel.

This is a sample test I have:

class TestMembersResource(TestCase):

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

When I try to run it with bazel test ... I get the following output:

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

Without pdb everything works pretty smooth.

Is there a way to get an interactive shell and use the standard pdb commands with bazel test?

Thanks!

like image 569
Mihai Avatar asked Aug 06 '18 14:08

Mihai


People also ask

How do I debug Bazel test?

Debugging BazelTo debug the C++ client, run it from gdb or lldb as usual. However, to debug Java code, attach to the server using the following: Run Bazel with the debugging option --host_jvm_debug before the command (such as bazel --host_jvm_debug build //src:bazel ). Attach a debugger to the port 5005.

How do I use Python debugger?

If you're only interested in debugging a Python script, the simplest way is to select the down-arrow next to the run button on the editor and select Debug Python File in Terminal.

Is there a debugger for Python?

Python has a built-in debugger called pdb . It's a simple utility with a command line interface that does the main job. It has all the debugger features you'll need, but if you're looking to pimp it up a little, you can extend it using ipdb, which will provide the debugger with features from IPython.

How do I enable Python debugging?

To start the debugger from the Python interactive console, we are using run() or runeval(). To continue debugging, enter continue after the ( Pdb ) prompt and press Enter. If you want to know the options we can use in this, then after the ( Pdb ) prompt press the Tab key twice.


2 Answers

You can do this using the --run_under flag, as mentioned. It's important to note that you need to point to the pdb.py for your python install. To find where to point to, you can do the following:

Check where your python version is installed. This should be using something like python2.7, or python3.6, not just python or python3, as those are frequently just symlinks.

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

Note that this is where the binary is located, while we want to point to a library file. To do so, replace the last bin with lib, and specify the desired file, something like this:

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

Now you can run your targets like this:

bazel run --run_under="/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/pdb.py"
like image 86
Andrew Ring Avatar answered Oct 10 '22 23:10

Andrew Ring


You need to use --run_under:

bazel test --run_under=/usr/bin/pdb //webserver/members/api/tests:test_members_resource
like image 31
László Avatar answered Oct 11 '22 01:10

László