Cloud customer?
Start for Free >
Upgrade in MyJFrog >
What's New in Cloud >

Search





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 
Page Contents


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.lick 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 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.

  5. Add the following line to the NuGet.config file.
  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.

      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.


    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 Repository Browser, select your NuGet repository and scroll down to find and select the Symbol files you want to inspect.


Debugging Symbol Files in Visual Studio

The way in which Visual Studio and other debugging tools match an assembly and PDB file, is by using the assembly hash. This hash is stored in the .dll and .pdb files and must match for the debugging and source stepping to work.


When a .nupkg contains .pdb files, Visual Studio will not reach out to MyGet to download Symbols and sources. When trying to debug using this type of package, Visual Studio will find the .pdb on the disk instead of reaching out to MyGet to download it, and therefore will fail stepping into the code because of that.

Prerequisites
  1. In Visual Studio, under Tools | Options (or Debug | Options) | Debugging | General, clear the Enable Just My Code field.
  2. Set Artifactory to be your Symbol Server in Visual Studio by going to Tools | Options | Debugging | Symbols and adding the virtual or local repository URL path.

To debug the Symbol files in Artifactory:

  1. Run the Visual Studio Debugger and type in your credentials.

    Once logged in, the debugger scans the local cache and then goes to the virtual repository in Artifactory as displayed in the following example.
  2. Once the symbol is resolved by Visual Studio, proceed to debug the deployed Symbol file.
  • No labels
Copyright © 2022 JFrog Ltd.