索引源 & 发布符号任务

Azure DevOps Services | Azure DevOps Server 2020 | Azure DevOps Server 2019 | TFS 2018

使用此任务为源代码编制索引,并将符号发布到文件共享或 Azure Artifacts 符号服务器。

通过为源代码编制索引,可以使用符号文件在用于生成应用程序的计算机上调试应用程序。 例如,可以从没有源代码的开发计算机调试由生成代理生成的应用程序。

符号服务器使调试器能够自动检索正确的符号文件,而无需知道产品名称、内部版本号或包名称。

需求

YAML 代码片段

# Index sources and publish symbols
# Index your source code and publish symbols to a file share or Azure Artifacts symbol server
- task: PublishSymbols@2
  inputs:
    #symbolsFolder: '$(Build.SourcesDirectory)' # Optional
    #searchPattern: '**/bin/**/*.pdb' 
    #indexSources: true # Optional
    #publishSymbols: true # Optional
    #symbolServerType: ' ' # Required when publishSymbols == True # Options:  , teamServices, fileShare
    #symbolsPath: The file share that hosts your symbols. # Optional
    #compressSymbols: false # Required when symbolServerType == FileShare
    #SymbolExpirationInDays: The number of days that symbols should be retained. # Required when PublishSymbols = true && SymbolServerType = TeamServices. Default: 36530
    #IndexableFileFormats: Which debug formats to publish to the symbol server. # Options: Default, Pdb, SourceMap, All. # Required when PublishSymbols = true && SymbolServerType = TeamServices. Default: Default
    #detailedLog: true # Optional
    #treatNotIndexedAsWarning: false # Optional
    #useNetCoreClientTool: false # Optional
    #symbolsMaximumWaitTime: # Optional
    #symbolsProduct: # Optional
    #symbolsVersion: # Optional
    #symbolsArtifactName: 'Symbols_$(BuildConfiguration)' # Optional

参数

参数 说明
SymbolsFolder
符号文件夹的路径

(可选) 搜索符号文件的文件夹的路径。 默认值为 $ (Build.SourcesDirectory) ,否则指定根路径。 请注意,如果选择 Azure Artifacts 符号服务器作为服务器类型,则不支持 UNC 路径。
例如:$ (Build.BinariesDirectory) /MyProject

SearchPattern
搜索模式

(需要) 文件匹配模式 () 用于发现要发布的 pdb 文件的模式


默认值:**/bin/**/*.pdb
IndexSources
索引源

(可选) 指示是否将源服务器信息注入 PDB 文件。 此选项仅在 Windows 代理上受支持。


默认值:true
PublishSymbols
发布符号

(可选) 指示是否发布符号文件


默认值:true
SymbolServerType
符号服务器类型
(必需) 选择发布符号的位置。 任何有权访问组织/集合的用户都可以访问发布到 Azure Artifacts 符号服务器的符号。 Azure DevOps Server仅支持“文件共享”选项。 按照 这些说明 在 Azure Artifacts 中使用符号服务器。
TeamServices:
  • 此组织中的符号服务器/集合 (需要 Azure Artifacts)
文件共享:
  • 选择此选项可以使用下一个输入中提供的文件共享。
SymbolsPath
发布符号的路径

(可选) 承载符号的文件共享。 此值将在调用 symstore.exe添加/s 参数时使用。

准备 SymStore 符号存储:

  1. 在文件共享服务器上设置一个文件夹来存储符号。 例如,设置 \fabrikam-share\symbols。
  2. 生成代理服务帐户授予完全控制权限。

如果将此参数留空,则符号将进行源索引但未发布。 (还可以将符号与拖放一起存储。请参阅 发布生成项目) 。

CompressSymbols
压缩符号

(必需) 仅在 选择文件共享 作为 符号服务器类型时可用。 压缩 pdbs 以节省空间。
默认值:false

SymbolExpirationInDays
符号过期 ((以天为单位))
应保留符号的天数。 当 PublishSymbols = true && SymbolServerType = TeamServices 时必需。
默认值:36530

高级选项

参数 说明
IndexableFileFormats
要发布的符号文件格式
要发布到符号服务器的调试格式。 当 PublishSymbols = true && SymbolServerType = TeamServices 时必需。 选项:默认值、Pdb、SourceMap、All。
默认值:默认值
DetailedLog
详细日志记录
(可选) 启用其他日志详细信息。
默认值:true
TreatNotIndexedAsWarning
如果未编制索引,则发出警告

(可选) 指示是否未为 PDB 文件编制源索引时发出警告。 否则,消息将记录为普通输出。
源索引的常见原因是解决方案依赖于它不生成的二进制文件。

即使未选择此选项,消息也会以日志方式写入。


默认值:false
UseNetCoreClientTool
使用支持 Linux 符号的工具版本
(可选) 使用支持 DWARF 和 ELF 文件的符号上传工具版本。 此选项仅在 Windows 代理上很重要。 在非 Windows 代理上,将始终使用支持 DWARF 和 ELF 文件的符号上传工具版本。
默认值:false
SymbolsMaximumWaitTime
最大等待时间 (分钟)
(可选) 失败此任务之前等待的分钟数。 如果将其留空,则限制为 2 小时。
SymbolsProduct
产品
(可选) 指定要symstore.exe的产品参数。 默认值为 $ (Build.DefinitionName)
SymbolsVersion
版本
(可选) 指定要symstore.exe的版本参数。 默认值为 $ (Build.BuildNumber) 。
SymbolsArtifactName
项目名称
(可选) 指定要用于符号项目的项目名称。 默认值为 Symbols_$ (BuildConfiguration) 。
默认值:Symbols_$ (BuildConfiguration)

重要

若要删除使用 索引源 & 发布符号 任务发布的符号,必须先删除生成这些符号的生成。 这可以通过使用 保留策略 或手动 删除运行来实现。

常见问题解答

问:索引的工作原理是什么?

答:通过选择为源编制索引,将向 PDB 文件注入额外的部分。 PDB 文件通常仅包含对本地源文件路径的引用,例如 :C:\BuildAgent_work\1\src\MyApp\Program.cs。 注入 PDB 文件中的额外部分包含调试器的映射说明。 映射信息指示如何检索对应于每个本地路径的服务器项。

Visual Studio 调试器将使用映射信息从服务器检索源文件。 用于检索源文件的实际命令包含在映射信息中。 例如:

tf.exe git view /collection:http://SERVER:8080/tfs/DefaultCollection /teamproject:"93fc2e4d-0f0f-4e40-9825-01326191395d" /repository:"647ed0e6-43d2-4e3d-b8bf-2885476e9c44" /commitId:3a9910862e22f442cd56ff280b43dd544d1ee8c9 /path:"/MyApp/Program.cs" /output:"C:\Users\username\AppData\Local\SOURCE~1\TFS_COMMIT\3a991086\MyApp\Program.cs" /applyfilters

问:是否可以对从 .NET Core 程序集创建的可移植 PDB 使用源索引?

答:否,但可以改用Source Link

问:符号保留多长时间?

答:符号与发布到 Azure Pipelines 的生成相关联,它们与生成相关联。 手动或使用保留策略删除生成时,也会删除符号。 如果要无限期保留符号,请将生成标记为 “无限期保留”。