問題タブ [clrmd]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
3601 参照

c# - ClrMD を使用してダンプ ファイルをロードすると、「DAC のロードに失敗しました: CreateDacInstance が失敗しました」

クラッシュダンプとライブプロセスを分析するために、マイクロソフトの新しいライブラリであるClrMDを試しています。

.NET Frameworkブログ投稿のサンプルに従いました(添付の .cs ファイルを使用)。

サンプルを実行して、サンプルと同じマシンで実行されているプログラムから取得した .dmp ファイルを分析しようとしました。

次のコードを使用して、ランタイム オブジェクトを作成しようとする場合:

次の例外がスローされます。

何か案は?

0 投票する
1 に答える
1219 参照

c# - ClrMD を使用して非プリミティブ ClrInstanceField 値を適切に処理するには?

ヒープ上のかなり深いオブジェクト グラフの対話型ビューを表示できるようにするだけでなく、多くの統計情報を取得しようとしているマネージド プロセスの非常に大きなメモリ ダンプがいくつかあります。SOS を使用した WinDbg の set に相当するものを考えてみて!do <address>くださいprefer_dml 1。プロパティを継続的にクリックしてその値を確認できますが、多くのオブジェクトを比較するためのはるかに使いやすい UI でのみ可能です。

Microsoft.Diagnostics.Runtime (ClrMD) がこのタスクに特に適していることがわかりましたが、配列フィールドの操作に苦労しており、オブジェクト フィールドについて少し混乱しています。より良い。


Array : ヒープから直接アドレスを指定して配列をターゲットにして使用するClrType.GetArrayLengthClrType.GetArrayElementValue問題なく動作しますが、別のオブジェクトのフィールドを掘り下げるとClrInstanceField.GetValueClrInstanceField.ElementTypeClrElementType.SZArray(オブジェクト グラフを掘り下げることはArrayまだありませんが、同様に処理したいと考えています)。

編集:ClrType for使用しSystem.UInt64て配列フィールドを逆参照するparent address + offset of the array fieldた (配列ポインターが格納されているアドレスを計算するために使用します)。その後、EnumerateObjects から取得した場合と同じように操作できます。プロパティをサポートしていない一部の配列で問題が発生していArrayComponentTypeます。私はまだ構造体の配列でテストしていないので、それがインライン構造体のCスタイルの割り当てにint[]なるのか、それともヒープ上の構造体へのポインターの配列になるのか疑問に思っています. Guid[]からの取得に問題があるタイプの1つですArrayComponentType

オブジェクト:修正 (論理エラー) まず、呼び出した後、問題なく使用できるアドレス (?)が返されるので、ネストされたオブジェクトのフィールド名と値を確認できます。とはいえ、ポリモーフィズムを考慮する必要があるため、同じアドレスで使用しようとしたところ、NULL または完全に間違ったものが返されました。最初のユース ケースではアドレスが機能するのに、2 番目のユース ケースでは機能しないのは奇妙に思えます。ClrInstanceFieldTypeClrElementType.ObjectGetFieldValueulongClrInstanceField.Type.FieldsClrHeap.GetObjectType

String : Fixed (回避策が見つかりました) 私の実際のプロジェクトでは既に SOS 付きの DbgEng を使用しているため、アドレスによって文字列の値を簡単に取得する別の方法がありますが、使用しようとしてClrInstanceField.GetFieldValue文字列を返すことに成功したのは非常に奇妙に思えましたが、完全に不正確な結果 (奇妙な文字の束)。多分私はこれを間違っていますか?


編集:元のコードから LINQPad で実行される抽象化を抽出しました。ここに投稿するには少し長くなりますが、要点はすべてここにあります。コピー/貼り付け/リファクタリングのすべてからまだ少し面倒です。これらの問題を修正した後、最終的なソースを CodePlex または GitHub に投稿する可能性があります。

コード ベースはかなり大きく、プロジェクトに固有のものですが、どうしても必要な場合は、サンプル セットを抽出できる場合があります。つまり、ClrMD オブジェクトへのすべてのアクセスは非常に単純です。!dumpheap -stat(ルート オブジェクトに対しては正常に機能する) などのSOS コマンドから初期アドレスを取得し、ClrHeap.GetTypeByNameorを使用しますClrHeap.GetObjectType。その後は、メンバー、、およびClrType.Fieldsのみに依存します。ClrInstanceFieldTypeElementTypeGetFieldValue

おまけとして、NuGet パッケージで提供される XML ドキュメントのブラウザー フレンドリーバージョンを見つけましたが、これは IntelliSense が提供するドキュメントと同じものです。

0 投票する
1 に答える
639 参照

.net - DebugDiag は、Visual Studio 2013 のような「包括的なサイズ」のレポートを生成できますか

Visual Studio 2013 は、包括的なサイズ (子オブジェクトのサイズを含む) の列を表示できます - http://blogs.msdn.com/b/visualstudioalm/archive/2013/10/16/net-memory-analysis-enhancements-in -visual-studio-2013.aspx

DebugDiag のメモリ分析レポートは現在、子オブジェクトを含まないオブジェクト サイズのみを表示します。DebugDiag のレポートに子オブジェクトのサイズを含める方法はありますか?

Visual Studio は .NET 4.5 クラッシュ ダンプの分析のみをサポートしているため、.NET 4.0 のレポートを生成するための良い方法を教えてください。

包括的サイズ

0 投票する
0 に答える
229 参照

c# - Mono の CLR メモリ診断 (CLRMD) に相当するものはありますか?

タイトルは非常に明白です: Mono の CLRMD に相当するものはありますか、または少なくとも、割り当てられたすべてのオブジェクトのリストを取得してそれらのフィールドを読み取るために、外部の Mono プロセスのヒープを非侵襲的に読み取る方法はありますか?

そのようなツールがない場合、この目的のために独自の戦略を実装できるようにする Mono プロセスのヒープの構造に関する API とドキュメントはありますか?

0 投票する
1 に答える
283 参照

c# - ClrMD でプリミティブ値を取得する

私は次のものを持っています

structValue の値を取得するにはどうすればよいですか?

次のことを試しましたが、成功しませんでした

(「field」はテスト変数で、「innerField」は Test.myStruct です。どちらも ClrInstanceField タイプです)。