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
Create your NuGet Symbol packages (.snupkg). For more information, see Create Symbol Packages.
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:
Navigate to the Administration module, go to Repositories | Repositories | Local | New Local Repository
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:
In the Administration module, under Repositories | Repositories | Virtual, Click New Virtual Repository and set NuGet to be its Package Type.
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:
From the Administration module, select Repositories | Repositories | Remote.
Click New Remote Repository and select NuGet from the Select Package Type dialog.
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 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:
In the JFrog Platform, navigate to Application Module | Artifactory | Artifacts.
Select the NuGet repository you created,
Select Set Me Up.
In the Configure tab, set up the NuGet repository to work against the NuGet Client.
Add the following line to theNuGet.configfile.
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.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 thenupkg
string.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.