2

こんにちは、pdb ファイルからデータを読み込もうとしています

C# から MS DIA SDK を使用するにはどうすればよいですか?の手順に従いました。そしてアセンブリを生成しました

問題は次のとおりです。MS pdb ファイルで dataSource.loadDataFromPdb を呼び出すと、ComException(HRESULT: 0x806D000C) がスローされます。

dumpbin.exe /headers を使用してみましたが、「不明な形式」で失敗します

自己生成された pdb で .loadDataFromPdb と dumpbin を使用すると、正常に動作します

IDiaDataSource dataSource = new DiaSourceClass();

//dataSource.loadDataFromPdb(@"D:\Symbols\System.Data.Entity.pdb"); // Fails

dataSource.loadDataFromPdb(@"D:\Symbols\myassembly.pdb"); // Success

IDiaSession session;

dataSource.openSession(out session);

var guid = session.globalScope.guid.ToString();

MS pdb ファイルを開き、特に GUID を抽出する別の方法はありますか

4

2 に答える 2

2

ここの情報に基づくちょっとした計算は、0x806D000C が E_PDB_FORMAT に対応することを示唆しています。MSDN には次の記述があります。「古い形式のファイルにアクセスしようとしました。」

それに基づいて、私は尋ねなければなりません (はい、遅くなる可能性があります)... これを試みていた Visual Studio と DIA のバージョンを覚えていますか? Microsoft から送信された PDB の PDB 形式が変更され、ツールが最新ではない可能性があります。

于 2014-12-02T01:53:50.800 に答える
1

以下のように BinaryReader を使用して、.pdb ファイルから GUID 値を読み取ることができます。重要なのは、オフセットを取得することです。

var fileName = @"c:\temp\StructureMap.pdb";
using (FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read))
{
    using (BinaryReader binReader = new BinaryReader(fs))
    {
        // This is where the GUID for the .pdb file is stored
        fs.Position = 0x00000a0c;

        //starts at 0xa0c but is pieced together up to 0xa1b
        byte[] guidBytes = binReader.ReadBytes(16);
        Guid pdbGuid = new Guid(guidBytes);
        Debug.WriteLine(pdbGuid.ToString());
    }
}

.dll または .exe から値を取得するには、もう少し作業が必要です :)

于 2014-06-17T21:40:31.270 に答える