c# - Mono.Cecil 是否支持完整的 PDB 格式
问题描述
我需要根据要注入的某些指令来跟踪源代码行。
我遵循的步骤如下:
在调试模式下构建我的项目,生成 DLL 和相应的 PDB(这些是增量 PDB,没有所有方法的序列点信息)
将 DLL 和 PDB 放在同一个文件夹中,并与 Mono.cecil 一起使用以获取序列点信息并注入指令。这适用于在 PDB 中具有序列点信息的方法
同样,在调试模式下构建我的项目,但这次在 csproj 文件中添加了以下代码
<PropertyGroup> <DebugType>Full</DebugType> <PropertyGroup/>
这会生成一个完整的 PDB 文件以及 DLL
在同一文件路径中使用 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>
推荐阅读
- intellij-idea - 使用插件更改 IntelliJ 运行配置环境变量
- node.js - 通过指定间隔获取数据的猫鼬查询
- c# - OpenStreetMapProvider 许可证
- angular - Ionic 4 角度页面事件的问题
- angularjs - 选择 Kendo Ui Grid 行
- sql - 00933. 00000 - “SQL 命令未正确结束” DYNAMIC SQL
- excel - 使用 COUNTIF 但不包括其他公式的空格
- python - 从抽象类记录
- node.js - 使用 Codeanywhere 时需要 Cloud Functions 以获得 Firebase 文件夹权限
- linux - 尽管语法看似准确,但仍从 crontab 中得到糟糕的分钟错误