Odoo Debug

找到好工具,问题也就解决了一半


后端调试

  • 日志

    • 用法
          import logging
          _logger = logging.getLogger(__name__)
          _logger.info('export stock level for %s', stock_location.name)
    • 日志级别
      • 全局设定
           --log-level
      • 局部设定
            --log-handler=prefix:level
                    Ex. $ python odoo.py --log-handler=openerp.addons.my_module:DEBUG
            在配置文件中设置log-handler
                    log_handler = :ERROR,werkzeug:CRITICAL,openerp.service.server:INFO

  • Odoo shell(交互式调用odoo方法)

    • 开启shell
      • python odoo-bin shell -c odoo.conf -d odoo14_demo
      • log_handler = :ERROR,werkzeug:CRITICAL,openerp.service.server:INFO
      • 正确情况下开启一个odoo instance, 并且提供几个global vars.
        1. env -> 连接到DB
        2. openerp -> 访问所有odoo modules

        3. self -> Odoo super user(admin)

    • 应用
      例子:
      field = self.env['ir.model.fields'].search([('name', '=', 'property_account_receivable_id'), ('model', '=', 'res.partner'), ('relation', '=', 'account.account')], limit=1)
      account_receivable = env['account.account'].search([('name', '=', 'property_account_receivable_id')],limit=1)
      env['ir.property'].create({'name': 'property_account_receivable_id',  'company_id': main_company.id,'fields_id': field.id,  'value': 'account.account,4' })
      env.cr.commit()                                      
    • 退出
      Ctrl+D

  • Python Debugger调试工具

    • 应用
        import pdb; pdb.set_trace()
    • pdb命令
         a/args
         list –> to check where in the code you are standing;
         p -> 查看变量值,ex. p products
         pp -> pretty-prints a variable (useful with lists and dictionaries).
         w(here) –> show call stack;
         u(p), d(down) ->  moves one level in the call stack;
         n/next ->执行一行
         s/step -> 进入函数调用
         ! -> 改变变量值, ex. !fname = '/tmp/stock_level.txt'
         r/ return -> 恢复执行,直到当前函数返回
         c/cont
         b(reak) <args>:  列出所有断点/ 新建断点
         disable bp_id:disables a breakpoint by ID;
         enable bl_id:  enables a disabled breakpoint by ID
    • 注意点
          a.    设置logging level,避免太多log干扰;ex. --log-level=error
          b.    --workers=0
          c.    --max-cron-threads=0

前端调试

  • JS debug
        console.log();
        console.table(ars)
        debugger 关键字;

命令行操作

  • 命令行更新模块

		​./odoo-bin -c odoo.conf -u 模块名
  • 命令行卸载模块

          通过命令行卸载出问题的模块,可以让系统恢复正常,步骤如下:

    • shell启动odoo, 指定连接的数据库
       python odoo-bin shell -c odoo.conf -d odoo14_demo
    •  通过env环境变量找到需要卸载的模块,调用模块卸载函数

      self.env['ir.module.module'].search([('name', 'like', '需要卸载的模块名')]).button_immediate_uninstall()
技术
Python多线程应用
Odoo多线程应用参考