【问题标题】:Can I use pdb files to step through a 3rd party assembly?我可以使用 pdb 文件单步执行第 3 方程序集吗?
【发布时间】:2010-04-29 07:01:15
【问题描述】:

我的朋友制作了一个非常有用的类库,我一直在使用它。我通常使用 Reflector 来查看他的代码做了什么。

我真正想做的是在调试时单步执行他的代码。所以他给了我他的 .pdb 文件。

  • Foo.dll(发布配置,编译)
  • Foo.pdb

现在,我不确定如何让它在抛出异常时自动闯入他的代码(他的代码,在不同的点,thorws exceptions .. like A first chance exception of type 'System.Web.HttpException' occurred in Foo.dll ...

我可以这样做吗?我需要在 Visual Studio 中使用 Symbol Server 设置进行一些设置吗?我是否需要将 dll 编译到调试配置中并传递 .dll 和 .pdb 文件?或者(我真的很害怕这个)..我是否需要同时拥有 .dll、.pdb 和他的源代码...

我也有一个look at this previous SO question,但它没有帮助(但证明我在提问之前尝试过搜索)。

有人可以帮帮我吗?

【问题讨论】:

    标签: debugging visual-studio-2010 assemblies pdb-files step-through


    【解决方案1】:

    是的,如果您的朋友为这些 PDB 编制索引,以便调试器知道在源代码控制系统中哪里可以找到合适的源,并且如果您的朋友将这些 pdb 上传到符号服务器,您可以完美地逐步完成调试时的代码。

    我已经为一些工作项目做过这个,这就像一个魅力。

    有关设置符号服务器的更多信息:

    Source server helps you kill bugs

    Setting up a symbol server

    Using symstore

    【讨论】:

    • 如果参考项目不是第 3 方而是我自己的项目,即我有它的源代码但将 dll 添加到另一个我想调试的项目中,我是否需要设置符号服务器跨度>
    • 不,如果你已经在你的机器上构建了那个引用的项目,并且你有 pdb 文件。只需将 pdb 文件复制到引用的 dll 旁边,就可以了。
    【解决方案2】:

    答案在链接的问题中,虽然它可能不是很明显,所以我会说:是的,你需要有源代码才能逐步浏览源代码。 PDB 文件只告诉调试器什么源文件的哪一行对应于特定的机器指令。

    您不需要设置“符号服务器”或类似的东西。让他把源发给你。当您加载 PDB 文件时,如果源文件不在同一路径中,Visual Studio 将提示您输入源文件的位置。

    【讨论】:

    • 没错,但是如果那个人经常更改他的源代码,那么每次他给 topicstarter 一个新版本的 DLL 时,他都必须发送那个源代码。而且,如果 topicstarter 在不同的项目中使用该 DLL 的不同版本,那么使用正确的源代码进行 debuggign 会成为一个相当大的挑战......
    • 如果我还需要源代码,那么 PDB 有什么用呢?我的意思是,他为什么不直接给我源代码,我编译它然后引用它?我只是不明白:((顺便说一句,我想要他的来源..希望pdb能把它放在那里)
    • PDB 的“点”正是我所说的。即使您自己编译源代码,您也必须让编译器生成 PDB 文件——这就是调试器的工作方式。更重要的是,在您的情况下的好处是他不一定需要向您发送所有您需要编译程序集的源代码,而只需发送您想要单步执行的源文件。
    • 所以,对于符号服务器,它实际上是一个保存源代码的位置,PDB 文件在文件 A.cs 中说“转到第 X 行”?
    【解决方案3】:

    我猜您发布另一个问题的链接只是为了证明您已经搜索过,因为该问题确实有您的问题的答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-09
      • 1970-01-01
      • 1970-01-01
      • 2011-04-23
      相关资源
      最近更新 更多