15

Visual Studio 2005を使用してビルドしたネイティブのC++ Win32 .exeは、社内でテストしたすべてのマシンで完璧に動作します(XP 32ビット、Vista 32ビット& Windows 7 64ビット)。しかしもちろん、それはクライアントの32ビットVistaマシンで繰り返しクラッシュします。私は、顧客への実行可能ファイルのリリースビルドと一緒にPDBファイル(vc80.pdb & プロジェクト名の.pdb)を出荷する場合は、ミニダンプを生成するいくつかの方法があります示し一口を発見したいくつかのウェブサイト上で周り掘りクライアントのマシンでリリースビルドをデバッグする

クラッシュが発生したとき私はその後、Visual Studioにクラッシュダンプを読み込んで、スタックトレースや他の有用な情報を得ることができます。マイクロソフトのワトソン博士ユーティリティもこのプロセスに関与しているようです。

しかし、私は、これは出荷する何のファイル

  • を実現するために従うべき手順上の任意の明確な指示を見つけることができませんか?
  • クラッシュダンプを生成する方法を教えてください。
  • これをVSに読み込む方法は?

誰かがこのプロセスを説明できますか?

+1

ワトソン博士がVista以降に存在するとは思わない。 –

答えて

10

リリースビルドからクラッシュダンプを取得できます我々の製品でpdbファイルを出荷する必要はありません。

私たちは、MiniDumpWriteDump()を使用してトップレベルの例外ハンドラで自分自身でクラッシュダンプファイルを作成するための呼び出しを作成します。しかし、それがなくても、ユーザは、ここで述べたように私が思うようにタスクマネージャを使ってクラッシュの時点でクラッシュファイルを生成させることができます:MSDN Instructions for creating dump file

ダンプファイルを取得したら、顧客はそれを圧縮してメールし、Visual Studioにドロップします。 VSの中で、私はあなたの痛みを感じる

Example from a dump I just created from a MS process

2

私はこれまでにこれをやっていましたが、私はthis guideに従ったと思います。それがうまくいかない場合は、Windbgユーティリティをチェックしてください。インストールする必要はなく、USBスティックからでもコピーして実行するだけです。

+0

私はそのCodeProjectの記事を見ましたが、それはひどく日付がついたようです(2002年に出版され、VS .Net 2003の指示があります)。それがVS2005に当てはまるかどうか知っていますか? (私はコンパイラも古代であることを知っていますが、私はそれを使用しなければなりません)。 WinDbgは有望に見える... +1 – Praetorian

+0

私がそれをしたとき、私はVS2008を使った。間違いなく可能ですが、微調整が必​​要な場合があります –

5

など、あなたがして、デバッグが混在またはデバッグネイティブ選ぶと、それはあなたのコールスタックを表示するには、PDB年代のローカルコピーを使用しています。しばらく前にそれをしなければならなかった。

とにかく、あなたはGoogleのブレイクパッドを試しましたか?

Breakpadは、削除したコンパイラが提供するデバッグ情報 を持つユーザーに アプリケーションを配布することを可能にするライブラリとツールスイートでコンパクトな「ミニダンプ」ファイル内のレコードがクラッシュし、 サーバーにそれらを送り返すと、これらのミニダンプからCおよびC++スタックトレースを生成します。 ブレークパッドは、 がクラッシュしていないプログラムの要求に応じてミニダンプを書き込むこともできます。

Breakpadは現在、Google Chromeのは、Firefox、GoogleのPicasa、 カミノは、Google Earth、および他のプロジェクト

で使用されて

あなたはここでそれを見つけることができます:http://code.google.com/p/google-breakpad/それは同じことを行い

他の答えが記載されていますが、それは自動的にあなたに多くの時間と労力を費やします。

+0

BReakpadはちょっと涼しいです。それに言及してくれてありがとう。 – jschroedl

6

このプロセスは次のようになります。

  1. 実行ファイルをコンパイルし、PDBファイルを生成します。実行可能ファイルに使用されているコードを変更しないこと、またはバックアップを保持することを確認してください。
  2. 実行ファイルをクライアントに配送します。 PDBファイルを発送する必要はありません。クライアントのマシンでデバッグしたい場合や、Process Explorerなどのツールを使用して、ある時点で関数名を持つスタックトレースを取得する場合は、出荷する唯一の理由です。あなたのケースでは該当しないようです。
  3. XP/2003マシンの場合は、drwtsn32を使用してクラッシュダンプの作成を設定します。 Vista/7/2008の場合、drwtsn32は廃止され、WER insteadを設定する必要があります。もう1つの選択肢はADPlusを使用してアプリを起動することです。
  4. クラッシュが発生したら、ダンプを戻してVisual Studioにロードしてください。スムーズにデバッグするためには、まったく同じコード、実行可能ファイル、PDBが必要です。

注:

  • WinDbgのは、本番環境でデバッグするときに便利です。これは非常に強力なデバッガで移植性がありますが、VSに慣れていれば使いやすくなります。
  • ミニダンプを作成すると、スタックトレースといくつかの変数値が得られます。フル・ダンプを作成すると、すべての変数を含む完全なヒープと、より大きなダンプ・ファイルが得られます。転送に問題がなければ、フル・ダンプを使用します。
  • register at Microsoftの場合、クライアントサイトでプログラムがクラッシュしたときに作成されるダンプにアクセスできます。それは迷惑な "Microsoftに情報を送る?"ウィンドウ時にMSにダンプを送信するプロセスがクラッシュします取得し、あなたはそれにアクセスすることができます...
3

私はあなたを助けるかもしれない死後のデバッグについてDDJ上の2件の記事、書いた:

死後デバッグ http://drdobbs.com/tools/185300443

と 死後デバッグ再訪は http://drdobbs.com/architecture-and-design/227900186

第二の記事は、スタックをクライアントマシンワットからダンプを埋めるためのソースコードが含まれていますマップファイルまたはpdbファイルから取得されたi個のシンボリック情報。

1

クライアントがVista SP1以上を使用している場合は、アプリケーションがクラッシュするたびにローカルダンプファイルを生成するようにシステムを設定できます。完全なドキュメントは、MSDN siteにあります。

すべてのPDBを非公開にすることができます。ダンプファイルを実際に分析する場合にのみ必要です。出荷する製品のバージョンに対応するPDBを把握したい場合は、シンボルサーバーの使用を強く検討する必要があります。

関連する問題