是否有可能编译单声道/ XBuild与Visual Studio在Windows调试组件?(Is i

2019-07-04 00:53发布

我使用XBuild编译为单声道的Visual Studio解决方案。 这将生成组件+ mdb文件。 有没有调试该组件与Visual Studio在Windows上的可能性? 当使用“附加到进程”我不能调试,因为示出了一个错误,该符号不加载。

我试图生成用于经由Mono.Cecil能做到(AssemblyDefinition,MdbReaderProvider,PdbWriterProvider)该组件PDB文件和经由调试/视窗/模块手动加载它和“加载符号从/符号路径”,这实际上加载符号(在示出的模块窗口),但不启用调试无论是。

Answer 1:

当比较组件定义之间VS2012构建和XBuild构建,我注意到,XBuild不产生DebuggableAttribute。 如果这个属性不存在,与Visual Studio 2012的调试是不可能的,即使你手动加载的符号。 下面的步骤是需要编译单声道/ XBuild与VS2012调试组件:

  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});


Answer 2:

这可能是一个小的一次性努力。

您需要将单声道转换mdb文件, pdb文件。 之后VS应该能够通过一步与你的代码(如果你有太多的来源) - 见下文。

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

Mono.Cecil能不改变相当频繁,所以你可能会发现API已经改变一点点这个。



文章来源: Is it possible to debug assemblies compiled with Mono / XBuild with Visual Studio on Windows?