0

最近、シンボル サーバーをセットアップし、ビルド スクリプトにSrcSrvサポートを追加しました。これにより、フィールドからクラッシュ ダンプを簡単にデバッグし、WinDbg や Visual Studio デバッガーが Subversion リポジトリから正しいバージョンのソース ファイルを取得できるようになりました。クラッシュしたアプリケーションの特定のバージョンをコンパイルするために使用されます。

Debugging Tools for Windows パッケージに付属するストック スクリプトを呼び出す行をビルド スクリプトに追加しましたがsvnindex.cmd、このスクリプトはスペースなどの URI エスケープ文字を含むリポジトリ ファイルパスを文字化けすることがわかったので、WinDbg は からファイルをダウンロードできません。リポジトリ。

svnindex.cmd(具体的には、svn.pmそれが開始する Perl スクリプト) は、svn infoコマンドの出力からソース ファイルのリポジトリの場所を取得し、svnリポジトリ パスを URI エスケープすることに注意してください。これsvnindex.cmdに遭遇すると、パスを台無しにします。たとえば、パスをオンにします

"http://mysvnrepo/My%20Application/trunk/Database%20Layer/OracleAdapter.cs"

の中へ

"http://mysvnrepo/My20Layer/OracleAdapter.cs"

SrcSrv は、"%" の間のすべてを、実行時に置き換える変数名として解釈することがわかりました。

リポジトリ内のすべてのディレクトリの名前を変更して、URI エスケープされるスペースやその他の「特殊」文字を削除することは不可能であると仮定すると、この制限を回避するにはどうすればよいですか?

4

1 に答える 1

0

この問題を修正する簡単な方法は、ソース サーバーのメタデータを PDB ファイルに埋め込むために実行されるsvn.pmPerl スクリプトを編集することです。svnindex.cmd

WinDbg 6.11.0001.404 を使用している場合、このファイルはsrcsrvDebugging Tools for Windows インストール ディレクトリの下のディレクトリにあります (たとえば、私のマシンでは にありますC:\Program Files\Debugging Tools for Windows (x86)\srcsrv)。古いバージョンの WinDbg では、このファイルはsdk\srcsrv. 私の場合、svn.pmビルド サーバーが実際に を呼び出すため、ビルド サーバーでのコピーを編集しましたsvnindex.cmd

私の解決策は、スクリプトによってさらに処理される前に、URI エスケープされたファイル パスを単純にエスケープ解除することでした。コメントで始まるループの後に、次の行を のGatherFileInformationサブルーチンに追加しました。そのループの右中括弧の後に次の行を追加しました (私のコピーの 206 行目):svn.pmwhile# Loop on "Path:" entriessvn.pm

    # Fix for Subversion URL's. The "%" character is treated specially by SRCSRV, so
    # we need to remove URI escape sequeneces to get rid of them
    # - Mike Spross (3/30/2011)

    use URI::Escape;
    $FileRepository = uri_unescape($FileRepository);
    $FileRelative = uri_unescape($FileRelative);

これで問題が解決し、開発マシンで WinDbg を実行している完全なソースをプルできるようになりました。

于 2011-03-31T04:27:10.810 に答える