NOTE:我的目标关注点是 C# 以常规 MSIL 为目标的 CLR,以防有一些东西适用于此,但不适用于更一般的情况。
我读过这篇文章并想总结一下我的理解以便清楚起见
如今,调试器使用 PDB 来获取文件的磁盘路径以及编译后创建可执行文件的给定部分的校验和。然后,调试器尝试使用本地磁盘和可用符号服务器加载文件。根据这个提议,我们将跳过中间人,只需将文件本身嵌入到 PDB 中。尤里卡,不再寻找来源!
作为一个以这种方式挖掘源代码的人,我喜欢用一个包来满足所有调试需求的想法。不过,这个提议有几个方面需要考虑。
第一个是将源代码实际嵌入到 PDB 中。这是非常可行的。 PDB本质上是一个轻量级文件数据库。它编码的内容有结构,但据我所知,您可以将任何您想要的内容放入某些插槽中(例如局部变量值/类型)。某些插槽可能有大小限制,但我确信您可以发明一种编码方案来将大文件分成块。
第二个方面是让调试器实际从 PDB 加载文件,而不是在磁盘上搜索文件。我对调试器的那部分不太熟悉,但据我了解,它只使用两条信息来定位文件
- 文件在磁盘上的路径
- 所述文件的校验和(用于消除同名文件的歧义)
我相当确定这是它传递到符号服务器的唯一信息。这使得实现符号服务器变得不可行,因为它无法访问 PDB(当然假设我是对的)。
我四处寻找,希望有一个可以重写的 VS COM 组件,它允许您拦截给定路径的文件加载,但我找不到。
我认为可行的一种方法是
- 将源代码嵌入到 PDB 中
- 拥有一个工具,既可以将源代码提取到已知位置,又可以重写 PDB 以指向该位置。
但这并不完全是你想要的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)