Artifactory as Your Symbol Server

JFrog Artifactory Documentation

ft:sourceType
Paligo
Overview

Symbol files (which are .pdb files) provide a footprint of the functions that are contained in executable files and dynamic-link libraries (DLLs) and can present a roadmap of the function calls that lead to the point of failure.

A Symbol Server stores the .PDB files and binaries for all your public builds. These are used to enable you to debug any crash or problem that is reported for one of your stored builds. Both Visual Studio and WinDBG know how to access Symbol Servers, and if the binary you are debugging is from a public build, the debugger will get the matching PDB file automatically.

From Artifactory 7.36, you can benefit from the following advanced Symbol Server features:

  • Publishing while indexing your Symbol packages to Artifactory from your NuGet Client v3 together with your NuGet packages or as separate Symbol packages

  • Resolving Symbol files (.pdb) from virtual and local repositories in the JFrog Platform

  • Resolving Symbol files from remote proxies. For example, http://symbols.nuget.org/download/symbols.

  • Debugging the Symbol files hosted on Artifactory using the Visual Studio debugger tool.

Note that prior to Artifactory 7.36, Symbol Server support was limited to setting Artifactory as a remote Proxy for Symbol files that were hosted as Generic packages in Artifactory

Support PDB Formats

  • Microsoft PDB V7 (Microsoft C/C++ MSF 7.00)

  • Portable PDB v1.0

NuGet Symbol Repository Layout

The NuGet Symbol files are displayed as part of the NuGet repository structure as follows.

├── .symbols/serilog.version    
│      └─ GUID_Name folder
│        └─  serilog.pdb
├──
Publishing NuGet Symbol Packages to Artifactory

The JFrog Platform supports publishing and automatically indexing your Symbol packages to be consumed by the debugger.

Prerequisite
Setting up a Local Repository

Local repositories enable you to deploy NuGet Symbol (.snupkg) packages. Artifactory calculates the metadata for all the Symbol packages and indexes them to allow users to download Symbol files through the Visual Studio debugger.

To create a NuGet Symbol local repository:

  1. Navigate to the Administration module, go to Repositories | Repositories | Local | New Local Repository

  2. Select NuGet as the Package Type.

Setting up a Virtual Repository

An Artifactory Virtual Repository aggregates packages from both local and remote repositories.

This allows you to access both locally-hosted NuGet Symbol packages and remote-proxied NuGet Symbol files from a single URL that is defined for the virtual repository.

To create a virtual NuGet repository:

  1. In the Administration module, under Repositories | Repositories | Virtual, Click New Virtual Repository and set NuGet to be its Package Type.

  2. Select the underlying local and remote NuGet Symbol repositories to include under the Repositories section.

Setting up a Remote Symbol Server Repository

You can proxy a remote Symbol Server through the JFrog Platform remote repositories. A Remote Repository defined in Artifactory serves as a caching proxy for a registry managed at a remote URL such as (which is the http://symbols.nuget.org/download/symbols).

Symbol files requested from a remote repository are cached on demand. You can remove downloaded Symbol files from the remote repository cache; however, you can not manually push Symbol packages to the remote NuGet repository.

To define a remote repository to proxy as a remote Symbol Server follow these steps:

  1. From the Administration module, select Repositories | Repositories | Remote.

  2. Click New Remote Repository and select NuGet from the Select Package Type dialog.

  3. In the Basic tab, set the Repository Key value, and specify the URL to the remote registry in the NuGet Symbol Server URL field. Note that the default is set to http://symbols.nuget.org/download/symbols.

    Configure a remote repo as a proxy.png
Configure the NuGet CLI to Work Opposite Artifactory as the Symbol Server

In addition to building and creating NuGet packages (.nupkg), the NuGet client also supports creating associated Symbol packages (.snupkg or .symbols.nupkg), that contain all the relevant symbol files for the NuGet package. The Symbol packages can be pushed to a Symbol Server, where the Symbol files can be indexed and consumed by the Visual Studio Debugger.

The Symbol package structure is similar to the NuGet package but contains the Symbol files instead of the source files.

To configure the NuGet CLI:

  1. In the JFrog Platform, navigate to Application Module | Artifactory | Artifacts.

  2. Select the NuGet repository you created,

  3. Select Set Me Up.

  4. In the Configure tab, set up the NuGet repository to work against the NuGet Client.

    Symbol_Server_CLI_configuration.png
  5. Add the following line to theNuGet.configfile.

    Configure_ NuGet.png
  6. In the Deploy tab, choose from one of the following Push options.

    • Push NuGet packages together with their related Symbol packages

      When you run the nuget push command, if there is a Symbol package present in the same directory, then the Symbol package will be automatically pushed to the same location.

      Deploying both Symbol and NuGet packages to the repo.png

      As displayed in the following example.

      nuget push mypackage.1.0.0.nupkg -Source ArtifactoryNuGetV3
  • Pushing NuGet Symbol packages only When you run the nuget push command, you can decide to push only Symbol packages by adding an ‘s’ as the prefix to the nupkg string.

    Deploying Only Symbol packages to the repo.png

    As displayed in the following example.

    nuget push mypackage.1.0.0.snupkg -Source ArtifactoryNuGetV3
Viewing Individual Symbol Package Information

After deploying your Symbol package to Artifactory, you can view the indexed Symbol files. In the Artifact Browsing , select your NuGet repository and scroll down to find and select the Symbol files you want to inspect.