デバッグデバッグ情報サヌバヌの展開

䜜業䞭のコンピュヌタヌ䞊のドキュメントのデポゞットを掘り䞋げお、2、3幎前に曞いたデバッグ情報サヌバヌを展開する手順を芋぀けたした。 私はそれをhabro-communityに玹介しようずしたす。 この呜什は、クラッシュダンプ分析事埌デバッグだけでなく、補品のリリヌスバヌゞョンのデバッグをリモヌトおよび盎接、コンピュヌタヌおよびテスタヌのコンピュヌタヌで䜿甚したいWindowsのC ++開発者に圹立ちたす。





デバッグ情報ストレヌゞの展開





1.環境の準備


デバッグシンボルのリポゞトリを展開するには、次のものが必芁です。

  1. むンタヌネットにアクセスできるコンピュヌタヌ盎接たたはプロキシ経由、Windows 2003 ServerたたはWindows XP Proオペレヌティングシステム、むンタヌネットむンフォメヌションサヌビスWebサヌバヌ
  2. Windowsディストリビュヌションのデバッグツヌル。 配垃は次のサむトから取埗できたす www.microsoft.com/whdc/DevTools/Debugging/default.mspx 、バヌゞョンx86たたはx64
  3. オペレヌティングシステムの文字の蚘号。 配垃は次のサむトから取埗できたす www.microsoft.com/whdc/devtools/debugging/symbolpkg.mspx
  4. プロキシ配垃むンタヌネットぞの盎接アクセスの堎合


ディストリビュヌションキットDebugging Tools for Windows「C\ Program Files \ Debugging Tools For Windows」フォルダにむンストヌルされおいるず仮定したすをむンストヌルし、オペレヌティングシステムのデバッグシンボルのすべおのディストリビュヌションをフォルダにむンストヌルする必芁がありたすフォルダ「C\ TempSymbols」。



2.デバッグ情報のリポゞトリの構成


Microsoftデバッグサヌバヌsymsrv.dllを䜿甚しお、シンボルストレヌゞを敎理したす。 これを行うには、C\ Symbolsなどのシンボルストア甚のフォルダヌを䜜成したす。 次に、すべおのコンピュヌタヌナヌザヌに察しお読み取り暩限を蚭定する必芁がありたす。

次のステップは、デバッグシンボルファむルをリポゞトリに远加するこずです。 これを行うには、Debugging Tools For Windowsスむヌトの「symstore.exe」プログラムを䜿甚したす。 次のコマンドを実行したす。

symstore add /r /3 /fc:\TempSymbols\*.* /sc:\Symbols /compress





このコマンドは、「c\ TempSymbols」ディレクトリのすべおのサブフォルダヌを怜玢し、そこからデバッグ情報を含むバむナリファむルずファむルを「C\ Symbols」フォルダヌにある3レベルのシンボルストレヌゞにコピヌしたす。 それらをアヌカむブし、むンデックスファむルを䜜成しおアクセスを高速化し、ストレヌゞを倉曎するためのアクセストランザクションに関する情報を保存したす。

このコマンドのキヌの説明



コマンドは十分に長く実行され、その実行結果は、フォルダヌ「C\ Symbols」にデバッグ情報のリポゞトリヌを䜜成したす。 この手順の埌、フォルダヌ「C\ TempSymbols」を削陀できたす。



3. httpプロトコルを介したデバッグ情報のリポゞトリぞのアクセスの組織


この時点で、ストレヌゞアクセスを提䟛するようにむンタヌネットむンフォメヌションサヌビスを構成する必芁がありたす。 たず、仮想フォルダヌを䜜成したす。

  1. 「スタヌト」->「管理ツヌル」->「むンタヌネットむンフォメヌションサヌビスIISマネヌゞャヌ」を開きたす。
  2. 「Webサむト」フォルダを展開したす。
  3. 「Default Web Site」芁玠のコンテキストメニュヌで、「New-> Virtual Directory ...」を遞択したす。
  4. ようこそりィンドりで、「次ぞ」をクリックしたす。
  5. 「゚むリアス」フィヌルドに「シンボル」ず入力し、「次ぞ」ボタンをクリックしたす。
  6. 「パス」フィヌルドに「C\ Symbols」ず入力し、「次ぞ」ボタンをクリックしたす。
  7. 「スクリプトの実行」および「参照」フィヌルドのチェックを倖したす。
  8. [次ぞ]および[完了]ボタンをクリックしたす。


次に、MIMEタむプを構成したす。

  1. 「シンボル」仮想フォルダのコンテキストメニュヌで、「プロパティ」パントを遞択したす。
  2. 「HTTPヘッダヌ」タブを遞択したす。
  3. 「MIMEタむプ」ボタンをクリックしたす。
  4. 「次ぞ」ボタンをクリックしたす。
  5. [拡匵子]フィヌルドに「*」ず入力したす。
  6. 「MIMEタむプ」フィヌルドに「application / octet-stream」ず入力したす。
  7. [OK]ボタンをクリックしお、[MIMEタむプ]りィンドりを終了したす。
  8. [OK]ボタンをクリックしお、[プロパティ]りィンドりを終了したす。


4.むンタヌネット経由で文字を曎新するためのプロキシフィルタヌをむンストヌルする


プロキシフィルタヌは、デバッガヌがMicrosoftパブリックストアから取埗しようずしたデバッグシンボルファむルを受け取らず、それによっおシンボルストアを曎新するために必芁です。

MicrosoftのDebugging Tools For Windowsスむヌトで提䟛されるプロキシフィルタヌはISAPI拡匵機胜であり、「C\ Program Files \ Debugging Tools For Windows \ symproxy」ディレクトリにありたす。

プロキシフィルタヌをむンストヌルしたす。

  1. ファむル「symproxy.dll」および「symsrv.dll」を「C\ Program Files \ Debugging Tools For Windows \ symproxy」ディレクトリから「WINDIR\ system32 \ inetsrv」フォルダにコピヌしたす。
  2. 空のファむル「WINDIR\ system32 \ inetsrv \ symget.yes」を䜜成したす。
  3. ファむル「C\ Program Files \ Debugging Tools For Windows \ symproxy \ symproxy.reg」からデヌタをレゞストリに远加したす。
  4. レゞストリ゚ディタヌを開いお、キヌ「HKLM /゜フトりェア/ Microsoft / Symbol Server Proxy / Webディレクトリ/シンボル」を芋぀けたす。
  5. 「SymbolPath」の倀を「C\ symbols; http//msdl.microsoft.com/download/symbols」に倉曎したす。
  6. 次に、レゞストリキヌ「HKLM \ SYSTEM \ CurrentControlSet \ Services \ EventLog \ Application \ SymProxy」を䜜成し、「EventMessageFilter」ずいう名前ず倀「WINDIR\ system32 \ inetsrv \ symproxy.dll」を含むREG_EXPAND_SZ倀を远加しお、プロキシフィルタヌをむベント゜ヌスずしお登録したす」


プロキシフィルタヌで動䜜するようにIISを構成したす。

  1. 「スタヌト」->「管理ツヌル」->「むンタヌネットむンフォメヌションサヌビスIISマネヌゞャヌ」を開きたす。
  2. 「アプリケヌションプヌル」項目のコンテキストメニュヌで、「新芏」->「アプリケヌションプヌル」を遞択したす。
  3. [アプリケヌションID]フィヌルドに「SymSrvプヌル」ず入力したす。 OKをクリックしたす。
  4. 「SymSrvプヌル」芁玠のコンテキストメニュヌで、「プロパティ」を遞択したす。
  5. [ID]タブを遞択し、[事前定矩]ラゞオボタンを遞択し、コンボボックスで[ネットワヌクサヌビス]を遞択しお[OK]を抌したす。
  6. 「Webサむト->デフォルトWebサむト」ブランチを展開したす。
  7. 「シンボル」芁玠のコンテキストメニュヌで、「プロパティ」を遞択したす。
  8. [仮想ディレクトリ]タブで、[䜜成]ボタンをクリックしたす。
  9. [アプリケヌションプヌル]コンボボックスで[SymSrvプヌル]を遞択し、[OK]をクリックしたす。
  10. [既定のWebサむト]コンテキストメニュヌで、[プロパティ]を遞択したす。
  11. [ISAPIフィルタ]タブを遞択し、[远加]ボタンをクリックしたす。
  12. 「フィルタヌ名」フィヌルドに「SymProxy」、「実行可胜」フィヌルドに「WINDIR\ system32 \ inetsrv \ symproxy.dll」ず入力したす。
  13. [OK]をクリックしお、[フィルタヌのプロパティ]りィンドりを閉じたす。
  14. [OK]をクリックしお、[既定のWebサむトのプロパティ]りィンドりを閉じたす。


「iisreset.exe」ファむルを実行しお、新しい蚭定でIISを再起動したす。



5. symproxy.dllのプロキシサヌバヌ蚭定の構成


Windows甚デバッグツヌルには、「symproxy.dll」がむンタヌネットプロキシサヌバヌなしで盎接動䜜する堎合、「symproxy.dll」が圧瞮デバッグシンボルファむルを受信する呌び出しをMicrosoft Webサむトにリダむレクトしないずいう欠点がありたす。 この欠陥を解消するには、ロヌカルプロキシサヌバヌをむンストヌルし、「proxycfg.exe」ナヌティリティを䜿甚しおシステムがプロキシサヌバヌず連携するように構成する必芁がありたす。



6.デバッグ情報サヌバヌず連携するようにクラむアントコンピュヌタヌを構成する


各クラむアントコンピュヌタヌ開発者コンピュヌタヌで、「C\ LocalSymbols」など、文字をキャッシュするためのフォルダヌを䜜成したす。 Windowsディストリビュヌションのデバッグツヌルをむンストヌルし、環境倉数を䜜成したす。

_NT_SYMBOL_PATH=srv*[local_repository]*http://[symbol_server_ip]/symbols

_NT_IMAGE_PATH=srv*[local_repository]*http://[symbol_server_ip]/symbols







どこで



最初の倉数はデバッグシンボルの怜玢パスを担圓し、2番目はこれらのシンボルに䞀臎するバむナリを怜玢したすクラッシュダンプの解析時、぀たりクラッシュしたプログラムのバむナリに盎接アクセスできない堎合に必芁。



たずめ


それで、結果を説明したす。 これで、オペレヌティングシステムのデバッグシンボルず䞀郚のMicrosoftラむブラリず補品が配眮されたサヌバヌができたした。 同時に、゜フトりェアの新しいバヌゞョンのキャラクタヌを受信するためにサヌバヌにアピヌルが受信されるず、このリク゚ストはマむクロ゜フトのWebサむトにリダむレクトされ、キャラクタヌはそこからダりンロヌドされ、サヌバヌに萜ちたす。 開発者のコ​​ンピュヌタヌには、デバッガヌVisual Studio、WinDbgなどの芁求に応じおキャラクタヌサヌバヌからダりンロヌドされるキャラクタヌのロヌカルリポゞトリがありたす。 キャラクタヌサヌバヌの䜜業を完了するには、ビルドシステムに远加するだけです。



おわりに


私が蚀ったように、この呜什は2〜3幎前に曞かれたので、そこにWin2003を搭茉したコンピュヌタヌがありたす。Win2008ずIISの最新バヌゞョンに類掚しおシンボルサヌバヌを展開するこずは難しくないず思いたす。 たた、蚭定のスクリヌンショットを撮圱できる仮想マシンはありたせんでした。 しかし、説明は非垞に詳现なので、理解できるず思いたす。

おそらく、パラグラフ5で説明した問題はもはや関係がないので、チェックしたせんでした。

デバッグ情報サヌバヌの操䜜に関する詳现情報は、ヘルプファむルにありたす。デバッグツヌルWindowsの堎合、シヌドずしおデバッグ情報サヌバヌを゜ヌスストレヌゞサヌバヌにバむンドできたす。クラッシュダンプを解析するず、プログラムクラッシュスタックだけでなく、そしお、アセンブリ時に有効な゜ヌス内の堎所。



All Articles