PEReader.TryOpenAssociatedPortablePdb 方法

定义

打开与此 PE 映像关联的可移植 PDB。

public:
 bool TryOpenAssociatedPortablePdb(System::String ^ peImagePath, Func<System::String ^, System::IO::Stream ^> ^ pdbFileStreamProvider, [Runtime::InteropServices::Out] System::Reflection::Metadata::MetadataReaderProvider ^ % pdbReaderProvider, [Runtime::InteropServices::Out] System::String ^ % pdbPath);
public bool TryOpenAssociatedPortablePdb (string peImagePath, Func<string,System.IO.Stream?> pdbFileStreamProvider, out System.Reflection.Metadata.MetadataReaderProvider? pdbReaderProvider, out string? pdbPath);
public bool TryOpenAssociatedPortablePdb (string peImagePath, Func<string,System.IO.Stream> pdbFileStreamProvider, out System.Reflection.Metadata.MetadataReaderProvider pdbReaderProvider, out string pdbPath);
member this.TryOpenAssociatedPortablePdb : string * Func<string, System.IO.Stream> * MetadataReaderProvider * string -> bool
Public Function TryOpenAssociatedPortablePdb (peImagePath As String, pdbFileStreamProvider As Func(Of String, Stream), ByRef pdbReaderProvider As MetadataReaderProvider, ByRef pdbPath As String) As Boolean

参数

peImagePath
String

PE 映像的路径。 该路径用于查找位于包含 PE 文件的目录中的 PDB 文件。

pdbFileStreamProvider
Func<String,Stream>

如果已指定,则调用以打开给定文件路径的 Stream。 如果目标文件不存在,或者出于某种原因应忽略该文件,则提供程序应返回可查找的可读 Streamnull。 如果由于意外的 IO 错误而无法打开文件,则提供程序应引发 IOException

pdbReaderProvider
MetadataReaderProvider

如果成功,将使用 的新实例 MetadataReaderProvider 来读取可移植 PDB。

pdbPath
String

如果成功,并且在文件中找到 PDB,则为文件路径,如果 PDB 嵌入到 PE 映像本身中,则为 null

返回

如果 PE 映像具有与之关联的 PDB 并且已成功打开 PDB,则为 true;否则为 false

例外

peImagePathpdbFileStreamProvidernull

pdbFileStreamProvider 返回的流不支持读取和查找操作。

由于出现错误,找不到匹配的 PDB 文件:PE 映像或 PDB 无效。

由于出现错误,找不到匹配的 PDB 文件:读取 PE 映像或 PDB 时发生 IO 错误。

注解

此方法基于 PE 映像调试目录的内容实现简单的 PDB 文件查找。 更复杂的工具可能需要跟进对搜索路径或符号服务器的其他查找。

方法按以下顺序查找 PDB:

  1. 检查包含 PE 文件的目录的 CodeView 条目中找到的名称匹配的 PDB 文件 () 目录 peImagePath
  2. 检查 PE 映像本身中嵌入的 PDB。

返回与调试目录中指定的信息匹配的第一个 PDB。

适用于