Odoo.sh Jupyter 上的编辑器:pdb.set_trace 引发 BdbQuit 错误

Odoo.sh Editor on Jupyter : pdb.set_trace raises BdbQuit Error

使用我的 odoo.sh 项目 (v13.0.2) > EDITOR-Tab ,当我想使用 import pdb 进行调试时,它会将我重定向到 mywebsite.odoo.com/odoo-sh/editor/lab; pdb.set_trace(),它会引发 BdbQuit 错误:

  File "/usr/lib/python3.6/bdb.py", line 113, in 
  dispatch_exception
    if self.quitting: raise BdbQuit

在过去的版本中:v13.0.1.xxx,我可以使用 pdb.set_trace() 来调试我的 python 代码。如何解决这个问题?

使用这个 post How to debug python CLI that takes stdin?,我是这样管理的:

  1. in Odoo.sh>EDITOR (Jupyter Lab): 打开第一个终端并创建这两个 fifos,它们将用作 stdin/stdout 以使用 pdb :

     mkfifo fifo_stdin
    
     mkfifo fifo_stdout
    
     cat fifo_stdout & cat > fifo_stdin
    

...这使得出现提示光标。保持此终端选项卡打开。

  1. 将这两行写在要调试的Python脚本的顶部:

     import pdb
     mypdb=pdb.Pdb(stdin=open('fifo_stdin','r'), stdout=open('fifo_stdout','w'))
    
  2. 在这个 Python 脚本中,使用 2 fifos

    在自定义的 mypdb 上调用 set_trace()
    def _get_total_amount(self):     
       total_amount = sum(self._get_base_order_lines(program).mapped('price_total')) 
       mypdb.set_trace()  
       return total_amount
    
  3. 打开第二个终端以启动您的 Odoo 应用程序:

    odoo-bin -u sale_coupon --stop-after-init
    

...等待所有模块加载完毕

  1. 切换到第一个终端window (fifo)

  2. 在另一个 Webbrowser-tab 中:浏览您的 Odoo 应用程序/网站以触发您放置 set_trace()

    的功能
  3. 到第一个Terminal输入要观察的函数变量:

      total_amount
      1480.0
      (Pdb) 
    
  4. 使用“continue”在您的应用程序进程(下一个断点,如果有的话)中走得更远,并使用“quit”中止调试

      (Pdb) continue
      (Pdb) quit
    
  5. 使用键盘组合退出 pdb:Ctrl + D

  6. Odoo 可能仍然挂起,这需要在 python 脚本中注释 pdb-lines,关闭终端 windows 并重新启动您的 Odoo-App :

    odoo-bin -u sale_coupon --stop-after-init