Skip to content
| Marketplace
Sign in
Visual Studio Code>Debuggers>Odoo DebuggerNew to Visual Studio Code? Get it now.
Odoo Debugger

Odoo Debugger

MohitGhodasara

|
24 installs
| (0) | Free
All-in-one Odoo development toolkit — run, debug, update modules, navigate code, filter logs, manage breakpoints, and more. Built for Odoo developers who want to stay in VS Code.
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

Odoo Debugger

Your complete Odoo development environment inside VS Code. Run and debug the server, explore models with full inheritance chains, hover over any symbol for instant navigation, browse database records, watch live logs — all without leaving your editor.

Overview


Setup

1 — Install the extension

Install from the VS Code marketplace. ms-python.debugpy is automatically installed as a dependency.

2 — Select Python interpreter

Ctrl+Shift+P → Python: Select Interpreter → pick your Odoo virtualenv.

3 — Point to your Odoo conf file (recommended)

"odooDebugger.configFile": "/path/to/.odoorc"

The extension reads db_name, db_host, db_port, db_user, db_password, addons_path, and http_port directly from the conf file.

4 — Configure addons paths

Click the folder icon in the panel title bar → Manage Addons Paths, or set directly:

"odooDebugger.addonsPaths": [
    "/path/to/odoo/community/addons",
    "/path/to/custom-addons"
]

5 — Run Odoo

Press Ctrl+Shift+R or click ▶ Run in the panel.


Panel Layout

Section Purpose
Odoo Debugger Server controls, module actions, tools
Model Explorer Browse all models, fields, functions, views
SQL Tools Browse tables, run queries
Tools JS debug, utilities, scaffold
Breakpoints Manage all breakpoints
Odoo Logs Live log panel at the bottom

Features

Server Management

  • Run (Ctrl+Shift+R) — Starts Odoo via debugpy in noDebug mode
  • Debug (Ctrl+Shift+D) — Full debugpy session with breakpoints active
  • Stop (Ctrl+Shift+S) — Stops the running server
  • Restart — Stops and re-launches in the same mode
  • Status bar — Shows server state + DB name + index count: $(database) Odoo: mydb · 631M
    • Click → focuses Odoo Debugger panel
    • Hover → shows per-slice index counts (Models, Fields, Functions, Views, XML refs)
    • Shows $(sync~spin) while indexing

Module Management

Update Module

  • Update (Ctrl+Shift+U) — QuickPick with git-changed modules shown first
  • Install (Ctrl+Shift+I) — Same picker, runs --init
  • Update Changed (Ctrl+Shift+G) — Auto-detects modules with uncommitted git changes
  • Uninstall — Opens Odoo shell with uninstall command
  • Scaffold — Generates full module: manifest, model, views, security CSV, menu, action

Right-click — Update / Install This Module

Right-click any .py or .xml file in the editor or file explorer:

  • Update This Module — auto-detects module from file path, runs update immediately (no picker)
  • Install This Module — same, runs --init

Build output appears in the Odoo Logs panel automatically.


Background Indexing

On startup, background workers index your addons in 5 independent slices:

Slice Content
models Model names, types, inheritance
fields Field definitions with comodel, related, compute, selection options
functions Method signatures, decorators, depends/onchange/constrains
views XML view inheritance tree
fieldXml Field usages in XML views

Progress: Status bar shows $(sync~spin) while indexing. Click the spinner → notification panel opens showing live counts as each thread completes:

Odoo Debugger: Indexing   631 models · 4821 fields · 1203 functions · 892 views

Incremental updates: saving a .py or .xml file re-parses only that file and merges into the existing index — no full restart. Status bar count updates immediately.

Manual reindex: click the Refresh button in the Model Explorer toolbar.


Model Explorer

Model Explorer

Tree view of all models with full deep inheritance support:

  • Fields — Fields (N) collapsible group
    • Description: Many2one → res.partner / Char · computed / Char · required
    • Hover tooltip: comodel link, related chain, compute method, flags, selection options
  • Functions — Functions (N) collapsible group
    • Description: (params) -> returnType — full signature inline
    • Hover tooltip: decorator + full def signature + depends/onchange/constrains fields
  • Views — Views (N) lazy-loaded with full inheritance tree
  • Theme-aware icon colors — icons follow your active theme's symbol colors (Monokai, Dracula, etc.)
    • Models: symbolIcon.classForeground · Fields: symbolIcon.fieldForeground · Methods: symbolIcon.methodForeground

Toolbar (always visible): Search $(search), Clear Filter, Refresh $(refresh), Configure Sources $(folder)

Overflow ... menu: Filter by Type, Sort Models, Group by Module, Toggle Auto-Reveal, Move to Panel

Auto-reveal: cursor movement in .py or .xml auto-highlights the matching model/field/method in the tree. Toggle with the $(pin) button in the overflow menu.

Right-click model: Go to XML View, Open in Browser, Browse Records, Copy Model Name

Right-click field: Find in XML Views, Browse Field Values

Right-click function: Find Function Usages


Quick Find

Quick Find

Ctrl+Alt+N — Live search with compound syntax:

Input Result
res.partner Models matching name
@name Models with field starting with name
#action Functions starting with action
:sale Models from module sale
res.partner@name Fields in res.partner only
res.partner#action Functions in res.partner only

Hover Navigation

Hover over any Odoo symbol for instant navigation. All locations are clickable links — current file shows *(here)* marker.

Model hover (Python + XML)

Hover _name, _inherit, class MyModel(models.Model), model="res.partner", or any 'res.partner' string:

### ⬡ `res.partner`
⬡ 45 own  ⬡ 312 effective  ⬡ 28 methods

📁 `base`  ✦ defined  base/models/res_partner.py:45 *(here)*
📁 `sale`  ↳ inherit  sale/models/res_partner.py:12

---
Inherits: `mail.thread` → `mail.activity.mixin` → `mail.thread.mixin`

Field hover

Hover any field = fields.Type( line:

### ⬡ `partner_id`  `fields.Many2one`
⬡ `sale.order`

---
🔗 Comodel: `res.partner`  (clickable link)
ℹ required

---
Used in 3 views:
⬡ `form` `sale_order_form` sale/views/order_views.xml:45
⬡ `list` `sale_order_tree` sale/views/order_views.xml:12
[Show all 3 views]

Function hover

Hover any def method_name( line:

### ⬡ `action_confirm`
`@api.multi`
⬡ `sale.order`

---
👁 Depends: `state`, `partner_id`

Defined in:
📁 `sale`  sale/models/order.py:120

Overridden in:
📁 `sale_stock`  sale_stock/models/order.py:45

Called from (12):
→ sale/wizard/confirm.py:34
→ sale/models/order.py:89
[Show all 12 callers]

Clicking Show all N opens a QuickPick with the full list.

XML view hover

Hover id="view_id", ref="module.view_id", or inherit_id ref="...":

### ⬡ View: `sale_order_form` `[form]`

---
⬡ `sale`  sale/views/order_views.xml:10
  └─ ⬡ `sale_stock`  sale_stock/views/order_views.xml:5
  └─ ⬡ `account`  account/views/order_views.xml:7

Log Panel

Odoo Logs

Live log panel at the bottom (next to Terminal):

  • Filter buttons — ALL / CRITICAL / ERROR / WARNING / INFO / DEBUG with counts
  • Search — Live search with highlight
  • ▲ Err / ▼ Err — Jump to previous/next error
  • Traceback grouping — Collapsed by default, click ▶ to expand
  • Navigate to file — File "/path/file.py", line 42 are clickable links
  • Auto-scroll with lock when scrolling up
  • Build output — Update/Install/Upgrade operations also write to the log panel
  • Disable — odooDebugger.logPanel.enabled: false for zero overhead

Data Browser

Interactive table in an editor tab:

  • Browse model records or field values from DB
  • Sortable columns, %term% search, custom SQL bar
  • Open in Odoo (form view), copy cell on double-click

SQL Tools

  • Tables — All public tables, filterable. Browse, show columns, copy SELECT
  • History — Last 20 queries, click to re-run
  • Run SQL (Ctrl+Shift+Q) — Result in data browser

Navigation

  • Toggle Py ↔ XML (Ctrl+Shift+T) — Jump between model .py and _views.xml
  • Go to Model (Ctrl+Shift+M) — Find _name = 'model.name' from word under cursor
  • Go to XML ID (Ctrl+Shift+X) — Find id="xml_id" from word under cursor
  • Go to Function Def (Ctrl+Shift+.) — Find original definition
  • Go to All Definitions — All definitions in a QuickPick

JS Debugging

  • Launch Chrome Debug — Opens Chrome with remote debugging + ?debug=assets
  • Attach JS Debugger — Attaches VS Code to Chrome with auto-generated pathMapping

Database Tools

  • Switch Database — Lists all PostgreSQL DBs
  • Copy Database — createdb -T source newname
  • Drop Database — With confirmation
  • Clear Asset Bundles — Deletes /web/assets/* attachments

Keyboard Shortcuts

Shortcut Action
Ctrl+Shift+R Run Odoo
Ctrl+Shift+D Debug Odoo
Ctrl+Shift+S Stop Odoo
Ctrl+Shift+U Update Module
Ctrl+Shift+I Install Module
Ctrl+Shift+G Update Changed Modules
Ctrl+Shift+B Open Odoo in Browser
Ctrl+Shift+O Open Odoo Shell
Ctrl+Shift+Q Run SQL
Ctrl+Shift+M Go to Model
Ctrl+Shift+X Go to XML ID
Ctrl+Shift+T Toggle Py ↔ XML
Ctrl+Shift+. Go to Function Definition
Ctrl+Alt+N Quick Find
Ctrl+Alt+E Focus Panel

Settings Reference

| Setting | Default | Description | |---|---|---| | odooDebugger.configFile | .odoorc | Odoo conf file path | | odooDebugger.database | | DB name (auto-read from conf) | | `odooDebugger.addonsPaths` | `[]` | Addons directories | | `odooDebugger.odooBinPath` | | Path to odoo-bin (auto-detected) | | odooDebugger.venvPath | | Python interpreter (auto-detected) | | `odooDebugger.port` | `8069` | Odoo HTTP port | | `odooDebugger.extraArgs` | `[]` | Extra odoo-bin args | | `odooDebugger.debugOptions` | `{justMyCode:false}` | debugpy launch options | | `odooDebugger.dbHost` | | PostgreSQL host | | odooDebugger.dbPort | | PostgreSQL port | | `odooDebugger.dbUser` | | PostgreSQL user | | odooDebugger.dbPassword | | PostgreSQL password | | `odooDebugger.logPanel.enabled` | `true` | Enable log panel | | `odooDebugger.logPanel.logFile` | `/tmp/odoo-vscode.log` | Log file path | | `odooDebugger.modelExplorer.sources` | `[]` | Addons dirs to scan (empty = use addonsPaths) | | `odooDebugger.modelExplorer.groupByModule` | `true` | Group by module | | `odooDebugger.modelExplorer.sortOrder` | `alpha` | `alpha` or `recent` | | `odooDebugger.modelExplorer.typeFilter` | `model` | Default type filter on startup | | `odooDebugger.modelExplorer.showViews` | `true` | Show Views folder | | `odooDebugger.modelExplorer.autoReveal` | `true` | Auto-reveal on cursor move | | `odooDebugger.upgradeScript` | | Custom upgrade script | | odooDebugger.chromePath | `` | Chrome binary path | | odooDebugger.chromeDebugPort | 9222 | Chrome debug port |


Requirements

  • VS Code 1.85.0 or later
  • ms-python.debugpy extension (auto-installed)
  • Python with Odoo dependencies installed
  • PostgreSQL with psql on PATH
  • Odoo source with odoo-bin

License

MIT © Mohit Ghodasara

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
© 2026 Microsoft