8

XBuildを使用してMono用のVisualStudioソリューションをコンパイルしています。これにより、アセンブリ+mdbファイルが生成されます。Windows上のVisualStudioでこのアセンブリをデバッグする可能性はありますか?「プロセスにアタッチ」を使用すると、シンボルがロードされていないというエラーが表示されるため、デバッグできません。

Mono.Cecil(AssemblyDefinition、MdbReaderProvider、PdbWriterProvider)を介してこのアセンブリのpdbファイルを生成し、Debug / Windows /Modulesおよび「LoadSymbolFrom/ Symbol Path」を介して手動でロードしてみました。これにより、実際にシンボルがロードされます(モジュールに表示)。 Windows)ですが、デバッグもできません。

4

2 に答える 2

6

VS2012ビルドとXBuildビルドの間でアセンブリ定義を比較すると、XBuildがDebuggableAttributeを生成していないことに気付きました。この属性がない場合、シンボルを手動でロードしても、VisualStudio2012でデバッグすることはできません。Mono / XBuildwithVS2012でコンパイルされたアセンブリをデバッグするには次の手順が必要です。

  1. XBuildを使用してソリューションをコンパイルします
  2. デバッグするアセンブリごとにMono.Cecilを使用して、pdbファイルを生成し、DebuggableAttributeを挿入します(以下のコードを参照)。
  3. XBuildコンパイル済みプログラムで開始します
  4. 実行中のプログラムをデバッグするには、VS2012の「デバッグ/プロセスにアタッチ...」を使用します

pdbを生成し、DebuggableAttributeを挿入するためのコード:

string assemblyPath = @"HelloWorld.exe";

var assemblyDefinition = AssemblyDefinition.ReadAssembly(assemblyPath,
    new ReaderParameters() { SymbolReaderProvider = new MdbReaderProvider(), ReadSymbols = true});

CustomAttribute debuggableAttribute = newCustomAttribute(
assemblyDefinition.MainModule.Import(
    typeof(DebuggableAttribute).GetConstructor(new[] { typeof(bool), typeof(bool) })));

debuggableAttribute.ConstructorArguments.Add(new CustomAttributeArgument(
    assemblyDefinition.MainModule.Import(typeof(bool)), true));

debuggableAttribute.ConstructorArguments.Add(new CustomAttributeArgument(
    assemblyDefinition.MainModule.Import(typeof(bool)), true));

assemblyDefinition.CustomAttributes.Add(debuggableAttribute);

assemblyDefinition.Write(assemblyPath,
    new WriterParameters() { SymbolWriterProvider = new PdbWriterProvider(), WriteSymbols = true});
于 2012-11-22T18:41:57.560 に答える
4

これは、少しの努力で可能です。

mdbモノラルファイルをファイルに変換する必要がありpdbます。その後、VSはコードをステップスルーできるようになります(ソースもある場合)-以下を参照してください。

http://johnhmarks.wordpress.com/2011/01/19/getting-mono-cecil-to-rewrite-pdb-files-to-enable-debugging/

Mono.Cecilは頻繁に変更されるため、APIが少し変更されていることに気付くかもしれません。

于 2012-11-22T07:45:49.567 に答える