我使用XBuild编译为单声道的Visual Studio解决方案。 这将生成组件+ mdb文件。 有没有调试该组件与Visual Studio在Windows上的可能性? 当使用“附加到进程”我不能调试,因为示出了一个错误,该符号不加载。
我试图生成用于经由Mono.Cecil能做到(AssemblyDefinition,MdbReaderProvider,PdbWriterProvider)该组件PDB文件和经由调试/视窗/模块手动加载它和“加载符号从/符号路径”,这实际上加载符号(在示出的模块窗口),但不启用调试无论是。
当比较组件定义之间VS2012构建和XBuild构建,我注意到,XBuild不产生DebuggableAttribute。 如果这个属性不存在,与Visual Studio 2012的调试是不可能的,即使你手动加载的符号。 下面的步骤是需要编译单声道/ XBuild与VS2012调试组件:
- 使用XBuild编译解决方案
- 使用Mono.Cecil能为要调试生成PDB文件,并注入DebuggableAttribute每个组件(见下面的代码)
- 启动与XBuild编译的程序
- 使用“调试/附加到进程...”从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});
这可能是一个小的一次性努力。
您需要将单声道转换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?