1

VC++ 6.0 で記述されたカスタム サービスがあり、それを特定のリリースの一部として出荷したとします。残念ながら、バイナリのビルド中に pdb を取得しませんでした。

その後、顧客からクラッシュが報告され、クラッシュの原因を特定するために pdb を取得する必要がありました。私が今取っているpdbは、クラッシュのポイントを特定するのに十分でしょうか.

言い換えれば、私はバイナリと pdb を別々に取得しましたが、バイナリを取得した後にソースコードに変更を加えていません。

私の理解では、彼のシンボルが作成された日付と時刻に関しては一致しませんが、内容に関しては一致します。

私の理解は正しいですか?

4

3 に答える 3

1

アドレスが一致していることを確認するために、まったく同じコンパイラ バージョン (パッチによってコード生成とアドレスが変更される可能性があります)、コンパイラ/リンカー オプションのセット、同じライブラリ バージョン、および同じソースでコンパイルしたことを確認する必要があります。それができれば、後で生成された pdb を取得できるはずです。

ただし、正確に一致しない場合でも、検査によってバグを確認できるほど近くなる可能性があります。

于 2010-08-17T15:47:31.323 に答える
1

はい、それでも問題なく動作するはずです (ただし、メモリが機能する場合は、タイムスタンプの不一致に関する警告が表示されることを期待できます)。

于 2010-08-17T15:07:26.627 に答える
0

.pdb とバイナリは、同時にでなくても、同じソース コードからビルドされていれば、完全に連携できるはずです。ただし、これをデバッガーにロードすることはできません。たとえば、Visual Studio デバッガーは、それらが一致していないと言うため、読み込みを拒否します。

WinDbg などの不一致のシンボルを受け入れることができるデバッガーが必要です。不一致のシンボルをロードするには、魔法のコマンド symopt +0x40 を入力します。

于 2010-08-17T18:32:45.280 に答える