如何将源代码嵌入到 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 中并让调试器使用它? 的相关文章

  • Unix网络编程澄清

    我正在翻阅这本经典书籍Unix网络编程 https rads stackoverflow com amzn click com 0139498761 当我偶然发现这个程序时 第 6 8 节 第 179 180 页 include unp h
  • 如何检查QProcess是否正确执行?

    QProcess process sdcompare QString command sdcompare QStringList args sdcompare command sdcompare diff args sdcompare lt
  • 启动时出现 OData v4 错误:找不到段“Whatever”的资源

    我正在构建新的 v4 服务 一切进展顺利 直到我为新模型 实体添加了新控制器 并在启动站点进行测试运行时收到此错误 控制器似乎编码正确 就像其他控制器一样 控制器 CustomersOData 中的操作 GetFeed 上的路径模板 Cus
  • 如何为 C 分配的 numpy 数组注册析构函数?

    我想在 C C 中为 numpy 数组分配数字 并将它们作为 numpy 数组传递给 python 我可以做的PyArray SimpleNewFromData http docs scipy org doc numpy reference
  • 如何修复此错误“GDI+ 中发生一般错误”?

    从默认名称打开图像并以默认名称保存 覆盖它 我需要从 Image Default jpg 制作图形 将其放在 picturebox1 image 上并在 picurebox1 上绘制一些图形 它有效 这不是我的问题 但我无法保存 pictu
  • 在 Unity 进程和另一个 C# 进程之间进行本地 IPC 的最快方法 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我希望每秒大约 30 次从 C 应用程序向我的 Unity 应用程序传送大量数据 由于 Unity 不支持映射内存和管道 我考虑了 t
  • 如何从 .resx 文件条目获取注释

    资源文件中的字符串有名称 值和注释 The ResXResourceReader类让我可以访问名称和值 有办法看评论吗 你应该能够得到Comment via ResXDataNode class http msdn microsoft co
  • 存储来自其他程序的事件

    我想将其他应用程序的事件存储在我自己的应用程序中 事件示例 打开 最小化 Word 或打开文件时 这样的事可能吗 运行程序 http msdn microsoft com en us library ms813609 aspx and 打开
  • 生成(非常)大的非重复整数序列而不进行预洗牌

    背景 我编写了一个简单的媒体客户端 服务器 我想生成一个不明显的时间值 随从客户端到服务器的每个命令一起发送 时间戳中将包含相当多的数据 纳秒分辨率 即使它不是真正准确 因为现代操作系统中计时器采样的限制 等 我想做的 在 Linux 上
  • 如何在 C# 中定义文本框数组?

    您好 当我在 Windows 申请表上创建文本框时 我无法将其命名为 box 0 box 1 等 我这样做的目的是因为我想循环使用它们 其实我发现TextBox array firstTextBox secondTextBox 也有效
  • 在一个字节中存储 4 个不同的值

    我有一个任务要做 但我不知道从哪里开始 我不期待也绝对不想要代码中的答案 我想要一些关于该怎么做的指导 因为我感到有点失落 将变量打包和解包到一个字节中 您需要在一个字节中存储 4 个不同的值 这些值为 NAME RANGE BITS en
  • 如何远程调试Lua?

    我正在寻找远程调试 Lua 的最佳方法 例如从网络浏览器 I saw RemDebug http www keplerproject org remdebug 但最后一次项目更新是在 2006 年完成的 它适用于 Lua 5 0 和 5 1
  • PlaySound 可在 Visual Studio 中运行,但不能在独立 exe 中运行

    我正在尝试使用 Visual Studio 在 C 中播放 wav 文件 我将文件 my wav 放入项目目录中并使用代码 PlaySound TEXT my wav NULL SND FILENAME SND SYNC 我按下播放按钮 或
  • Visual Studio 中的测试单独成功,但一组失败

    当我在 Visual Studio 中单独运行测试时 它们都顺利通过 然而 当我同时运行所有这些时 有些通过 有些失败 我尝试在每个测试方法之间暂停 1 秒 但没有成功 有任何想法吗 在此先感谢您的帮助 你们可能有一些共享数据 检查正在使用
  • ClojureScript 中的 js/console.log

    我想用 ClojureScript 实现一个函数来简化js console log像这样 defn log args apply js console log args 调用它 log foo bar 抛出 TypeError Illega
  • 如何从main方法调用业务对象类?

    我已将代码分为业务对象 访问层 如下所示 void Main Business object public class ExpenseBO public void MakeExpense ExpensePayload payload var
  • 如何对 Web Api 操作进行后调用?

    我创建了一个 Web API 操作 如下所示 HttpPost public void Load string siteName string providerName UserDetails userDetails implementat
  • (de)从 CSV 序列化为对象(或者最好是类型对象的列表)

    我是一名 C 程序员 试图学习 C 似乎有一些内置的对象序列化 但我在这里有点不知所措 我被要求将测试数据从 CSV 文件加载到对象集合中 CSV 比 xml 更受青睐 因为它更简单且更易于人类阅读 我们正在创建测试数据来运行单元测试 该集
  • 用于 C# 的 TripleDES IV?

    所以当我说这样的话 TripleDES tripledes TripleDES Create Rfc2898DeriveBytes pdb new Rfc2898DeriveBytes password plain tripledes Ke
  • 如何使用 Word Automation 获取页面范围

    如何使用办公自动化找到 Microsoft Word 中第 n 页的范围 似乎没有 getPageRange n 函数 并且不清楚它们是如何划分的 这就是您从 VBA 执行此操作的方法 转换为 Matlab COM 调用应该相当简单 Pub

随机推荐

  • 如何在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 来获取文件的磁盘路径以及编译后创建可执行文件的给定