如何解决Mono.Cecil 是否支持完整的 PDB 格式
我需要根据要注入的某些指令来跟踪源代码行。
我遵循的步骤如下:
-
将DLL和PDB放在同一个文件夹下,与Mono.cecil一起使用,获取序列点信息并注入指令。这对于在 PDB 中有序列点信息的方法很有效
-
再次以调试模式构建我的项目,但这次在 csproj 文件中添加了以下代码
<PropertyGroup> <DebugType>Full</DebugType> <PropertyGroup/>
-
在同一文件路径中使用 DLL 和完整 PDB 时,这次 Mono.cecil 抛出以下错误
Mono.Cecil.Cil.SymbolNotFoundException: '找不到文件 my_file_path\abc.dll 的符号"
如何让 Mono.cecil 使用完整的 PDB 而不是增量 PDB。
提前致谢。
解决方法
- 您使用的是什么版本的 Mono.Cecil?
- 您如何设置 PDB 阅读器?
至少在最新的 (0.11.4) 中,以下代码有效:
using Mono.Cecil;
using Mono.Cecil.Rocks;
class Program
{
static void Main(string[] args)
{
var p = new ReaderParameters();
p.ReadSymbols = true;
using var x = AssemblyDefinition.ReadAssembly(typeof(Program).Assembly.Location,p);
foreach(var m in x.MainModule.GetAllTypes().SelectMany(t => t.Methods).Where(m => m.DebugInformation != null && m.DebugInformation.HasSequencePoints))
{
foreach(var d in m.DebugInformation.GetSequencePointMapping())
{
System.Console.WriteLine($"{d.Key} => {d.Value.Document.Url} ({d.Value.StartLine},{d.Value.StartColumn})");
}
}
}
}
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net5.0</TargetFramework>
<DebugType>Full</DebugType>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Mono.Cecil" Version="0.11.4" />
</ItemGroup>
</Project>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。