如何使用 Mono.Cecil 获取 IL 指令的源代码/行号

Posted

技术标签:

【中文标题】如何使用 Mono.Cecil 获取 IL 指令的源代码/行号【英文标题】:How to get source/line number for IL instruction using Mono.Cecil 【发布时间】:2011-11-22 02:22:40 【问题描述】:

我正在使用 Mono.Cecil 编写一个简单的实用程序,用于查找 .NET 程序集中的类型/方法使用情况(例如,在枚举上调用 ToString)。

我能够找到方法,但是向用户显示源/行信息会很酷。 Mono.Cecil 可以做到这一点吗?

【问题讨论】:

【参考方案1】:

这是可能的。首先,您应该阅读 Mono.Cecil wiki 中关于 debugging symbols 的指南。

确保在 Mono.Cecil.dll 附近有 Mono.Cecil.Pdb.dll,设置 ReaderParameters 以读取指南中指示的符号,然后,在 pdb 文件中具有序列点的指令将具有它们的SequencePoint 属性非空,有可用的行信息。 SequencePointDocument 属性保存源文件的名称。

【讨论】:

谢谢 - 做到了!我很困惑,并非所有指令都有 SequencePoint,但是当您考虑它时,它是有道理的。再次感谢你:)

以上是关于如何使用 Mono.Cecil 获取 IL 指令的源代码/行号的主要内容,如果未能解决你的问题,请参考以下文章

使用 Mono.Cecil 辅助 Unity3D 手游进行性能测试(续)

使用 Mono.Cecil 在 C# 程序集中注入方法

使用Mono Cecil对MSIL进行注入

使用MOno Cecil 的相关开源项目

Mono.Cecil - 0.6

csharp 使用Mono.Cecil和GLEE绘制函数依赖关系的一些代码