2012-01-05 13 views
5

これは私が見つけたバグでした!ハワイ。バグは間違ったダウンキャストによるもので、実際にdynamic_castの代わりにstatic_castを使用していました。WinDbgは無効なダウンキャストによるメモリヒープ破損を検出できますか?

私のアプリケーションはかなり大きく、マルチスレッドで、他のアプリケーションとやりとりします。だから、デバッグは非常に難しいです。私はWinDbgGFlags、およびApplication Verifierを結果として使用しようとしました。確かに私はこれらのツールの使い方を知らないからです。

WinDbgのようなツールを使用して無効なダウンキャストが原因でメモリヒープが破損することはありますか?はいの場合、どうですか?

+0

を明らかにすることができますか?この投稿は全く意味がありません。 –

+0

@ライトネス:ああ、本当に? – Guillaume07

+0

本当に何ですか?あなたの最初の2つの文は意味をなさない。彼らはあなたが質問に導入していないいくつかのバグについて話します。どのようなバグですか? –

答えて

9

Windbgの!ヒープ-s -vコマンドを使用すると、ちょうど見つけバグだった何壊れたヒープ

0:008> !heap -s -v 

    Heap  Flags Reserv Commit Virt Free List UCR Virt Lock Fast 
       (k)  (k) (k)  (k) length  blocks cont. heap 
----------------------------------------------------------------------------- 
.ERROR: Block 001842e8 previous size 0 does not match previous block size 4 
HEAP 00140000 (Seg 00140640) At 001842e8 Error: invalid block Previous 
1

編集:コメントは、Windows以外のオプションは実行可能ではないことを明確にしました。その場合、私は前にPurifyと幸運を持っていましたが、残念ながら$$$です。私は他のWindowsのメモリチェックツールに精通していません。

この特定のケースに関しては、自分がダウンキャスティングしていると感じるときは、その必要性を排除する代替インターフェイスまたはデザインについて少なくとも1分は気を付けてください。コンパイラのエラーや警告、そして堅実な設計では、それ以外の場合には数時間かかるバグを見つけることができます。

+0

Windowsユーザーのためにvalgrindをお勧めしますか? – PlasmaHH

+0

@マークB:valgrindがクラッシュしたときにアプリケーションのダンプを入力し、問題の原因となるコード行を出力することは可能でしょうか? – Guillaume07

+0

@PlasmaHH:確かにそうですが、Windowsの下に相当するツールがあると思います。 – Guillaume07

関連する問題