我正在使用Python 2.7.3調試OpenERP中的某些東西。在使用Next(n)命令時,調試器似乎與代碼不同步。當你輸入一個諸如打印變量之類的調試器命令時,每次你這樣做,它都會給出不同的答案。在逐步完成代碼時,它似乎也會跳過去。請參閱下面的代碼和輸出。當在Python中定義的tree_but_open事件之後調用Python方法時,Python pdb調試器會感到困惑
我相信這個問題可能與OpenERP通過Python exec()語句通過閱讀下面的OpenERP XML中的代碼字段來調用我的方法有關。調用動態構建的Python代碼並通過exec()調用可能會混淆pdb調試器嗎?當我從一個Button而不是一個tree_but_open事件調用函數時,調試器通過代碼正確地執行代碼。
如果是這樣的話是否有解決方法?
<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 /碼輸出(請注意,我必須鍵入 「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)
CODE通過下面這個OpenERP的行動稱爲
附加信息:
我認爲這與調試器遇到多線程問題有關。在調用Pythons線程庫中的__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)>