問題タブ [adplus]
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.
asp.net - WinDbg と ADPlus で StackOverflowException をキャッチするのに役立ちます
短縮版
何かがクリーンアップされる前に、最初のチャンスの StackOverflowException で完全なメモリ ダンプを実行し、他のすべての例外の種類を無視する ADPlus スクリプトが必要です。
ログバージョン
新しい ASP.NET コードのリリース後、断続的な StackOverflowExceptions が発生するようになりました。前回の既知の正常なインストール以降に追加されたリビジョンで、無限の再帰とすべての通常の疑わしいものを探しましたが、何も見つかりません。Web サイトは最大 1 時間実行された後、クラッシュします。
WinDbg と SOS を使用し、次のコマンドを使用して、ADPlus を使用してクラッシュ ログを取得しようとしました。
-NoDumpOnFirst の理由は、ビジー状態のサーバー上でのみこのエラーを再現できるためです。最初の例外が発生するたびにミニダンプを実行するために (まあ、それは起こります)、デバッガーは IIS ワーカー プロセスを一時停止して 16 MB のファイルを書き出す必要があるため、要求がキューに入れられ、アプリケーションが不安定になります。エラーが頭をもたげるのに最大 1 時間かかる場合があるため、これは問題です。
したがって、-NoDumpOnFirst を使用すると、WinDbg がこれらのスレッドを出力するダンプ ファイルを取得します。
例外を出力しようとすると、スタック トレースがないことが示され、他のメソッドはそれがアンマネージ コードであると不平を言います。私の推測では、プロセスの終了時にダンプが作成されるため、すべてのスレッドがガベージ コレクションされており、取得する情報は残っていません。
デバッガーが StackOverflowException の最初のチャンスで完全なダンプを実行し、他のすべての例外の種類を無視することを本当に望んでいます。ADPlus が構成ファイル ( http://msdn.microsoft.com/en-us/library/cc409304.aspx )を使用できることは知っていますが、形式はすべてギリシャ語です。これを行う ADPlus スクリプトの作成方法を教えてもらえますか?
...もちろん、上記のスレッド リストを見て何が問題なのかを正確に把握している場合、または私がさらに情報を提供すればそれを理解できる場合は、それも教えてください。
解決の試み 1
以下の答えをありがとうdeemok、それは完全には正しくありませんでしたが、それは私を正しい方向に押し上げました. スタック オーバーフローの例外コードが間違っていた (sbo ではなく sov である) (または、当時はそう思っていたので、以下の deemok の編集を参照)、次の構成でデバッグを試みました。
そして、次のコマンドを使用します。
出力されたログ ファイルが正しい構成を示していることを確認しました。秘訣は、adplus のコマンド ライン パラメータが順番に実行されることです。そのため、初回例外をトラップする構成から開始してから -NoDumpOnFirst を適用すると、構成設定が上書きされます。-c last を指定して構成を適用すると、その設定が優先されます。
しかし、最終的に、スタック オーバーフローはキャッチ不能であることが判明しました。スタック オーバーフローが発生し、メモリ ダンプが取得できず、2 回目のプロセス終了イベントでダンプが発生し、再びすべてがガベージ コレクションされて、有用な情報が得られませんでした。
スタック オーバーフローに関与してオーバーライドしている場合に備えて、プロセス終了例外を短絡しようとしましたが、例外が発生し、メモリ ダンプが得られませんでした。
幸いなことに、コードを調べて答えを見つけました。もちろん、これは循環メソッド呼び出しのケースでした。
実際の解像度
この問題はかなり前に解決されていましたが、スタック オーバーフローを引き起こす ASP.NET ページをすぐに作成しました。(結局のところ、それは難しいことではありません)そして、以下のAxlの応答を試しました.
XML が少しずれて</ADPlus>
いました。Axl はタグを閉じるのを忘れていました (または、おそらくコピーと貼り付けで失われました)。しかし、それは簡単に修正でき、adplus は親切にも何が問題なのかを正確に教えてくれました。
そのスクリプトをテスト スタック オーバーフロー スローアーに対して設定し、結果を windbg にロードしました。!clrstack を呼び出すと、相互に循環的に呼び出しているメソッドの非常に明確な (そして長い) リストが得られました。これで問題が一瞬で見つかりました!次回スタック オーバーフローが発生したときのために、このページをブックマークしておきます。
vista64 - adplus/cdb クラッシュ ダンプは、Vista 64 Ultimate でも機能しますか?
私はasp.netのバグについていくつかの調査を行っています。adplus を取得して、IIS のクラッシュからのクラッシュ ダンプ ファイルを取得しようとしました。過去にXPマシンでこれを行ったことがありますが、現在のVista Ultimateセットアップでは、adplusスクリプトはCDBが実行されている2番目のウィンドウを生成しません。管理者権限で adplus cmd ウィンドウを実行しています。
テスのセットアップ手順を使用したところ、すべてうまくいきました。しかし、CDBは決して生成されません...
Vista 64 Ultimate で IIS 7 の adplus/cdb クラッシュ ダンプを設定できた人はいますか? もしそうなら、どのようにそれをしたか説明できますか?
debugging - StackOverflowとプロセスのシャットダウン後のWindbgスレッドID
ADPlusを使用して(クラッシュダンプモードで).dmpファイルを生成します。未処理の例外(フルメモリダンプファイルを生成する)の最後のシーケンスは...
1回目のDLLアンロード:スレッドIDが含まれていますが、StackOverflowExceptionは含まれていません(この時点ではまだ例外がスローされていないため、期待していません)。
1回目のチャンスStackoverflow:スレッドIDが含まれていますが、StackOverflowExceptionは含まれていません。
1回目のチャンスプロセスシャットダウン(シャットダウン):StackOverflowExceptionが含まれていますが、スレッドIDは含まれていません。
???
ADPlusを構成するか、Windbgでコマンドを実行して、例外をキャプチャし、スレッドIDにアクセスする方法はありますか?
Magnusに応えて、スレッドIDが利用できない場合に役立つ情報はありますか?!threadsを実行すると、いくつかの情報が返されますが、スレッドIDと例外の両方がなければ、そこから先に進む場所は他にないようです。この場合、!clrstackを実行する方が、!threadsを実行するよりも便利なようです。
debugging - どうすれば謎のプロセス キラーを捕まえることができますか?
この顧客は、製品が 2 ~ 5 分間正常に動作した後、常にクラッシュしていると不満を漏らしていました。推測に数日かかりましたが、次の結論に達しました:
プロセスが痕跡 (イベント ログ/クラッシュ ダンプ) を残さずに終了する場合、2 つのオプションがあります:
1. 自分のプロセスが TerminateProcess() を呼び出している
2. 他の誰かが呼び出している私たちを殺している。
自殺的なコールスタック (ケース 1) をキャッチするには、「Adplus -crash -CTCFG …」を実行するだけです
。
私たちは顧客の耳に「誰かが私たちを殺しているのではないか、ウイルスか何かではないか…?!」とささやき始めました。
顧客は懐疑的でした (「ゴースト / ウイルス / デーモン?」)。彼は、私たちのプロセスを監視するスクリプトを定期的に実行していたことを思い出しました。そのスクリプトは、私たちがぶら下がっていると誤って考え、プロセスを強制的に終了させました (Yack!)。
次の質問は次のとおりです
。次回は、誰がプロセスを停止させているかを特定するためのツールまたは手法が必要ですか? (殺されるのを避けるためのハッカーツールがいくつかあることは知っていますが、シリアルキラープロセスのPID / NAMEをログに記録したいだけです。)
彼らはそれを行うための公式/非ハッカーの方法はありますか?
.net - ASP.NET アプリで AdPlus を使用するには、プロセス ID が必要です
AdPlus を使用してメモリ不足エラーを診断したいと考えています。「ハング」メモリ ダンプを実行するには、アプリのプロセス ID を提供する必要があります。それは何であり、どうすればそれを見つけることができますか?
.net - WinDbg と ADPlus 7.0 で AV をキャッチするのに役立ちます
http://debuggingblog.com/wp/2009/02/18/memory-access-violation-in-sql-server-compact-editionce/で説明されているように、SQL Server Compact Edition でメモリ アクセス違反をキャッチしたい 構成は次のとおりです。
最新のデバッグ ツールをダウンロードし、Microsoft が adplus ツールをマネージ コードに書き換え、config ファイルの構文を変更する方法を観察します。設定ファイルを次のように書き換えます。
そして、「コードの例外が見つかりませんでした: clr;av」というエラーが表示されます。私が正しく理解している場合、sos拡張機能はロードされませんでしたが、ロードするために使用する必要がある正しいセクションと構文が見つかりません。
adplus_old.vbs - 何らかの理由で、Windows 7 でプロセスが起動しませんでした。WinDBG 6.12.0002.633 X86 ADPlus エンジン バージョン: 7.01.002 02/27/2009
誰かが、最新の adplus.exe を使用して .NET アプリをデバッグする構成の実例を持っているのではないでしょうか?
adplus - ファースト チャンスとセカンド チャンスの例外
ADPlus を使用してダンプ ファイルを生成すると、ファースト チャンス例外とセカンド チャンス例外の両方が発生しますが、タスク マネージャーを使用してダンプ ファイルを生成すると、ダンプ ファイルは 1 回しか取得されません。セカンドチャンス例外ですか?とにかく、この 1 回目と 2 回目のチャンスの例外については少し混乱していますが、それについて少し読んだことがあります。誰かが良い類推を提供できれば、それは私にとって物事を解決するかもしれません
adplus - Windowsデバッグツールを使用したADPlus.exe - ADPlus vbscriptと比較した場合の機能の違いは何ですか
新しいバージョンの Windows デバッグ ツールをインストールし、AdPlus.exe を入手しました。変更があるかどうかはわかりませんが、以前に別のコンピューターにインストールしたときに、vbscript ファイル (実行可能ファイルではなく) として ADPlus を取得したことを覚えています。インストール ディレクトリにはまだ vbscript ファイルがあることがわかりますが、実行可能ファイルと vbscript の違いを知っている人はいますか。ありがとう
.net - Windows 7 で AdPlus を明示的に実行せずにクラッシュ時にプロセス ミニ ダンプを作成する方法は?
一部のサード パーティ ライブラリのネイティブ コードで、AccessViolationException で失敗することがある .NET プロセスがあります。
それが起こったとき、私は完全なメモリミニダンプをしたいと思っています。このページ - http://support.microsoft.com/kb/931673の「ユーザー モード ダンプを収集するには」セクションを読み、記事の説明に従ってレジストリを構成しました。ただし、クラッシュが発生すると、非常に小さなレポートが作成されます。*.mdmp ファイルは表示されません。
これで、ADPLus 内からプロセスを実行する方法、または既に実行中のプロセスにアタッチする方法がわかりました。ただし、ADPLus を明示的に実行する必要があります。
msbuild、ダブルクリック、コンソールスクリプトなど、どのように開始しても問題のあるプロセスを開始するたびに、ADPlus を自動的に実行するように Windows を構成する方法を考えていました...
つまり、aaaa.exe の実行は、それぞれのコマンド ライン オプションで aaaa.exe を生成する特定のフラグを指定して ADPlus を実行することで置き換えられます。
ウィンドウに画像実行フラグがあることは知っていますが、詳細はわかりません。
ありがとう。
編集1
コマンド ライン パラメーターを保持することが重要です。したがって、フラグを指定して aaa.exe を実行する場合、もちろん、デバッガーから aaa.exe を実行する場合も同様です。
c# - winformクラッシュのデバッグ-C#[ADPlus + Windbg]
これは、再現が難しい例外であり、非常に予測不可能です。Visual Studioデバッガーを接続し、テストを7〜10回実行したところ、このスタックトレースを正常にキャプチャできました。これは私のコードではないので、Windowsレベルで何か不気味なことが起こっていることに注意してください。ところで、PInvokeを使用して、iexplore、メモ帳などのウィンドウを開いたり閉じたりします。
いくつか(検索)した後、Microsoftのその人からのアドバイスに基づいて、ADPlusを試してメモリダンプとWindbgを分析しましたが、windbgから取得した情報は、例外自体よりもさらにわかりにくいものです。
この情報を理解できる専門家がいる可能性がありますが、私にはできません。
それで、あなたたちはこの種の問題を分析するために何をしますか?.Netの「JVM用ヒープダンプアナライザ」のようなものはありますか?
環境:Windows XP SP3 [フルアクセス、管理者]