問題タブ [minidump]
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.
c++ - ミニダンプの逆アセンブリがバイナリの逆アセンブリと異なる原因は何ですか?
クラッシュのミニダンプがあります。クラッシュの時点で、正常に実行されてはならない奇妙なコードがいくつかあります。何かのようなもの:
AnObject::AFunction は bool を返すメンバー関数です。そのため、結果は 0 または 1 として eax に格納する必要があります。この時点で eax を逆参照しても意味がありません。
対応するバイナリを逆アセンブルしましたが、実際、この関数のコードは異なります。
ミニダンプの逆アセンブリ コードが、実際のバイナリの逆アセンブリ コードと異なるのはなぜでしょうか。
debugging - 実行中のプロセスを「ダンプ」して、別のPCで復元/続行することは可能ですか?
お客様に再現性のない問題があります(一部のデータが正しく表示されていません)。お客様自身が一日に数回問題を抱えていますが、社内で問題を再現することはできません。
顧客が問題を抱えたら、リモートデバッグを使用して実行中のプロセスを調査できますが、これには、開発者のPCが多くのVPNソフトウェアを介して顧客のPCに接続する必要があります。実際には、アプリケーションを実行しているサーバーに直接接続することを顧客が望んでいないため、これはほとんど不可能です(多くの場合、リモートデスクトップまたはCitrixシステムも関係しています)。
実行中のプロセスのMiniDumpを作成してデバッガーで調査することはできますが、プロセスを続行して実際に何が起こっているかを確認することはできません。
プロセスのダンプを作成し、そのダンプを開発者のPCにコピーして、開発者のPCでプロセスを続行する可能性はありますか?アプリケーションは、ネイティブのアンマネージC++アプリケーションです。
もちろん、データベース接続、ネットワーク接続、ファイルなどに関連するすべてのロジックは使用できませんが、この場合、私は主に内部ロジックに関心があります。
これが不可能な場合、これは通常、代わりに仮想マシンを使用して可能ですか?
kernel - WinDbgを使用してカーネルダンプを作成する方法
WinDbgを使用して、Windows用のカーネルモードデバイスドライバーをデバッグしています。ミニダンプをオンデマンドで作成することは可能ですか?
つまり、ブレークポイントの1つがヒットし、システムが停止します。ミニダンプを作成したい(スタックのみとしましょう)。このためのWinDbgキーワードはありますか?
前もって感謝します
c++ - MiniDumpWriteDumpをアウトプロセスで使用している場合、例外情報を取得するにはどうすればよいですか?
MiniDumpWriteDump関数を使用してWindowsでプロセスのコアダンプを作成する場合、同じプロセス内から呼び出された場合は機能しない可能性があるため、別の「ウォッチドッグ」プロセスから実行することをお勧めします(ここ、およびここなど) 。MiniDumpWriteDump
現在、アプリケーションは未処理の例外でインプロセスで呼び出しています(ウォッチドッグスレッドから呼び出します)。動作しないという問題が発生することがあるので、別のプロセスに移動したいと思います。
これで、ダンプの書き込みを開始するように他のプロセスに通知するのは簡単です(イベント、セマフォを使用して名前を付けるだけです)が、LPEXCEPTION_POINTERS
登録したコールバック関数で取得した情報をSetUnhandledExceptionFilter
他のプロセスに渡して、次のようにする方法を教えてください。 MiniDumpWriteDump
sExceptionParam
引数に渡されましたか?
c++ - MiniDumpWriteDump と Pipe への書き込みによりデッドロックが発生する
私のアプリでは、関数Unnamed Pipes
の出力として使用してMiniDumpWriteDump
います。実際にファイルを作成するのではなく、MiniDump をメモリ バッファーに書き込むだけです。
パイプからバイトを読み取るメソッドが別のスレッドから呼び出されます。関数を呼び出すMiniDumpWriteDump
と、ReadFile
andMiniDumpWriteDump
関数は返されません。
ハンドルが悪いのか、パイプのサイズが小さすぎるのかを確認しようとしましたが、単純なWriteFile
関数を使用すると、すべて問題ないように見えます(パイプのサイズが記述された文字列よりも小さい場合でも)。
これが私のコードの一部です:
windows - 別のプロセスからの MiniDumpWriteDump
MiniDumpWriteDump を使用して、アプリケーションのクラッシュ ログを生成したいと考えています。Microsoft は、別のプロセスからダンプを実行することを推奨しています。これは、私がやろうとしていることです。私が抱えている問題はPEXCEPTION_INFORMATION
、親プロセスから子プロセスに構造を渡すことです。問題は、親プロセスがこの構造のメモリを所有しており、それを子プロセスに渡す必要があることです。この投稿を見つけました
MiniDumpWriteDump をプロセス外で使用している場合、例外情報を取得するにはどうすればよいですか?
そして、受け入れられた答えは、「ポインターがウォッチドッグプロセスのコンテキストで無効であることは問題ではありません」と述べました。PEXCEPTION_INFORMATION
これにより、ハンドルされていない例外フィルターが受け取るポインターを子プロセスに渡すだけで、ウィンドウが親からそれを読み取ることができると信じるようになりました。これは起こっていないので、子プロセスがクラッシュした瞬間に何をすべきか本当にわかりません。おそらく、ウィンドウがこのメモリに子に属しているかのようにアクセスしようとするためです。ここで明らかに何かが欠けていますが、何がわかりません。パイプを使用して子プロセスにデータを送信します。上記の質問への回答では、メモリ マップされたファイルを使用すると機能することが示されていますが、その理由、または回答を正しく理解しているかどうかはよくわかりません。
windows - Windows 7 でミニダンプを分析するためのデバッグ ツールのインストール
サーバークラッシュ(Windows Server 2008 R2)のダンプファイルを分析するために、「デバッグツール」をインストールしようとしました。
以前はこれを行っていましたが、Windows 7 用のデバッグ ツールをインストールまたは検索する方法が見つかりません。
この KB 記事を読みました: http://support.microsoft.com/kb/315263。
次に、次の記事 ( http://msdn.microsoft.com/en-us/windows/hardware/gg463009.aspx )から「Windows 用デバッグ ツール」をダウンロードしようとしました。「Windows 用のデバッグ ツールをスタンドアロン コンポーネントとしてインストールする」を選択し、ファイルをダウンロードしてインストールしました。
正常にインストールされましたが、まだファイルが見つかりません。これはばかげた質問のように思えますが、デバッグ ツールを見つけることができません。上記の Windows 7 用デバッグ ツール ( http://www.microsoft.com/en-us/download/details.aspx?id=8279 )をダウンロードしようとしましたが、やはり見つかりませんでした。
どんな助けでも大歓迎です
c++ - C++ バッファ オーバーラン ボックスを無効にする
私の問題は、アプリのクラッシュ時にバッファ オーバーラン メッセージがポップアップすることです。未処理の例外フィルタを設定するミニダンプを使用しています。これは、メッセージをポップアップする代わりに、プログラムを単にクラッシュさせて閉じるのに十分です。
フィルターが適用されるとすぐに NULL ポインターを逆参照するプログラムをテストしました。サーバー マシン (プログラムが実行されるように設定されている場所) で動作しましたが、フィルターを使用しても、リリース モードのアプリケーションであり、デバッグが定義されていません。それでもメッセージがポップアップします。
クラッシュするたびに自動的に再起動する別のアプリケーションがあるため、この問題は非常に深刻です。クラッシュ時に、プログラムを閉じる代わりにメッセージボックスが表示されるため、これは発生しません。それはサーバーであり、また、メッセージ ボックスが原因で、.dmp ファイルが作成されていません。
delphi - EExternal例外中にEXCEPTION_POINTERSを取得するにはどうすればよいですか?
どうすればEXCEPTION_POINTERS
、つまり両方を取得できますか?
PEXCEPTION_RECORD
とPCONTEXT
EExternal
例外中のデータ?
バックグラウンド
Windowsが例外をスローすると、PEXCEPTION_POINTERS
;が渡されます。例外情報へのポインタ:
DelphiEExternal
が例外をスローすると、その情報の半分しか含まれていませんPEXCEPTION_RECORD
。
例外の間に、どのようにしEExternal
て両方を取得しますか?
使用例
MiniDumpWriteDump
Delphiの関数を使用してミニダンプを作成しようとしています。
この関数には、いくつかのオプションのパラメーターがあります。
基本的なレベルでは、3つのオプションのパラメーターを省略できます。
そしてそれは成功します。欠点は、ミニダンプに例外情報がないことです。その情報は(オプションで)4番目のminiExceptionInfoパラメーターを使用して渡されます。
これは良いEXCEPTION_POINTERS
ことですが、例外が発生したときにWindowsによって提供されるを取得する方法が必要です。
TExceptionPointers
構造には2つのメンバーが含まれます。
EExternal
Delphiの例外がすべての「Windows」例外のベースであり、必要なものが含まれていることを私は知っていますPExceptionRecord
。
ただし、関連付けられたは含まれていませんContextRecord
。
PEXCEPTION_RECORD
十分ではありませんか?
に渡そうとするEXCEPTION_POINTERS
と、 nilMiniDumpWriteDump
のままになります。ContextRecord
その後、関数はエラーで失敗します0x8007021B
ReadProcessMemoryまたはWriteProcessMemoryリクエストの一部のみが完了しました
どうSetUnhandledExceptionFilter
ですか?
SetUnhandledExceptionFilter
必要なポインタを使って取得してみませんか?
それに関する問題は、例外がフィルタリングされていない場合にのみ、フィルタリングされていない例外ハンドラが起動することです。これはDelphiであり、例外を処理するためです。
アプリケーションは、WER障害で終了することはなく、また終了することも望んでいません。
EXCEPTION_POINTERS
中に取得するにはどうすればよいEExternal
ですか?
注:バックグラウンド以降はすべて無視できます。それは私をよりスマートに見せるために不必要に設計されたフィラーです。
先制的な卑劣なHeffernanのコメント:Delphi5の使用をやめるべきです。
ボーナスリーディング
- MSDN:クラッシュダンプ分析(Windows)
(呼び出し方法の詳細な例
MiniDumpWriteDump
) - CodeProject:ミニダンプとVisual Studio .NETを使用したアプリケーションの事後デバッグ (概念、長所、およびミニダンプの生成と使用方法に関する一般的な説明)
- Stackoverflow:クラッシュしたときにプロセスのミニダンプを作成するにはどうすればよいですか? (ミニダンプの世界への最初の紹介)
- Stackoverflow:単一のアプリのMicrosoftエラーレポートを防ぐことはできますか? (Delphiでのフィルタリングされていないハンドラーの設定)
c# - クラッシュ ダンプ ファイルの読み取り方法 (ソース コードと .pdb ファイルがあります)
既に StackOverflow にある質問を読みましたが、まだ機能しません。
私は持っている
- 顧客からのミニ ダンプ ファイル
- 顧客が入手したものとまったく同じバージョンのコード
- コードの .pdb ファイルはデバッグ ディレクトリにあります。
ミニ ダンプ ファイルをデバッグ ディレクトリに配置してから、Visual Studio 2010 で開いてみました。
通常のデバッグ メニューでは、[デバッグの開始] がグレー表示されています。
[ミニダンプ ファイルの概要] タブの右上隅に [アクション] のボックスがあります。そこで、[ネイティブのみでデバッグ] をクリックしましたが、「現在の場所で使用できるソース コードはありません」というメッセージしか表示されません。
本当に単純なものが欠けているに違いありません-誰かが私にヒントを教えてください。