bramw_baserow/docs/development/debugging.md

65 lines
2.2 KiB
Markdown

# Debugging Tools
Baserow development dependencies include some useful tools for debugging that you can use.
## snoop
[snoop](https://github.com/alexmojaki/snoop) is a powerful set of Python debugging tools.
### Automatic tracing
One of the common things to do is to use the `@snoop` decorator or the `snoop` context manager to trace the execution of a piece of Python code and show how variable values change over time:
```python
@snoop
def test():
for i in range(5):
a = i*2
# or
with snoop:
for i in range(5):
a = i*2
```
The depth can be controlled with `depth` parameter, e.g. `@snoop(depth=2)` for tracing functions that go deep.
Objects and dictionaries can be expanded automatically to show all their items or attributes using the `watch_explode` parameter taking a list of watched variable names:
```python
@snoop(watch_explode=['d'])
def test():
d = {'key1': 0, 'key2': 1}
for i in range(5):
d["key1"] += 1
```
### Pretty printing
Besides automatic tracing, variables can be pretty printed manually with `pp` function:
```python
d = {'key1': 0, 'key2': 1}
pp(d)
```
Note that `import snoop` or `from snoop import pp` is not necessary as snoop is installed and available automatically.
## django-extensions
[django-extensions](https://github.com/django-extensions/django-extensions) is available to provide a variety of features like a shell with auto-imported Django models or a command to list all registered urls.
You can use django-extensions commands inside backend docker containers:
* `django-admin shell_plus` starts an interactive Python shell with loaded Django contexts and imported models.
* `django-admin show_urls` lists all registered urls in the Baserow.
## django-silk
[django-silk](https://github.com/jazzband/django-silk) is a live profiling and inspection tool for executed requests and database queries.
The interface can be accessed at http://localhost:8000/silk/ after Baserow is started in the debug mode. Every request is logged and can be analyzed, including the list of performed database queries.
django-silk can be also configured and used for profiling using the Python's built-in profiler, see the official documentation for details.