問題タブ [google-breakpad]
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 - クラッシュレポートダイアログが無効になっている場合のSetUnhandledExceptionFilterとデフォルトの例外ハンドラ
SetUnhandledExceptionFilterを使用して(google breakpadを介して)カスタム例外ハンドラーをセットアップするアプリケーションが、ブレークパッド例外ハンドラーがクラッシュをキャッチし、ミニダンプファイルを保存し、SetUnhandledExceptionFilter関数からEXCEPTION_EXECUTE_HANDLERを返し、標準を実行した後、ハングしている状況があります。例外ハンドラ。フィルタ関数がEXCEPTION_CONTINUE_SEARCHを返し、Windowsエラー報告ダイアログがSetErrorMode()によって無効にされている場合にも、ハングが発生します。SetErrorMode()を使用してWERを無効にしない場合、ユーザーがWERダイアログの[閉じる]ボタンをクリックすると、プロセスが閉じます。
ハングはWindowsXPで発生しますが、Windows7では発生しません。
SetUnhandledExceptionFilterのドキュメントには、「EXECEPTION_EXECUTE_HANDLER」が返されると、関連する例外ハンドラーが実行され、「通常はプロセスが終了する」と記載されていますが、使用される終了メソッドのドキュメントが見つかりませんでした。
スタックトレースは、DllMain()プレリュードから呼び出されたサードパーティDLLのオブジェクトのグローバルデストラクタでハングが発生していることを示しています。
ミューテックスはその後強制終了されたスレッドによってロックされたと思いますが、この方法で実行される可能性のある他の種類のグローバルctor/dtorが同様の問題を引き起こす可能性があることを想像できます。私の質問は次のとおりです。
ExitProcess()
を介してWERが無効になっている場合にクラッシュが発生した場合に呼び出されるのは、予期される動作SetErrorMode()
ですか?- WindowsXPとWindows7の間で、デフォルトの例外ハンドラーの動作が変更されたことを知っている人はいますか?
- 予想される動作の場合
ExitProcess()
、サードパーティのDLLでこの問題に対処する最も安全な方法は何ですか?ブレークパッド例外ハンドラから呼び出すTerminateProcess()
と問題は修正されますが、注意すべき注意事項はありますか?
visual-studio - Qt Creator (gcc/MinGW) を使用して Windows で Google ブレークパッドを構築する方法は?
指定: Qt Creator (4.7.4、Win32 のみ、gcc/MinGW) 用に作成されたアプリケーション プロジェクト。
必要: 有名な Google ブレークパッド ライブラリをプラグインして、顧客から詳細なクラッシュ ダンプを収集します。
私の現在の調査結果は次のとおりです。
- 約 2 年前の breakpad-qt プロジェクトがあります。Qt Creator でビルドする上流のブレークパッド ソースのサブツリーが含まれているので、それをビルドして動作例を作成しようとしました。
DbgHelp.h
ブレークパッド自体は、Microsoft ミニダンプ形式を使用しているため、本質的に Windows SDK に依存しています。DbgHelp.h
Windows SDK ヘッダーで見つけることができますが、GCC/MinGW でコンパイルできなかったと報告されている Visual Studio のヘッダーがさらに含まれています (MSVS コンパイラによる互換性のない言語拡張だと思います)。- google breakpad には MSVS ソリューション ファイル (gyp によって作成された) が含まれており、MSVS で簡単にビルドでき (私は 2008 と 2010 の両方の Express バージョンで成功しました)、
.lib
ターゲット アプリケーションにリンクするいくつかの を作成します。 - ただし、
.lib
上記でコンパイルされたファイルは MinGWld
では認識されないため、Qt プロジェクトとリンクできませんでした。ライブラリ形式の既知の非互換性です。 - ただし、
.lib
MSVS 2008 (および 2010 ではない) のファイルはreimp
、ライブラリを MSVS 形式から MinGW で使用可能な形式に変換することを目的とした MinGW ツール (利用可能な最新のもの) のツールによって理解されます。私の場合、シンボルは一見正しくエクスポートされ、一部の.obj
ファイルもエクスポートされますが、再コンパイルされたライブラリ (dlltool
MinGW を使用) はまだ MinGW によってリンクできませんld
。 - そして、
.lib
リンケージに関するすべての騒ぎは、別の問題で妨げられています。クライアント コードをコンパイルするには、Qt プロジェクトで有効なヘッダーが必要です。これらのヘッダーは、 を含むブレークパッドのものとまったく同じDbgHelp.h
です。上記を参照してください!
現在開いている代替案:
- アプリケーションを Qt/MinGW (Creator) から Qt/MSVS に完全に切り替えます。これにより、上流のブレークパッドの直接リンクが可能になります。これは、Qt + ブレークパッドの小さなググ可能なユースケースの成功の核心だと思います。
- アプリケーションが Creator で通常どおりビルドされ、後で MSVS リンカーによってブレークパッドとリンクされる、いくつかのハイブリッド アプローチを構築します。しかし、再び、ヘッダー!
- 純粋な Qt Creator でコンパイルするために、Microsoft ヘッダーからブレークパッドが必要とする最小限のクロージャーを切り離します。
提案、既存の経験はありますか?
c++ - ライブラリでのブレークパッドの使用:シンボル構造クエリ
スタックトレースを使用すると非常に便利ないくつかのアプリケーションにBreakpadを実装していますが、一部のライブラリのシンボルファイルをどう処理するかについて少し混乱しています。
Applicationとourlibrary.soのシンボルテーブルを生成しました。例外ハンドラーをApplicaionとourlibrary.soに含めました。両方のダンプが生成されますが、Applicationのシンボルテーブルのみが取得されるため、ライブラリのシンボルテーブルが適切な場所にあるかどうか疑問に思います。
現在、そのセットアップは次のようになっています。
- シンボル
- 応用
- ブレークパッドで生成された値
- Application.sym
- ourlibrary.so
- ブレークパッドで生成された値
- ourlibrary.so
- 応用
シンボルディレクトリのフォルダ構造を台無しにしたと思いますが、100%確実ではありません。
android - Android NDK用のGoogleBreakpadを使用していますか?
Androidネイティブコード(NDK)用のGoogle Breakpadを使用している人はいますか?
もしそうなら、それを起動して実行する方法(つまりクライアント側)について詳しく説明していただけますか?ドキュメントは非常に限られており、Androidについてはまったく触れていません。ビルドシステムにはAndroidの情報が含まれていますが、問題はないと思います。
macos - Qt、Google BreakPad、MacO
xcodeなしで標準のQtツールチェーンを使用してMacOSでGoogleBreakpadを正常に構築した人はいますか?
私はこのライブラリを2日間使用しようとしていますが、まだ成功していません。私はすでにそれを正常にコンパイルし、WindowsとLinuxで実行しました。(元のGoogle-gitリポジトリから)。
ただし、MacOSバージョンのライブラリにはlibbreakpad_client.aのmakefileがなく、生成されたlibbreakpad.aには例外ハンドラーが含まれていません。
http://screencast.com/t/V0mNiM3kZ
Stackoverflowでこの問題に関するトピックはほとんど見つかりませんでしたが、更新されたmakefileに関するアドバイスが機能しませんでした(またはmakefileを正しくコピーしませんでした)。
また、更新されたバージョンをMozillaリポジトリから直接ダウンロードしようとしました(バージョン10および11beta)。しかし、Mozillaバージョンをコンパイルしようとすると、シンボルが定義されていない別のエラーが発生しました(MacおよびLinuxでも)。
また、 AlekSi --breakpad-qtも見つかりましたが、このバージョンもWinとLinuxでのみ正しく機能します。Macでは、「不明なアーキテクチャ-PDP-11を使用していますか?」に関するエラーがいくつかあります。
Macでコンパイルして動作させる方法を教えてくれた人、または標準のmakeを使用してMacOSでコンパイルしてQtアプリケーションで使用できるパックバージョンのブレークパッドを送ってくれた人に感謝します。
ありがとうLudek
google-breakpad - Google ブレークパッド スタックウォークを構築する
Google ブレークパッド クライアントを構築できます。stackwalker は、ダンプを人間が読める txt ファイルに変換できます。しかし、vs2008 ソリューションを作成するための gyp ファイルはありません。Windowsでstackwalkerを構築する方法を知っている人はいますか。ありがとう
c++ - Google ブレークパッドがすべてのクラッシュを処理しないのはなぜですか? これらのケースをデバッグするにはどうすればよいですか?
私はgoogle-breakpadを使用しています。これは、別のプロセスのクラッシュを報告するためにバックグラウンドで実行されるバグ報告プログラムです。
ほぼすべての状況で機能します。
ただし、クラッシュをキャッチできない場合があります。レポートもダンプ ファイルもありません。クラッシュするだけです。クラッシュの最後の手がかりは、Windows イベント メッセージです。
これらのクラッシュをデバッグするにはどうすればよいですか? Breakpad がクラッシュを処理しない原因は何ですか? 状況をデバッグするためにどのような方法を使用できますか?
android-ndk - cygwin で google ブレークパッドが android のコンパイルに失敗する
私は svn から Google ブレークパッドをきれいにチェックアウトしており、Android 用の cygwin を使用してコンパイルしようとしています。しかし、うまくいっていません。
Can't build host-tools
次の理由でエラーが発生します。
これらの警告をエラー オプションとして削除するように makefile を変更すると、ビルドはさらに進みますが、明らかにそこにあるファイルを見つけることができません。
しかし:
それだけでなく、すべてのファイルが同じように失敗します。
どんな助けでも感謝します。
linux - Google ブレークパッドを使用してコアダンプのすべてのメモリを取得するにはどうすればよいですか
MiniDumpWithFullMemory. を使用して、Windows プラットフォームでミニダンプのすべてのメモリを取得できますが、Linux プラットフォームでそれを行うにはどうすればよいですか?
c++ - スレッドを使用すると、Breakpadがターゲットにミニダンプを作成できません
スレッドを使用すると、テストアプリケーションが正しいダンプファイルを生成しないことがわかりました。クロスコンパイラーを使用してBreadpadライブラリーを構築し、それをクロスコンパイラーとリンクしてターゲット上で実行しています。
まず、セットアップについて説明します。
構築:Ubuntu 12.04、i686
ホスト/ターゲット:i586 CPU、完全カスタムLinuxシステムであるVortex86DX
ビルドツール:Buildroot、crosstool-ng、gcc 4.4.6、glibc 2.9
Breakpadを構築するには、次のようにします。
私のクロスコンパイラはBuildrootに統合されており、で実行されるバイナリを構築したい--host=i486-unknown-linux-gnu
私は次のようにテストアプリをクロスコンパイルします。
テストアプリは次のとおりです。
main()からのクラッシュとスレッドからのクラッシュのバリエーションを作成するだけです。
ターゲット上でアプリをクロスコンパイルして実行したときの観察:
(1)スレッドのないテストアプリは、ターゲット上に正しいダンプファイルを作成します。パス
(2)スレッドがクラッシュするテストアプリは、ターゲット上に非常に小さくて正しくないダンプファイル(ほとんどがゼロ)を作成します。不合格
(3)スレッドがクラッシュせず、メインがクラッシュするテストアプリは、ターゲット上に中サイズの不正なダンプファイルを作成します。不合格
編集:(1)の場合、コールバックはsuccessed=trueを返します。(2)と(3)の場合、succeeded=falseです。したがって、ライブラリはそれが成功しなかったことを知っています。なぜそれが私の目標に失敗するのかを見つけるのが私の仕事だと思います。
同じテストアプリをコンパイルしてビルドコンピューターで実行すると、すべての状況で実行され、正しいダンプファイルが作成されます。つまり、ビルドコンピューターでクロスコンパイルされたCrashpadライブラリを正常に実行し、正常に動作します。ビルドとホストの両方がx86であるため、これが可能です。
たとえば、非クロスコンパイルg++を使用してビルドします
私の質問は次のとおりです。
Breakpadの問題はありますか?
クロスコンパイルライブラリの問題はありますか?
カーネルは違いを生みますか?特定の機能を有効にする必要がありますか?
これをどのように機能させることができますか?つまり、ターゲットで実行されているマルチスレッドアプリは、正しいミニダンプファイルを生成します