1

私は Python C API 拡張モジュールを持っていますが、これは時折、情報のない「MemoryError」で失敗します。モジュールの例外ハンドラによって処理されるエラーではないことは明らかです。拡張モジュールで何が問題なのかを理解できるように、より有益なエラー トレースバックを取得するにはどうすればよいですか?

おそらく問題は、私が拡張モジュールのソース コードを持っていることを考えると、MS Windows 上の MSVC でデバッグ可能なバージョンを取得するにはどうすればよいでしょうか?

4

1 に答える 1

2

拡張モジュールがメモリ不足であると主張しているようです -- もちろん、それが正しいか間違っているかにかかわらず、拡張モジュールのソースを見ずに判断することは不可能です。念のために、メモリ不足がトレースバックを妨げる可能性があるため、古いトリックは、メモリを早めに取得し、エラーケースでドロップしてから再発生させることです。たとえば、次のようになります。

reserve = [None] * 10000
try: amodule.somecall()
except MemoryError:
    del reserve
    raise

これは、どの Python 可視関数がエラーを発生させたか (およびどの Python 関数がそれを呼び出したかなど) よりも多くのことを教えてくれません。それを超えるには、拡張機能の C ソースをデバッグ用にコンパイルし、gdb などのツールを使用する必要があります。

于 2010-04-06T00:37:18.553 に答える