如何将源代码嵌入到pdb中,并让调试器使用它?

时间:2011-09-05 18:21:56

标签: c# debugging pdb-files source-server

1 个答案:

答案 0 :(得分:4)

我已经阅读了这篇文章,并希望总结一下我对清晰度的理解

  

今天,调试器使用PDB获取文件和校验和的磁盘路径,该文件被编译为创建可执行文件的给定部分。然后,调试器尝试使用本地磁盘和可用符号服务器加载文件。根据这个提议,我们可以通过将文件本身嵌入到PDB中来跳过中间人。尤里卡,不再寻找来源!

作为以这种方式完成挖掘源代码的公平份额的人,我喜欢为所有调试需求提供一个软件包的想法。不过,有几个方面需要考虑这个提议。

第一个是将源代码实际嵌入到PDB中。这是非常可行的。 PDB本质上是轻量级文件数据库。它有编码的结构,但AFAIK可以将任何你想要的东西放入某些插槽(例如局部变量值/类型)。某些插槽可能存在大小限制,但我确信您可以发明一种编码方案来将大型文件分解为块。

第二个方面是调试器实际从PDB加载文件而不是在磁盘上搜索它。我不熟悉调试器的那部分,但据我所知,它只使用2条信息来定位文件

  1. 磁盘上文件的路径
  2. 所述文件的校验和(用于消除具有相同名称的文件的歧义)
  3. 我很确定这是它传递给符号服务器的唯一信息。这使得实现符号服务器变得不可行,因为它无法访问PDB(假设我当然是对的)。

    我挖到了希望有一个你可以覆盖的VS COM组件,这将允许你拦截给定路径的文件加载,但我找不到。

    我认为可行的一种方法是

    1. 将来源嵌入PDB
    2. 有一个工具可以将源提取到已知位置并重写PDB以指向该位置。
    3. 这不是你想要的。