問題タブ [sosex]
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.
debugging - sosex.mbm: コマンド引数の設定
メソッドにブレークポイントを設定し、引数を出力し、特定の引数で中断するか、一致しない場合は続行する必要があることがよくあります。ネイティブ コードでは、bp <symbol> "commands"
. ただし、これはマネージド アプリケーションであるため、メソッドが常に JITted であるとは限りません。そのため、!sos.bpmd が利用可能です。ただし、コマンド引数はサポートしていません。!sosex.mbm は別のオプションであり、ドキュメントには、コマンド引数を受け入れることができることが示されています。から!sosex.help mbm
:
"command" - 引用符で囲まれた文字列パラメーターを 1 つだけ指定できます。この文字列の内容は、対応するネイティブ ブレークポイントにコマンド パラメータとして渡されます。
これらのオプションの詳細については、「bp」コマンドのデバッガ ドキュメントを参照してください。
これは、このコマンド引数が などのネイティブ ブレークポイント コマンドに渡されることを意味しますbp
。ただし、同じbp
コマンドが受け入れることができるコマンド引数の解析に失敗します。
以下は私の試みです。
コマンド引数は有効なようで、私が望むように機能します。このようなブレークポイントは頻繁に発生するタスクであるため、上記の複数の手順を実行するよりも、1 つのコマンドですべてを設定することをお勧めします。ドキュメントから判断できる限りsosex.mbm
、次のことができるはずです。
失敗し、引用符が必要であることを示していますが、どこにあるかはわかりません。構文は少し複雑なので、もう少し単純なものを試してみましょう。
今回は構文エラーですが、ここでも特定できません。別のものを試してみましょう。
別のエラーですが、今回は余分な文字についてですが、問題ないようです。もっと簡単なことを試してみましょう。
ついに成功。このことから私が導き出した結論はsosex.mbm
、複数のステートメントが含まれていない限り、単一のコマンド引数しか受け入れられないということです。ドキュメントが示すように、単一のコマンド引数がネイティブ ブレークポイント (bp など) に渡されるだけの場合、そのような制限はありません。
この動作は予期されたものですか、それとも何か間違ったことをしていますか? これを達成する別の方法はありますか?上記の回避策を使用できますが、そのようなブレークポイントを設定する必要があることが多いため、これを行うためのより直接的な方法を見つけたいと考えています。
sosex のバージョン 4.5.0.783 を使用していることに注意してください。これは、ダウンロード可能な最新バージョンです。
.net-4.0 - ダンプ ファイルからさまざまな世代に対して実行された GC の数
とにかく、ダンプファイルから異なる世代に対して実行されたガベージコレクションの数に関する情報を取得する方法はありますか? いくつかの psscor4 コマンドを実行しようとすると、次のようになります。
eehpeap から出力を取得できますが、探しているものが得られません。
c# - psscor4 コマンドが実行されない理由
何らかの理由で、psscor4 をロードするとコマンドを実行できません。MS Web サイトから psscor4 の x64 をダウンロードし、windbg と同じフォルダーに配置しました。psscor4 をロードする前に、問題なく sos コマンドを実行できます。
psscor4 をロードしたら、sos コマンドを実行できません
sos のプレフィックスを付けた後、これらのコマンドを実行できます。したがって、 !sos.do は正常に機能します。しかし、問題は、psscor4 固有のコマンドも実行できないことです。何が間違っている可能性がありますか?このプロセスにwindbgをアタッチしたときにGCが発生していないと思うので、psscor4が出力するエラーは誤解を招くと思います。
EDIT 以下は、.NET 4.0 に使用される構成です。psscor4 で使用できるのはどれですか?
c# - デッドロックの可能性がある場合に実行が停止する
1 か月の長い休憩の後、昨日もプログラムの作業を続けました。コードは何も変更していませんが、アプリケーションが起動しなくなりました。ある時点で実行が中断され、デッドロックに陥っているように見えますが、メソッドが戻ったときに発生するため、実際にデッドロックであるかどうかはわかりません-通常は発生しないはずです.
コードが大きいのでお見せできません。しかし、それ自体のスレッドを超えた唯一のアクションは、Dispatcher によって呼び出されるいくつかの UI 要素へのアクセスであると断言できます。そして、昨日まですべてがうまくいきました。何も変更していません。
これはそれが起こる場所です:
呼び出しコード:
タスクが開始され、't' が返されます。InitializeAddins() メソッドは正常に実行されて終了します (デバッガーでチェック - ログも完全に終了したことを示しています)。次のステップは、「アクション」の宣言行がマークされていることです (終了したように)。その後、デバッグが終了し、それ以上何も起こりません。この Dispatcher フックでさえ呼び出されません。
私の唯一の仮定は、どこかにデッドロックがあるということです。それ以外の場合、実行全体が停止してスタックする理由を説明できません。どこから検索を開始すればいいのか、手がかりが見つかりません。新しく導入されたコードを作り直し、デッドロックも検出するいくつかの拡張ロック メソッドを追加しました。今のところデッドロックは検出されていません。
原因がわからないので、WinDbg と SOSEX を使ってエラーの原因を探ってみました。残念ながら、WinDbg を実行できません。Symbol サーバーをチェックし、最後の出力は次のとおりです。
CLRDLL: mscorwks 検索で mscordacwks_AMD64_x86_4.0.30319.34209.dll が見つかりません CLRDLL: パス上に 'SOS_AMD64_x86_4.0.30319.34209.dll' が見つかりません: 読み込まれた DLL mscordacwks_AMD64_x86_4.0.30319.34209.dll
明らかに何かがロードされていますが、SOSEX の !dlk コマンドを呼び出すと、次のメッセージが表示されます。
0:028> !dlk .NET データ インターフェイスを初期化できません。mscordacwks.dll のバージョン 4.0.30319.34209 が必要です。正しいバージョンの mscordacwks.dll を見つけてロードします。.cordll コマンドのドキュメントを参照してください。CriticalSections を調べています... デッドロックは検出されませんでした。
したがって、このバグを修正する方法がこれ以上わかりません。この行動の理由は何ですか?例外すらありません。既に CLR 例外を有効にしていますが、それらでさえスローされません。非常に奇妙です。通常、このロックダウンは、メソッドが終了した後ではなく、途中で発生すると予想されます...
.net - .NET アプリケーションをライブ デバッグすると、!mt コマンドは「コール ターゲットを解決できません。エラー = 0x80004005」を返すだけです。
私が休憩するとき:
実行すると、次のよう!mt
になります。
コール ターゲットを解決できません。エラー = 0x80004005
私が信じていることは、デバッガーが続行し、次の時点で中断することです。
WinDbg 6.3.9600.17298 を使用して、.NET 2.0 アプリケーションで sosex.dll v4.5.0.692 を使用しています。
何か案は?
c# - mwaits 出力の解釈方法
ロックのタイプ、ロック所有者などの mwaits コマンドを使用する方法を理解しようとしています。これの一部は sos コマンドで実行できることはわかっていますが、sosex mwaits コマンドで取得した以下の情報を使用するにはどうすればよいですか。
.net - オブジェクトを .NET ヒープの ~50% 解放します。OOM の原因を知る方法
アプリケーションのメモリ使用量が多い原因を特定しようとしています。そこで、プロセスダンプファイルを取得しました。EEHeap コマンドは、.NET メモリ ヒープで約 2.8 GB を示しています。
奇妙なことに、最大のエントリ!Dumpheap
は無料で、消費量は最大 1.3 GB です。
これらのいくつかは LOH にあります。
ファイナライズの準備ができているオブジェクトはありません。これは、ファイナライズ スレッドがジョブを終了したことを示しています。
LOH は大きく断片化されているようです。
ここですべてのドットを接続しているかどうかはわかりませんが、私の考えでは、次の GC ではすべてのフリー オブジェクトがメモリから削除され、.NET ヒープ メモリは Gen 0 のフリー オブジェクトに基づいてダウンするはずです。 1、2 (圧縮されるため)。それは公正な声明ですか、それとも私が見逃している可能性のある他の問題がありますか? もちろん、LOH の断片化は問題ですが、それがアプリケーションの使用率にどの程度影響するかはわかりません。
編集: アプリケーションが OOM で失敗し始めました。以下のいくつかのコメントに基づいて、Free オブジェクトに対して報告されたメモリは OS に戻りません。OOM の原因を知る方法
.net - すべての子と (孫チェーン) のサイズが含まれるように、オブジェクトのサイズを計算します。
クラスAにBとCのインスタンスが含まれているとしましょう。BにはD、E、Fが含まれ、CにはG、H、Iのインスタンスが含まれています。したがって、Aのサイズを計算するときは、そのすべてのサイズとその子のサイズを含めたいと思いますアイテム。!dumpheap -stats コマンドを使用すると、A のサイズに、含まれている子、孫、孫、孫のすべてが含まれていないようです。
windbg 内でこのような方法で A のサイズを取得する方法はありますか?
c# - ClrMD でプリミティブ値を取得する
私は次のものを持っています
structValue の値を取得するにはどうすればよいですか?
次のことを試しましたが、成功しませんでした
(「field」はテスト変数で、「innerField」は Test.myStruct です。どちらも ClrInstanceField タイプです)。