在运行时加载程序集时,Visual Studio调试器如何知道源代码在哪里?

How does the Visual Studio debugger know where the source is when loading an assembly at runtime?(在运行时加载程序集时,Visual Studio调试器如何知道源代码在哪里?)

本文介绍了在运行时加载程序集时,Visual Studio调试器如何知道源代码在哪里?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

考虑以下代码:

private static void Main(string[] args)
{
    var exe = new MemoryStream(File.ReadAllBytes(args[0]));
    var assembly = AssemblyLoadContext.Default.LoadFromStream(exe);
    assembly.EntryPoint.Invoke(null, new object[] { new string[0] });
}

此程序在.Net core 1.1应用程序中编译,args在其调试输出目录中包含.Net core中通用Hello World的DLL的路径。

当我运行此程序时,它从DLL的内存副本加载程序集,然后调用入口点。Visual Studio似乎成功地识别出此DLL与我在解决方案中打开的Hello World项目相同,并且我可以单步执行并调试此调用的程序。

当我从程序集的内存副本加载时,VS调试器如何知道在哪里可以找到源代码?

推荐答案

首先定位.pdb,然后从那里定位源文件。

它如何定位.pdb?发件人Specify Symbol (.pdb) and Source Files in the Visual Studio Debugger:

在Visual Studio IDE中调试项目时,调试器知道代码的.pdb和源文件的默认位置。

...

(默认情况下,如果您已在计算机上生成了DLL或可执行文件,则链接器会将关联的.pdb文件的完整路径和文件名放置在DLL或可执行文件内。调试器首先检查符号文件是否存在于DLL或可执行文件内指定的位置。这很有帮助,因为您始终有符号可用于您在计算机上编译的代码。)

它还将在其他位置搜索.pdb,但当您尝试取消程序集与其在磁盘上的文件的关联时,此位置似乎是最有可能的来源。

这篇关于在运行时加载程序集时,Visual Studio调试器如何知道源代码在哪里?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本文标题为:在运行时加载程序集时,Visual Studio调试器如何知道源代码在哪里?