0

我正在使用 Python 2.7.3 在 OpenERP 中调试一些东西。使用 Next (n) 命令单步执行时,调试器似乎与代码不同步。当您键入诸如打印变量之类的调试器命令时,每次执行此操作时它可能会给出不同的答案。单步执行代码时,它似乎也会向后跳过。请参阅下面的代码和输出。

我相信这个问题可能与 OpenERP 通过读取下面 OpenERP XML 中的代码字段通过 Python exec() 语句调用我的方法的方式有关。调用动态构造并通过 exec() 调用的 Python 代码是否可能会混淆 pdb 调试器?当我从 Button 而不是 aa tree_but_open 事件调用该函数时,调试器将逐步执行代码。

如果是这种情况,是否有解决方法?

通过以下 OpenERP 操作调用 CODE:

<record id="action_wash_st_method1" model="ir.actions.server">
            <field name="type">ir.actions.server</field>
            <field name="condition">True</field>
            <field name="state">code</field>
            <field name="model_id" ref="model_view_tree_display_address_list"/>
            <field eval="5" name="sequence"/>
            <field name="code">
action = self.view_calc_sales_tax(cr, uid, context)
</field>
           <field name="name">wash state action request</field>
</record>

 <record model="ir.values" id="action_wash_st_tax_trigger_method1" >
            <field name="key2" eval="'tree_but_open'" />
            <field name="model" eval="'view.tree.display.address.list'" />
            <field name="name">Method1 Wash State</field>
            <field name="value" eval="'ir.actions.server,%d'%action_wash_st_method1"/>
            <field name="object" eval="True" />
 </record>

PDB/CODE OUTPUT(请注意,我必须输入“ids”两次才能打印值):

-> ctx["local_rate"] = res1["local_rate"]
(Pdb) n
> /home/glenn2/openerp6.1/addons/6.1/wash_tax2/wash_tax.py(169)view_calc_sales_tax()
-> ctx["code"] = res1["code"]
(Pdb) n
> /home/glenn2/openerp6.1/addons/6.1/wash_tax2/wash_tax.py(172)view_calc_sales_tax()
-> ids = [3333,4444,9999]
(Pdb) n
(Pdb) > /home/glenn2/openerp6.1/addons/6.1/wash_tax2/wash_tax.py(173)view_calc_sales_tax()
-> self.pool.get('account.invoice').button_reset_taxes (cr,uid, ids, ctx)
ids
*** NameError: name 'ids' is not defined
(Pdb) ids
[3333, 4444, 9999]
(Pdb)

附加信息:

我认为这与调试器遇到多线程问题有关。在调用 Python 线程库中的 __bootstrap_inner() 后,问题开始发生。有谁知道是否可以为多个线程启用 Python 调试器:

(Pdb) > /home/glenn2/usr/local/lib/python2.7/threading.py(526)__bootstrap()
-> self.__bootstrap_inner()

>(Pdb)  /home/glenn2/usr/local/lib/python2.7/threading.py(526)__bootstrap()->None
-> self.__bootstrap_inner()
self
(Pdb) <Thread(Thread-35, initial)>
self
<Thread(Thread-34, stopped 47994097374976)>
(Pdb) self
(Pdb) <Thread(Thread-34, stopped 47994097374976)>
self
(Pdb) <Thread(Thread-35, initial)>
self
(Pdb) <Thread(Thread-34, stopped 47994097374976)>
self
(Pdb) <Thread(Thread-35, initial)>
self
(Pdb) <Thread(Thread-34, stopped 47994097374976)>
self
<Thread(Thread-35, initial)>
(Pdb) self
(Pdb) <Thread(Thread-34, stopped 47994097374976)>
4

1 回答 1

0

我已经在 Eclipse 和 PyDev 中为多个线程使用了 Python 调试器。我最初遇到了一些问题,但 PyDev 团队修补了它们。可能值得尝试 PyDev 看看您的问题是否仍然存在。

我在另一个答案中发布了一些关于在 PyDev 下设置 OpenERP 的更多细节。

于 2012-08-07T23:30:16.610 回答