問題タブ [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 - 純粋なC言語を使用してプログラムでダンプファイルを作成する方法は?
Cで記述されたカスタマープログラムのダンプファイルを作成する必要があります。
Windows用のミニダンプがあるのを見ましたが、それはC ++でのみ機能しますか?
C言語の他の解決策はありますか?
お時間をいただきありがとうございます。
com - Visual BasicダンプファイルからCOMオブジェクトを検査する方法は?
バックグラウンド
コンソールアプリケーションを介してハンドヘルドストアスキャナーにインターフェイスするC#で記述された.NETWinFormsアプリケーションがあります。コンソールアプリケーションは古き良きVB6で書かれています---そこにはマネージコードはありません。VB6アプリケーションは、いくつかのCOMオブジェクトで構成されています。
.NET WinFormsアプリケーションは、適切なパラメーターを使用してコンソールアプリケーションを呼び出すことにより、スキャナーのデータを更新します。コンソールアプリケーションが起動すると、モーダルフォームがポップアップ表示され、ハンドヘルドデバイスをクレードルに配置するようにユーザーに通知します。
問題
顧客は、コンソールアプリケーションを開始するための呼び出しが、リマインダーフォームを表示する前にハングしているように見えるという奇妙な状況にあります。ユーザーがいずれかのキー(ShiftやAltなどの無害なものでも)を押すと、アプリケーションのフリーズが解除され、リマインダーフォームが表示されます。ハングしている間は、コンソールアプリケーションのCPU使用率が非常に高くなります。
ProcDumpを使用して、コマンドラインアプリケーションからメモリダンプを取得しました。管理されたダンプファイルのデバッグの経験はありますが、このVB6ダンプは私には奇妙です。
いくつかのフルメモリダンプを連続してキャプチャしました。それらのいくつかでは、COM接着剤スタックがあるように見えます。たとえば、いくつかのダンプファイルは次のような呼び出しスタックを示しています。
私が持っている唯一のシンボルが私たちのコードからのものであることは助けにはなりません。Microsoftシンボルサーバーには、msvbm60.dll用のPDBファイルがありません(または、少なくともそれらのバージョンである6.0.98.2からはありません)。
質問
彼らのシステムでのみ発生しているCOMスレッドの問題があるのではないかと疑っています。
1)ダンプファイル内の各スレッドのスレッド状態を確認するにはどうすればよいですか?これがマネージドダンプファイルの場合、スレッドの状態を調べ!threads
て!threadstate
把握します。マネージコードがないので、sos.dllは使えません。~
とを使用したヒントは表示されませんでした!teb
。
2)ダンプファイルに作成されたCOMオブジェクトを確認する方法はありますか?繰り返しますが、管理対象ダンプでは、!dumpheap
管理対象オブジェクトのリストを取得するためにを実行できます。COMオブジェクトに似たようなものはありますか?
3)ダンプファイル内のCOMオブジェクトのスレッドモデルを決定できますか?
c++ - MiniDumpWriteDumpはMiniDumpNormalでは失敗しますが、MiniDumpWithFullMemoryでは機能します
次のように、WindowsXPSP3で実行されているローカルサービスアプリのトップレベルの例外ハンドラーからMiniDumpWriteDumpAPIを呼び出しています。
上記はエラーコード0x80070057で失敗しますが、ダンプタイプをMiniDumpWithFullMemoryに変更すると、問題なく動作します。なぜですか?
c++ - Visual Studio でネイティブ C++ ダンプ ファイルをデバッグするときに、ソース コードをどのように表示しますか
ネイティブの C++ アプリが実行されているサーバーからミニダンプを取得しました。exeファイルとpdbファイルもあります。Visual Studio 2005 Pro を使用してミニダンプを開くことができ、pdb ファイルからシンボルが正しく読み込まれます。
デバッガー (F5) を実行すると、クラッシュしたことがわかります。スタック トレースをクリックして場所を確認すると、「現在の場所で使用できるソース コードはありません」というソース コードが見つからないことがわかります。
ソース コードの場所を Visual Studio に伝えるにはどうすればよいですか?
私のexeは、pdbファイルでビルドした最適化されたリリースビルドです。
minidump - クラッシュしたときに子プロセスのミニダンプを作成する方法は?
プロセスに例外が発生したときにミニダンプを出力するコードがありますが、そのコードを親プロセスに移動して、一方が他方を破損しないようにしたいと考えています。
(1.)ラッパー プロセスからの子プロセスのクラッシュをリッスンし、(2.)結果としてミニダンプを書き込むにはどうすればよいでしょうか?
C++ は、ラッパー プロセスの言語として最も自然な選択肢のように思われますが、.NET も選択肢の 1 つです (私のアプリは C#/C++ が混在しています)。
c++ - C++ 例外「スレッドは、適切なアクセス権を持たない仮想アドレスから読み書きしようとしました。」
再現が困難なクラッシュを追跡するために、UnhandledExceptionFilter
ここで説明するようにミニダンプ ファイルを作成するように構成しました:未処理の例外と効果的なミニダンプのカスタム フィルターのデバッグ
ダンプは正常にキャプチャされていますが、スタック情報をうまく解釈できません。他の誰かが同様のことを経験したことを願って、以下にできる限り多くの詳細を提供します. 結果として、この質問が少し冗長になってしまったら申し訳ありません。
Visual Studio は、次のダンプの概要を提供します。
例外が発生したスレッドのスタックを見ると、次の非常に短いコール スタックが得られます。
アプリケーション内のすべての正しいスレッドには、呼び出しを示すきれいなスタックがあります__RtlUserThreadStart
。たとえば、次のようになります。
クラッシュしたスレッドのスタックの下位部分を 0xCCCCCCCC に置き換えるにはどうすればよいですか?
完全を期すために、ここにフレームの分解がありますServer.exe!CServer::LoadPageList() Line 269 + 0x28 bytes
アップデート
関数のソースを含めるのを完全に忘れていました (Thanks Joachim):
奇妙なことに、関数 LoadPageList のすべての操作が正常に完了し、このスタック フレームから戻る直前に文字列のデストラクタが呼び出された後にクラッシュが発生したようです。
c# - アプリケーションがスタンドアロンで実行されている場合 (デバッガーなし)、MiniDumpWriteDump() が機能しない
私の .NET4 アプリケーションでは、 と をMiniDumpWriteDump()
呼び出しApplication.ThreadException
ますAppDomain.CurrentDomain.UnhandledException
。
アプリをデバッガー (VS10) で実行すると完全なダンプが得られますが、スタンドアロンで実行するとダンプ ファイルが空になります。
何か案は?
c# - リリース モードでミニダンプ シンボルが読み込まれない
VS 2010 を使用してミニダンプをデバッグしようとしています。
「デバッグ モード」でビルドされたアプリケーションによって生成されたミニダンプは正常に動作し、適切にデバッグできますが、「リリース モード」でビルドされたアプリケーションによって生成されたミニダンプは機能しません。つまり、シンボルに問題があると思われるため、ミニダンプのデバッグ中に「利用可能なソースがありません」というメッセージが表示されるということです。
[モジュール] ウィンドウの [シンボル ステータス] に、「シンボル ファイルにネイティブ シンボルがありません」と表示されます。
シンボル パスからシンボルを読み込むと、「一致するシンボル ファイルがこのフォルダーに見つかりませんでした」というメッセージが表示されます。もちろん、それは真実ではありません (私はそれを最初から知っていましたが、ChkMatch.exe と本当に一致するかどうかを確認した場合に備えて)。
どのビルド スイッチがミニダンプを使用不能にするかを正確に突き止めることができました。それらは「コードの最適化」と「デバッグ情報」です。ミニダンプを「機能」させる唯一の方法は、「コードの最適化」のチェックを外し、「完全な」デバッグ情報を使用することです (いいえ、pdb のみは機能しません)。どちらもパフォーマンスに影響を与えるため、アプリケーションのリリース バージョンにこの種のビルド セットアップを使用することは避けたいと考えています。
これらの 2 つのスイッチがミニダンプを使用できない理由を知っている人はいますか?
ありがとう。
c# - MinidumpWriteDump from managed code throws an AccessViolationException
I have the basic MiniDumpWriteDump method interop copied off the internet in my C# (3.5) project.
Up till now, i have used this code to register on the UnhandledException event, to take a crash dump before the process shuts down.
In a particular scenario i am facing now, i have set this function to be used in some other case, to take a diagnostic memory dump of the process.
Whenever this function gets called (not from the UnhandledException handler), it throws an AccessViolationException
Here's what the MiniDump code looks like (removed some redundant parts):
Native types are defined like so:
windbg - 64 ビット OS で実行されている 32 ビット プロセスのミニダンプを作成する
32ビット環境で実行するように設計された.netアプリがあり、wow64環境の64ビットOSで実行されます。
現在、アプリケーションのダンプを作成するためのユーティリティ (32 ビット) を作成しています。
次のコードを使用してダンプを作成します。
この API 呼び出しは、32 ビット OS では正常に実行されますが、64 ビット OS では失敗します。
64ビットOSで32ビットアプリのダンプを作成した人はいますか?Pls help.