問題タブ [dbghelp]
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.
winapi - カスタム sym ストアからシンボルをロードするように dbghelp を作成する方法は?
SymInitialize および SymFromAddr メソッドがカスタム シンボル ストアからシンボルを自動的に読み込む方法はありますか。SymFromAddr() を使用して、アドレスを読み取り可能な関数名に解決しようとしています。特定のモジュールのシンボルがローカルに保存されている場合は問題なく動作するようですが、WinDbg と同じように、SymInitialize に指定されたパスからシンボルを自動的にダウンロードしたいと考えています。SymInitialize を次のように呼び出します。
SymFromAddr がエラー 487「無効なアドレスにアクセスしようとしています。」を返します。ダウンロードを試みたことがないため、シンボルが見つからないためです。
それらを強制的にダウンロードする方法はありますか?
c - SymFromAddr は、指定されたアドレスのデバッガー シンボルと一致しません
私の Windows アプリケーションでは、MinHook ( https://github.com/TsudaKageyu/minhook ) を使用して malloc をフックしました。) そして、CaptureStackBacktrace と SymFromAddr を使用して、メモリ リークのシンボルを取得しています。SymFromAddr は、実行可能ファイル内のアドレスに対して確実に機能しますが、DLL から取得したアドレスのシンボル情報を報告すると、結果が正しくないことがよくあります。SymFromAddr はエラーを報告せず、単に不適切な情報を返します。ただし、デバッガーは正しい情報を取得できます (SymFrommAddr に渡すアドレスにカーソルを合わせると、Visual Studio がモジュールと関数名を正しく報告します)。おそらく私の問題はシンボル検索パスが間違っているのではないかと考えたので、SymInitialize への呼び出しを更新して、MS シンボル サーバーと実行可能ファイルへのパスを含めましたが、問題は解決しませんでした。
Visual Studio デバッガーは dbghelp システムを使用しますか? デバッガーと SymFromAddr が一致しない理由について何か考えがある人はいますか?
windbg - WinDbg がダンプを開くことができません "Dbghelp バージョンの不一致"
これは、WinDbg: プロセスにアタッチしようとすると、dbghelp.dll のバージョンが一致しませんという質問のようなものですが、 その質問に投稿できず、マークされた回答は実際には回答ではなく、うまくいきません。
クラッシュ ダンプのデバッグに使用していたマシンがありますが、突然ダンプを開くことができなくなり、常にレポートが表示されます。
したがって、不一致について不平を言っていますが、明らかな不一致はありません。
System32 および SysWOW64 の dbghelp および dbgeng のバージョンは 6.1.7601.17514 です。ただし、次の点に注意してください。
a) DbgHelp の Microsoft ページによると、Windows と WinDbg のバージョンを同期する必要はありません (おそらく同期すべきではありません)。
b) WinDbg の 10.0.14321.1024 バージョンをインストールした別のマシンがあり、Windows フォルダーにバージョン 6.1.7601.17514 の dbghelp と dbgeng があり、そのマシンですべてが正常に動作しています。
任意の支援をいただければ幸いです。このマシンは、クラッシュ ダンプの分析に関する限り、基本的に機能していません。Windbg を再インストールし、別のバージョンをインストールしようとしましたが、それでも同じエラーが発生します。
windows - dbghelp.dll を使用して特定のアドレスからアセンブリ コードを取得することはできますか?
dbghelp.dll を呼び出すことにより、dbghelp.dll を使用して指定アドレスの行情報を取得できます SymGetLineFromAddr64()
。
そのアドレスのソース コード情報 (行番号やファイル名など) のみが表示されます。ただし、WinDBG では、指定したアドレスのアセンブリ コードも取得できます。dbghelp.dll を使用してそれを行う方法がわかりません。不可能な場合、使用できる他の dll はありますか?
c++ - ファイルをロックせずにデバッグ シンボルを読み込む
PDB ファイルをロックせずに DbgHelp を使用して一部のモジュールのデバッグ シンボルを読み込もうとしています。
フラグを使用してファイルを作成し、そのファイルFILE_SHARE_DELETE
を呼び出しSymLoadModule64
てみましたが、成功しませんでした:
シンボルは正しく読み込まれますが、ファイルはまだロックされています。EnumerateLoadedModules64 を呼び出す前にプログラムを停止すると、PDB を削除できます。
ファイルをロックせずにシンボルをロードできるかどうか知っていますか?
c++ - DbgHelp.DLL の配布
私のアプリケーションは、DBGHELP.DLL 関数、特にターゲット プロセスによってロードされた DLL に関する情報に依存しています。ただし、Vista より前の Windows バージョンでは失敗することがよくあります (XP がまだ残っていることはご存知ですよね!)。周りを見回すと、ターゲット システムにインストールされている/存在する DBGHELP.DLL が古く、多くの新機能をサポートしていないことがわかりました (たとえば、MiniDumpWriteDumpのいくつかのフラグは古いバージョンではサポートされていません)。
このページでは、DbgHelp のバージョンについて言及し、DBGHELP.DLL (およびその他の DLL) の配布について漠然と言及しています。OS に同梱されている DLL を同梱してはなりません (同意し、問題はありません)。すると、「Debugging Tools For Windows」から最新のDLLを出荷するように言われます。
私の質問は次のとおりです。アプリケーションに同梱できる/同梱する必要があるのはどのバージョンですか? 最新のものを選択し、それが最も低い OS (XP) で動作すると仮定しますか? もちろん、この DLL のデバッグ バージョンは出荷しません。「DbgHelp バージョン」ページでは、特定の OS のサポートについて言及していません。そのため、最新バージョンでも XP でサポートされると想定できます。
DLL をアプリケーション ディレクトリ自体に配置し、SetDllDirectoryなどの関数を条件付きで呼び出すことができます。必要に応じて、DLL 自体や DBGHELP.DLL の関数を動的にロードできます。
関連している: