【问题标题】:Debugging a dll linked to at runtime在运行时调试链接到的 dll
【发布时间】:2013-08-13 18:35:14
【问题描述】:

为了模块化,我在运行时而不是编译时链接到我的解决方案中的 dll,以允许我独立更新它。当我在库项目中放置断点时,当类链接到时不会触发这些断点,并且会创建一个类型。

供参考,这是反射代码:

Assembly a = Assembly.LoadFile(FULL_APPLICATION_CACHE + targetVersion + "\\Core.dll");
Type engineCoreType = a.GetType("Core.EngineCore");
object instance = Activator.CreateInstance(engineCoreType);

Visual Studio 是否可以在这种情况下提供其正常的调试工具?我将如何配置它?

【问题讨论】:

  • 一个有用的相关帖子here

标签: c# visual-studio reflection visual-studio-2012 visual-studio-debugging


【解决方案1】:

您需要确保 .pdb 文件与您正在加载的 dll 位于同一位置。然后 Visual Studio 将加载该数据并允许它在断点处停止。

【讨论】:

  • pdb 文件正在被复制到同一目录,但仍然没有触发断点。它们被标记为“断点不会被命中。没有为此文档加载任何符号”。感谢您的建议
  • 你说得对,谢谢!我使用的复制方法没有覆盖之前的版本。
【解决方案2】:

调试器需要能够找到程序集的 .pdb 文件。您可以从 Debugger + Windows + Modules 窗口对此进行诊断。右键单击 DLL 并选择符号加载信息,它会显示调试器查找 PDB 的位置。

请注意,您应该永远不要在这种情况下使用 Assembly.LoadFile(),它会在没有加载上下文的情况下加载程序集。一个昂贵的词,意味着 CLR 不注意 DLL 的来源,并允许您多次加载 DLL。本身就解释了为什么调试器找不到 PDB。始终使用 LoadFrom() 代替。

【讨论】:

  • 您能否扩展或链接我以获得有关拥有上下文的好处的更多信息?以前没有考虑过,谢谢建议
  • 任何关于 .NET 的中间书都包含了它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-15
  • 1970-01-01
相关资源
最近更新 更多