How does the Visual Studio debugger know where the source is when loading an assembly at runtime?(在运行时加载程序集时,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调试器如何知道源代码在哪里?
基础教程推荐
- 为什么Flurl.Http DownloadFileAsync/Http客户端GetAsync需要 2022-09-30
- 如何激活MC67中的红灯 2022-01-01
- rabbitmq 的 REST API 2022-01-01
- 如何在 IDE 中获取 Xamarin Studio C# 输出? 2022-01-01
- 有没有办法忽略 2GB 文件上传的 maxRequestLength 限制? 2022-01-01
- 将 Office 安装到 Windows 容器 (servercore:ltsc2019) 失败,错误代码为 17002 2022-01-01
- SSE 浮点算术是否可重现? 2022-01-01
- MS Visual Studio .NET 的替代品 2022-01-01
- 将 XML 转换为通用列表 2022-01-01
- c# Math.Sqrt 实现 2022-01-01