Debugging¶
Debugging Guillotina will be slightly different from other web application that are not asyncio but Guillotina provides some nice integration to help you out.
X-Debug header¶
Any any request, you can provide the header X-Debug:1 and
Guillotina will output debugging headers in the response
about timing, number of queries and cache hit/miss stats.
- GET /(db)/(container)¶
Retrieves serialization of resource
Permission: guillotina.ViewContent
Context: guillotina.interfaces.content.IResource
http
GET /db/container HTTP/1.1 Accept: application/json Authorization: Basic cm9vdDpyb290 X-Debug: 1
curl
curl -i -X GET http://nohost/db/container -H "Accept: application/json" -H "X-Debug: 1" --user root:root
httpie
http http://nohost/db/container Accept:application/json X-Debug:1 -a root:root
response
HTTP/1.1 200 OK Content-Type: application/json XG-Cache-hits: 0 XG-Cache-misses: 0 XG-Cache-stored: 0 XG-Num-Queries: 0 XG-Timing-0-start: 0.00429 XG-Timing-1-traversed: 0.13041 XG-Timing-2-beforeauthentication: 0.00119 XG-Timing-3-authentication: 0.26202 XG-Timing-4-viewfound: 0.09084 XG-Timing-5-authorization: 0.27275 XG-Timing-6-viewrender: 0.01836 XG-Timing-7-viewrendered: 0.54479 XG-Timing-8-renderer: 0.04649 XG-Timing-9-headers: 0.01121 XG-Timing-Total: 1.38235 XG-Total-Cache-hits: 0 XG-Total-Cache-misses: 0 XG-Total-Cache-stored: 0 { "@id": "http://localhost/db/container", "@type": "Container", "@name": "container", "@uid": "82dd9ab05c77472d9c01a325888f183c", "@static_behaviors": [], "parent": {}, "is_folderish": true, "creation_date": "2026-06-09T10:34:20.306513+00:00", "modification_date": "2026-06-09T10:34:20.306513+00:00", "type_name": "Container", "title": "container", "uuid": "82dd9ab05c77472d9c01a325888f183c", "__behaviors__": [], "items": [], "length": 0 }
- Query Parameters:
include (string) -- (required)
omit (string) -- (required)
- Status Codes:
200 OK -- Resource data
401 Unauthorized -- You are not authorized to perform the operation
404 Not Found -- The resource does not exist
GDEBUG¶
On startup, you can also provide the environment variable GDEBUG=true.
This will provide detailed query statistics with the X-Debug:1.
Additionally, you can provide GDEBUG_SUBSCRIBERS to get detailed timings
logged for event subscribers.
aiomonitor¶
Guillotina also provides integration with the aiomonitor python module.
This module allows you to attach to a running python with asyncio
to inspect the active tasks running.
First, install aiomonitor:
pip install aiomonitor
Then, run guillotina with --monitor:
g serve --monitor
Finally, connect to it:
python -m aiomonitor.cli
Jupyter¶
Guillotina also works with Jupyter notebooks. Load the example notebook in the Guillotina repository to see an example of how to get started.