2012-08-06 49 views
0

我正在使用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)> 

回答

0

我已經在Eclipse和PyDev中使用Python調試器進行多線程。我最初遇到了一些問題,但PyDev團隊修補了它們。可能值得嘗試PyDev,看看你的問題是否仍然存在。

我發佈了一些關於在PyDev下設置OpenERP的更多細節,內容爲another answer