1

この短い Python スクリプトdebugwin.pyは、私の Linux マシンでうまく機能します。

>>> import debugwin
>>> l = []
>>> debuwin.watch(l)
0
>>> l.append(1)

ただし、Windows(Python 2.7.3 Windows 7)では、追加後に更新されないことがあり、スタックオーバーフローが発生することがあると人々から言われました。

>>> error in background error handler:
    out of stack space (infinite loop?) while executing "::tcl::Bgerror {out of stack
    space (infinite loop?)} {-code 1 -level 0 -errorcode NONE -errorinfo {out of stack
    space (infinite loop?)Unable to format..."

スクリプトはどのようにオーバーフローしますか?

4

1 に答える 1

3

バグを報告するために書かれたコードにバグがある場合、オーバーフローする可能性があります。バグを報告しようとすると、バグ報告コードを呼び出しますが、バグがあるため、バグ報告コードを呼び出そうとします...それが問題だと言っているわけではありませんが、それは何を取得するための少なくとも1つの方法ですあなたが見ている。

リンク先の debugwin.py コード (少なくとも、私がこれを書いている時点でのコードのバージョン) でクラッシュが発生しても、特に驚くことはありません。Tkinter はスレッド セーフではなく、アプリケーションのメイン スレッドでのみ実行する必要があるというのが一般的な通念です。コードがサブスレッドで tk インタープリターを作成するようです。したがって、バグ レポート コードにバグがなくても、tcl インタープリターがサブスレッドで実行されているという事実は、スレッドに関連している可能性があると私に思わせます。確かに、クラッシュがランダムに見えるという事実は、それがスレッドに関連していると私に信じさせます.

少し怪しいと思われるものをもう 1 つ見つけました。すべてのウィジェットにはupdate、標準の tkupdateコマンドを呼び出すメソッドがあります。Label から継承するウィジェットがあり、独自のupdateメソッドを作成しました。それは問題を引き起こさないかもしれませんが、それはコードのにおいです。

于 2012-06-29T17:41:47.083 に答える