【问题标题】:Odoo.sh Editor on Jupyter : pdb.set_trace raises BdbQuit ErrorJupyter 上的 Odoo.sh 编辑器:pdb.set_trace 引发 BdbQuit 错误
【发布时间】:2022-07-30 17:24:39
【问题描述】:

使用我的 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 代码。如何解决这个问题?

【问题讨论】:

    标签: python debugging jupyter pdb odoo.sh


    【解决方案1】:

    在 Odoo.sh > yourstagingBranch 中,单击 SHELL 选项卡: samadeva-oerp-staging-5080572 [staging/v13.0]:~$ pip3 install rpdb

    在 Odoo.sh > yourstagingBranch,点击 EDITOR-tab:

    在 ODOO 编辑器中:

    • 在你的python文件的顶部,添加:

      导入 rpdb

    • 在要检查的函数(def subscribe)中,添加:

      def subscribe(self, event, **post): # 之前的代码 rpdb.set_trace() # 后面的代码

    • 单击菜单选项卡:Odoo>更新当前模块:或者,打开一个新的终端窗口并执行此命令:odoo-bin -u website_ticket_event

        samadeva-oerp-staging-5070461 [staging/v13.0]: odoo-bin -u website_ticket_event
    
    • Odoo 启动后(所有模块已加载),在终端窗口中执行此命令:nc 127.0.0.1 4444
        samadeva-oerp-staging-5070461 [staging/v13.0]: ~$ nc 127.0.0.1 4444
    
    • 然后我们可以使用常用的 pdb 命令:

    l(ist):列出当前行周围的行

    w(here):显示我们当前所在的文件和行号

    s(tep):在当前行步入函数

    n(ext):执行当前行

    a(rgs):打印当前函数的参数列表

    p(rint) 变量名 : 打印变量名的值

    (更多信息:https://itnext.io/debugging-your-code-in-python-pdb-vs-rpdb-e7bb918a8ac3

    ####### 或者:使用这篇文章How to debug python CLI that takes stdin?

    1. 在 Odoo.sh>编辑器(Jupyter Lab):打开第一个终端并创建这两个 fifo,它们将用作 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. 切换到第一个终端窗口(fifo)

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

    3. 转到第一个终端并输入要观察的函数变量:

        total_amount
        1480.0
        (Pdb) 
      
    4. 使用“继续”在您的应用程序进程(如果有的话下一个断点)中继续前进,并使用“退出”中止调试

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

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

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

    【讨论】:

      猜你喜欢
      • 2020-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多