gpt4 book ai didi

visual-studio - 是否可以在 Windows 上使用 Visual Studio 调试使用 Mono/XBuild 编译的程序集?

转载 作者:行者123 更新时间:2023-12-02 22:56:52 25 4
gpt4 key购买 nike

我正在使用 XBuild 编译 Mono 的 Visual Studio 解决方案。这会生成程序集+ mdb 文件。是否可以在 Windows 上使用 Visual Studio 调试该程序集?使用“附加到进程”时,我无法调试,因为显示错误,表明未加载符号。

我尝试通过 Mono.Cecil (AssemblyDefinition、MdbReaderProvider、PdbWriterProvider)为此程序集生成 pdb 文件,并通过 Debug/Windows/Modules 和“从/符号路径加载符号”手动加载它,这实际上加载了符号(如图所示)在模块窗口中),但这也不能启用调试。

最佳答案

在比较 VS2012 构建和 XBuild 构建之间的程序集定义时,我注意到 XBuild 没有生成 DebuggableAttribute。如果缺少此属性,则无法使用 Visual Studio 2012 进行调试,即使您手动加载符号也是如此。使用 VS2012 调试使用 Mono/XBuild 编译的程序集需要执行以下步骤:

  1. 使用 XBuild 编译解决方案
  2. 对要调试的每个程序集使用 Mono.Cecil,以生成 pdb 文件并注入(inject) DebuggableAttribute(请参阅下面的代码)
  3. 启动使用 XBuild 编译的程序
  4. 使用 VS2012 中的“调试/附加到进程...”来调试正在运行的程序

生成pdb并注入(inject)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});

关于visual-studio - 是否可以在 Windows 上使用 Visual Studio 调试使用 Mono/XBuild 编译的程序集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13499384/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com