C# 在运行时加载程序集时,Visual Studio调试器如何知道源在何处?

C# 在运行时加载程序集时,Visual Studio调试器如何知道源在何处?,c#,.net,visual-studio,debugging,.net-assembly,C#,.net,Visual Studio,Debugging,.net Assembly,考虑以下代码: 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] }); }

考虑以下代码:

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的内存副本加载程序集,然后调用入口点。VisualStudio似乎成功地认识到这个dll与我在解决方案中打开的hello world项目相同,我可以逐步完成并调试这个调用的程序

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

答案在本页中:

使用VisualStudio调试器的全部功能(如 断点)附加到进程时,可执行文件必须 匹配本地源代码和符号(即调试器必须是 能够加载正确的符号(.pbd)文件)。默认情况下,此 需要调试生成

,

程序数据库(.pdb)文件(也称为符号文件)映射 在源文件中为类、方法和对象创建的标识符 将其他代码添加到已编译代码中使用的标识符 项目的可执行文件。.pdb文件还映射了中的语句 可执行文件中执行指令的源代码。这个 调试器使用此信息确定 信息:中显示的源文件和行号 Visual Studio IDE和可执行文件中何时停止的位置 您设置了一个断点。符号文件还包含原始符号 源文件的位置,以及(可选)源文件的位置 可以从中检索源文件的服务器

调试器在其中搜索.pdb文件
  • 在DLL或可执行文件中指定的位置 文件
  • .pdb文件,这些文件可能与DLL位于同一文件夹中 或可执行文件
  • 任何本地符号缓存文件夹

  • 在上指定的任何网络、internet或本地符号服务器和位置,如Microsoft符号服务器(如果启用)

  • 答案在本页:

    使用VisualStudio调试器的全部功能(如 断点)附加到进程时,可执行文件必须 匹配本地源代码和符号(即调试器必须是 能够加载正确的符号(.pbd)文件)。默认情况下,此 需要调试生成

    ,

    程序数据库(.pdb)文件(也称为符号文件)映射 在源文件中为类、方法和对象创建的标识符 将其他代码添加到已编译代码中使用的标识符 项目的可执行文件。.pdb文件还映射了中的语句 可执行文件中执行指令的源代码。这个 调试器使用此信息确定 信息:中显示的源文件和行号 Visual Studio IDE和可执行文件中何时停止的位置 您设置了一个断点。符号文件还包含原始符号 源文件的位置,以及(可选)源文件的位置 可以从中检索源文件的服务器

    调试器在其中搜索.pdb文件
  • 在DLL或可执行文件中指定的位置 文件
  • .pdb文件,这些文件可能与DLL位于同一文件夹中 或可执行文件
  • 任何本地符号缓存文件夹

  • 在上指定的任何网络、internet或本地符号服务器和位置,如Microsoft符号服务器(如果启用)


  • 它首先定位
    .pdb
    ,然后从那里可以定位源文件

    它如何定位
    .pdb
    ?发件人:

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

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


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

    它首先定位
    .pdb
    ,然后从那里可以定位源文件

    它如何定位
    .pdb
    ?来自:

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

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


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

    完全相同,您可以从调试文件夹中的exe运行应用程序,然后转到visual studio并“附加到进程”然后调试。这是因为您是从调试文件夹运行的。与从调试文件夹中的exe运行应用程序,然后转到visual Server完全相同