一些便携式PDB文件中缺少序列点
上下文
我正在为.NET库开发文档生成工具,该工具通过反射从组件中提取类型,并从编译时生成的XML中提取相关文档。
上下文
更多 成员(方法,属性...)在源代码中其起源 - 提取源文件和相关行号。
当前状态
我已经使用了system.reflection.metadata
加载PDB文件并成功提取所需数据。
using var stream = new StreamReader(pdbPath);
var provider = MetadataReaderProvider.FromPortablePdbStream(stream.BaseStream, MetadataStreamOptions.PrefetchMetadata, 0);
var reader = provider.GetMetadataReader();
var scopes = reader.MethodDebugInformation
.Where(h => !h.IsNil)
.Select(md => (reader.GetMethodDebugInformation(md), System.Reflection.Metadata.Ecma335.MetadataTokens.GetToken(md.ToDefinitionHandle())))
.Where(m => !m.Item1.SequencePointsBlob.IsNil)
.Select(m =>
{
return m.Item1.GetSequencePoints()
.Select(sp =>
{
var document = reader.GetDocument(sp.Document);
var name = reader.GetString(document.Name);
return (m.Item2, sp.StartLine, name);
})
.OrderBy(x => x.StartLine)
.First();
})
.ToArray();
问题
问题是MethodDebugInformation
sequencepoints
无法可靠。我的一些PDB一无所获,另一些返回所有成员序列点。
所有测试的PDB均来自.NET Core/5+项目。否.NET框架。
问题
我在做什么错?我的PDB错误地编译了吗?还是我滥用反射库? 预先感谢您的任何提示
Context
I'm developing a documentation generating tool for .NET libraries, which extracts types from assemblies via reflection and relevant documentation from the compile-time generated XML.
Goal
I want to extend my tool with the ability to display for each type member (method, property...) their origin in the source code - extract the source file and relevant line number.
Current state
I've used System.Reflection.Metadata
to load PDB files and extract the required data successfully.
using var stream = new StreamReader(pdbPath);
var provider = MetadataReaderProvider.FromPortablePdbStream(stream.BaseStream, MetadataStreamOptions.PrefetchMetadata, 0);
var reader = provider.GetMetadataReader();
var scopes = reader.MethodDebugInformation
.Where(h => !h.IsNil)
.Select(md => (reader.GetMethodDebugInformation(md), System.Reflection.Metadata.Ecma335.MetadataTokens.GetToken(md.ToDefinitionHandle())))
.Where(m => !m.Item1.SequencePointsBlob.IsNil)
.Select(m =>
{
return m.Item1.GetSequencePoints()
.Select(sp =>
{
var document = reader.GetDocument(sp.Document);
var name = reader.GetString(document.Name);
return (m.Item2, sp.StartLine, name);
})
.OrderBy(x => x.StartLine)
.First();
})
.ToArray();
Issue
The issue is that the MethodDebugInformation
SequencePoints
are not reliably available. Some of my PDBs return nothing, others return all member sequence points.
All tested PDBs come from .NET Core/5+ projects. No .NET Framework.
Question
What am I doing wrong? Are my PDBs compiled incorrectly? Or am I misusing the reflection library?
Thanks in advance for any tips
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论