VS 2019 - 调试 .NET Framework 源代码
VS 2019 - Debugging .NET Framework Sources
我无法进入 WPF 的源代码 (PresentationFramework.dll
)。
我已按照 here 列举的步骤进行操作。
- 下载的源匹配 .Net 版本 - 4.7.1.
- Modules window 表示已加载 PresentationFramework 符号文件。
- 断点未激活:没有为该文档加载任何符号。
- 选定断点的设置表明必须匹配源,尽管调试选项另有说明。如果我切换到允许源代码与原始代码不同,则没有变化
看起来需要一个额外的步骤来将源与 PDB 相关联。
谢谢
编辑
我发现我可以进入 List<T>()
。但是,我想要的是调试 TreeView
& TreeViewItem
.
我唯一的建议是转到 Tools/Options/Debugging 并确保“启用仅我的代码”未选中。
您无法进入编译成 PresentationFramework.dll
的任何源代码的原因是 PresentationFramework.pdb
与您的 GAC 中的 PresentationFramework.dll
版本相对应的符号文件没有任何源文件路径。这正是 Microsoft 构建此特定程序集的特定版本的方式。当他们发布新的 .NET 版本时,他们似乎在某些程序集的 PDB 文件中包含完整的调试信息(连同源文件路径),但在其他程序集的 PDB 文件中忽略了此信息。我不知道他们为什么要这样做。另一方面,您能够进入 List<T>
源代码,因为此 class 驻留在 mscorlib
程序集中,PDB 文件恰好包含源文件路径。
您可以检查符号缓存目录(默认情况下 [your profile]\AppData\Local\Temp\SymbolCache
)中的 PDB 文件,看看哪些包含源文件路径,哪些不包含。据我所知,没有官方工具可以检查 PDB 文件,但您可以使用任何文件查看器打开它们,只是要做好它们是二进制文件的准备,所以您看到的大部分都是乱码。但是您仍然可以查看是否有任何类似于文件路径的符号序列(它们通常靠近文件的开头)。
如果您真的想进入 WPF 控件代码,here 描述了一种解决方法(我自己从未尝试过,所以我不能保证)。要点是您将 GAC 中的 PresentationFramework.dll
替换为旧版本,Microsoft 为其构建了一个具有完整调试信息的 PDB,并使其在他们的符号服务器上可用。要使用这种方法,您必须知道您需要哪个版本以及从哪里获得它。
我无法进入 WPF 的源代码 (PresentationFramework.dll
)。
我已按照 here 列举的步骤进行操作。
- 下载的源匹配 .Net 版本 - 4.7.1.
- Modules window 表示已加载 PresentationFramework 符号文件。
- 断点未激活:没有为该文档加载任何符号。
- 选定断点的设置表明必须匹配源,尽管调试选项另有说明。如果我切换到允许源代码与原始代码不同,则没有变化
看起来需要一个额外的步骤来将源与 PDB 相关联。
谢谢
编辑
我发现我可以进入 List<T>()
。但是,我想要的是调试 TreeView
& TreeViewItem
.
我唯一的建议是转到 Tools/Options/Debugging 并确保“启用仅我的代码”未选中。
您无法进入编译成 PresentationFramework.dll
的任何源代码的原因是 PresentationFramework.pdb
与您的 GAC 中的 PresentationFramework.dll
版本相对应的符号文件没有任何源文件路径。这正是 Microsoft 构建此特定程序集的特定版本的方式。当他们发布新的 .NET 版本时,他们似乎在某些程序集的 PDB 文件中包含完整的调试信息(连同源文件路径),但在其他程序集的 PDB 文件中忽略了此信息。我不知道他们为什么要这样做。另一方面,您能够进入 List<T>
源代码,因为此 class 驻留在 mscorlib
程序集中,PDB 文件恰好包含源文件路径。
您可以检查符号缓存目录(默认情况下 [your profile]\AppData\Local\Temp\SymbolCache
)中的 PDB 文件,看看哪些包含源文件路径,哪些不包含。据我所知,没有官方工具可以检查 PDB 文件,但您可以使用任何文件查看器打开它们,只是要做好它们是二进制文件的准备,所以您看到的大部分都是乱码。但是您仍然可以查看是否有任何类似于文件路径的符号序列(它们通常靠近文件的开头)。
如果您真的想进入 WPF 控件代码,here 描述了一种解决方法(我自己从未尝试过,所以我不能保证)。要点是您将 GAC 中的 PresentationFramework.dll
替换为旧版本,Microsoft 为其构建了一个具有完整调试信息的 PDB,并使其在他们的符号服务器上可用。要使用这种方法,您必须知道您需要哪个版本以及从哪里获得它。