10

Windbg ファンは非常に強力であると主張しており、私も同意する傾向があります。しかし、STL コンテナのデバッグに関しては、いつも行き詰まっています。変数がスタックにある場合、!stl拡張機能がそれを把握することがありますが、複雑な型 ( などstd::vector<TemplateField, std::allocator<TemplateField> >) のコンテナーがヒープまたは他の構造の一部にある場合、その内容を表示する方法がわかりません。

ヒントや指針をいただければ幸いです。

4

6 に答える 6

3

STL データ型に対するデバッガーのサポートが不十分であることがよくあります。このため、ロギング フレームワークとロギング ステートメントをますます使用しています。デバッガが使えない人向けだと思っていたのですが、本当に価値があると実感しました。これらを使用すると、移植可能なデバッグの知識をコードに組み込み、コードと一緒に維持できます。対照的に、デバッガーで行う作業は通常、一時的なものです。

于 2008-09-27T05:55:46.403 に答える
2

WinDbg (pykd) の Python 拡張機能には、マップ コンテンツをダンプできるスニペットstlp.pyがあります。
現在、STLPort マップの実装をサポートしています。x86 および x64 でテスト済み。この記事では、その使用方法を示します (ロシア語ですが、例は一目瞭然です)。

于 2011-04-10T19:56:56.340 に答える
2

このデバッガー拡張機能を試してみることもできます。Skywing社が開発したSDbgExtというライブラリです。

于 2008-10-15T19:29:19.383 に答える
1

少し前にまったく同じ質問がありました。私の答えは、Visual StudioはSTLおよび複雑なタイプに対して本当に優れたデバッガーであるということです(Visual StudioがMDbgよりもはるかに優れたデバッガーであるように)。

これは、WinDBGの性能が低いということではなく、レベルが低いということです(たとえば、Visual Studioを使用してクラッシュダンプで役立つことを試してみてください。できません)。

とにかく、あなたの質問に答えるために、あなたはいくつかのトリックを使ってデータ型を見るのにVisualStudioを使うことができます:

  1. WinDBGの別のインスタンスを開始し、非侵襲的にアタッチしますcdb -p <PID> -pv。これにより、デバッグ対象のスレッドが一時停止されます。これで、元のWinDBGを安全に切り離すことができますqd
  2. Visual Studioを接続してから、非侵襲的なWinDBGをデタッチしqdます。STLを見て、必要に応じて続行します。
  3. WinDBGに戻る必要がある場合は、手順1に進み、侵襲的なWinDBGと交換します。
于 2011-01-05T13:37:37.987 に答える
0

dt -r ie dt yourapp!class 7ffdf000 -r5 を使用します

于 2008-10-12T13:00:58.063 に答える
0

toString()私は通常、多くのクラスでメソッドを固執することになります。これは、重要と思われるすべての情報を示しています。コンテナはこれを呼び出して、コンソールにクラス情報を表示できます

于 2008-09-27T10:37:05.667 に答える