指定: 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 ヘッダーからブレークパッドが必要とする最小限のクロージャーを切り離します。
提案、既存の経験はありますか?