3

私は最近、マルチメディアライブラリであるSFMLをいじっています。私は C# を使用しているので、当然のことながら、最新の 2.0 バージョンで SVN から取得できる .Net バインディングを使用しました。しばらくいじり回した後、Text オブジェクト (テクスチャ フォントの描画に使用されるオブジェクト) を使用しているときに、アプリケーションがハングアップすることがあることに気付きました。

プロファイラーと万能の Windows タスク マネージャーを使用してさらに調査を行ったところ、Text を使用する単純なアプリケーションが何らかの形でメモリ リークを起こしているように見えることが明らかになりました。それから、SFML フォーラムでそれに関するスレッドを作成しました (スレッド)。しかし、SFML の主な開発者は、自分のマシンでバグを再現できませんでした。私は気が狂っているはずがないと思って、それを友人に送ったところ、彼は実際にそれが起こっているのを見たと報告しました.

SFML の開発者である Laurent のためにサンプルを作成しましたが、それでも彼はバグを再現できませんでした。これは OS に関連している可能性があると考えて、ファイルを可能なすべての人に送信し、OS について問い合わせました。ここに私の結果があります:

http://spreadsheets.google.com/ccc?key=0AhcHeJlLGEVUdG1TTi1mTkFxeFlHYVRISXhjbFBDUmc&hl=ja

ご覧のとおり、Turc と K7 はどちらも同じ OS ですが、K7 ではクラッシュしません (テスト候補がまだ報告されていないため、表は不完全です)。とにかく、これは明らかに OS の問題ではないことを示しています。

だから私の実際の質問は、OS やアーキテクチャ以外の他の要因が、特定のシステムにのみ現れるこのようなバグに影響を与える可能性があるということです。

参考までに、友人に送ったファイルを以下に示します: http://dl.dropbox.com/u/3310651/MemLeak2.rar

そして、私が行ったプロファイリングのスクリーンショット: http://dl.dropbox.com/u/3310651/sfml_memleak.png

ありがとう!

4

2 に答える 2

1

何が違いを引き起こしているのかはわかりませんが、マシンで問題を再現できる場合、1 つのオプションは、すべての Text オブジェクトがぶら下がっている理由を調査することです。これを行うには、「sos」デバッグ ライブラリを使用してクエリを実行し、Text オブジェクトをルート化しているものを見つけます。Visual Studio で sos を使用するための優れた入門書は、こちらから入手できます。

Visual Studio の Express バージョンしかない場合は、Debugging Tools for Windowsの一部である WinDbg デバッガーから sos を使用できます。WinDbg で sos を使用するように調整された別の優れた概要は、こちらにあります

于 2010-02-10T11:19:15.787 に答える
0

IRC でしばらく話し合った後、私はそれを理解しました。ネイティブ ライブラリはスレッド セーフではなかったため、参照オブジェクトの割り当てと割り当て解除を同時に行うと問題が発生しました。

于 2010-02-13T00:43:20.220 に答える