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

2024-01-06

NOTE:我的目标关注点是 C# 以常规 MSIL 为目标的 CLR,以防有一些东西适用于此,但不适用于更一般的情况。


我读过这篇文章并想总结一下我的理解以便清楚起见

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

作为一个以这种方式挖掘源代码的人,我喜欢用一个包来满足所有调试需求的想法。不过,这个提议有几个方面需要考虑。

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

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

  1. 文件在磁盘上的路径
  2. 所述文件的校验和(用于消除同名文件的歧义)

我相当确定这是它传递到符号服务器的唯一信息。这使得实现符号服务器变得不可行,因为它无法访问 PDB(当然假设我是对的)。

我四处寻找,希望有一个可以重写的 VS COM 组件,它允许您拦截给定路径的文件加载,但我找不到。

我认为可行的一种方法是

  1. 将源代码嵌入到 PDB 中
  2. 拥有一个工具,既可以将源代码提取到已知位置,又可以重写 PDB 以指向该位置。

但这并不完全是你想要的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将源代码嵌入到 pdb 中并让调试器使用它? 的相关文章

随机推荐

  • 如何在php中获取准确的IST时间?

    在 php 中 我使用了日期函数 例如 date Y m d h m s 它不会显示当前时间请帮助我 你想要印度时间 这是我的解决方案 您可以使用Asia Calcutta or Asia Kolkata 两者将同时返回 date defa
  • Visual Studio Code 高级搜索要包含的文件中的通配符

    我正在尝试为具有特定文件名条件的所有文件找到一行代码 我正在尝试利用高级搜索Visual Studio Code 的方法是将wildcard in the 要包含的文件搜索领域 但我没能做到这一点 我尝试使用asterisk 符号 但我认为
  • 更好的 ruby​​ markdown 解释器?

    我正在尝试找到一个可以在 rakefile 中使用的 markdown 解释器类 模块 到目前为止我已经找到了maruku http maruku rubyforge org 但我对测试版有点警惕 有人遇到过 maruku 的问题吗 或者
  • 使用 Graph API 时出现“租户 guid 的租户不存在” - 用户类型为会员的事件

    我正在尝试使用 Microsoft Graph API 访问电子邮件 当我尝试访问电子邮件时 出现以下错误 Microsoft Graph ServiceException 代码 OrganizationFromTenantGuidNotF
  • 如何确定处理器运行的字节序模式?

    如何仅使用汇编语言确定 ARM 处理器运行的字节序模式 我可以很容易地看到 Thumb ARM 状态读取 CPSR 的第 5 位 但我不知道 CPSR 或其他地方是否有对应的位用于字节序 silly example trying to ex
  • 设置 Actionbarsherlock 选项卡的样式

    因此 我尝试设置 Actionbar 选项卡的样式 这是我使用 ActionBarSherlock 库实现的 这是我的代码
  • 无法使用正确的电子邮件和姓名登录

    我正在使用 AJAX 创建登录表单 我基本上在 PHP 上工作 我对 ajax 没有太多了解 请大家帮助我解决我的疑问 当我在电子邮件 ID 和名称中输入任何值时 它就会被记录进入该页面 假设如果我给出了错误的姓名和电子邮件 那么我不会抛出
  • Java - 使用一个函数处理多个事件?

    首先 我是一个十足的Java NOOB 我想用一个函数处理多个按钮按下 并根据单击的按钮执行某些操作 我正在使用Netbeans 并且我添加了一个具有绑定功能的事件 默认情况下 该函数会发送一个 ActionEvent 如何获取单击的对象以
  • 无法从 putty 运行 .py 文件,语法错误:单词意外(需要“)”)

    我对 Python 和 Linux 都很陌生 因此要求尽可能使用最少的假设知识进行简单的解释 但是我非常愿意投入时间和精力来学习 我有一个运行 Linux 的 Raspberry Pi 2 型号 B V1 1 我通过 putty 与这个 p
  • scipy.optimize.minimize('SLSQP') 给定 2000 个暗淡变量时太慢

    我有一个带有约束和上 下界的非线性优化问题 所以使用 scipy 我必须使用 SLSQP 问题显然不是凸的 我让雅可比函数的目标函数和约束函数都能正常工作 结果很好 快 最多 300 个输入向量 所有功能均经过矢量化并调整为运行速度非常快
  • c# 会话“未将对象引用设置为对象的实例。”

    我有一个 ASHX 文件 对象引用未设置为 对象的实例 在线上 HttpContext Current Session loggedIn true 这是我正确使用会话的方式吗 我猜想Session是这里的罪魁祸首 供参考here https
  • Play Framework 以及模型类中集合的使用

    我刚刚开始使用 Play 框架 在我的模型类之一中使用集合时遇到了一些问题 我对 Play 和 JPA Hibernate 非常陌生 所以请原谅我的菜鸟 我尝试在网络上搜索答案 但找不到我想要的东西 本质上 我有 2 个模型 Entity
  • 如何使用 Kotlin 反射更改成员字段?

    我正在将一个类从 Java 移植到 Kotlin 这个类声明了数百个对象 每个对象都有一个 name 属性 该属性与该对象声明的变量名称相同 Java反射允许通过反射使用声明的名称来设置对象成员name 只是在数百个构造函数中保存一个参数
  • “JScript - 脚本块”和内存泄漏 - 如何正确释放资源?

    我在项目的部分视图中放置了一些 jquery 选项卡 我通过 Visual Studio 的 解决方案资源管理器 注意到 在调试期间新动态JScript script block每次我单击新选项卡时都会生成 即使我把这种情况发生 mytab
  • 视图正在剪切其内容错误

    我使用的是 Xcode 4 6 在窗口中 我不断收到 视图正在裁剪其内容 错误 当我单击它时 XIB 编辑器会突出显示一个标签 这个错误试图告诉我什么以及如何修复它 首先 单击文本 视图正在裁剪 将选择有问题的控件 当您将文本字段的大小调整
  • Javascript 通过类或 id 获取 DOM 数组中的元素索引位置

    我的情况 var domElements document body getElementsByTagName 现在我想返回数组项键 数组中元素的位置 例如domElements 34 在数组中搜索元素id asd 我怎样才能实现这个目标
  • 将 Ehcache CacheManager (v 3.x) 转换为 Spring CacheManager,无需 XML 配置

    我正在尝试在我的应用程序中使用 Ehcache 管理器 我想在没有 xml 配置的情况下设置它 我有下一个依赖项
  • 头文件的多次包含[重复]

    这个问题在这里已经有答案了 I have A cpp and B cpp两者都包含头文件header h 后来两者A cpp and B cpp包含在一个main cpp 这会导致错误 当main cpp编译时说头文件header h已被收
  • python 用高斯混合模型(GMM)拟合加权数据,协方差最小

    我想使用 python 将高斯混合模型拟合到一组加权数据点 我尝试了 sklearn mixture GMM 它工作得很好 除了它对所有数据点的权重相等 有谁知道如何在此方法中为数据点分配权重 我多次尝试使用数据点来 增加其权重 但这对于大
  • 如何将源代码嵌入到 pdb 中并让调试器使用它?

    NOTE 我的目标关注点是 C 以常规 MSIL 为目标的 CLR 以防有一些东西适用于此 但不适用于更一般的情况 我读过这篇文章并想总结一下我的理解以便清楚起见 如今 调试器使用 PDB 来获取文件的磁盘路径以及编译后创建可执行文件的给定