Como depurar pacotes NuGet com Source Link
Qual é o jeito mais prático de depurar o código de um pacote NuGet? Neste artigo, mostro como utilizar o Source Link para criar uma experiência de depuração sólida e prática.

O Source Link é uma tecnologia que visa prover uma grande experiência de depuração para binários .NET e que facilita muito a vida dos desenvolvedores na hora de resolver problemas.
Para isso, ele insere metadados nos binários e nos pacotes NuGet, de modo que a IDE possa fazer o download do código fonte diretamente dos repositórios no GitHub, GitLab, Azure DevOps, ou qualquer outro provedor que tenha suporte ao recurso.
#Como utilizar o Source Link para depurar bibliotecas
Cada IDE possui uma configuração para habilitar o uso do Source Link e permitir a depuração de pacotes NuGet. A seguir, mostro como fazer essa configuração no Jetbrains Rider e no Visual Studio.
#Configuração no Rider ou ReSharper
As versões mais recentes do Rider e do ReSharper já vêm com tudo configurado por padrão e a experiência é bem natural.

Por padrão, se houver símbolos disponíveis via Source Link, o Rider vai baixar os fontes, e caso contrário, permite decompilar os binários, provendo uma estratégia sólida de fallback.
#Configuração no Visual Studio:
No Visual Studio o suporte ao Source Link está presente desde a versão 2019, mas por questões de performance, o download dos fontes vem desabilitado por padrão.

Como podemos ver, precisamos:
- Desabilitar a opção
Enable Just My Code
- Habilitar a opção
Enable Source Link support
, caso não esteja habilitada
Além disso, também é necessário habilitar os servidores de símbolos:

Se você quiser também habilitar a depuração dos assemblies do .NET, habilite o servidor de símbolos Microsoft Symbol Servers. Todos os binários do .NET têm Source Link habilitado desde a versão 2.1.
O Visual Studio tende a ficar bem lento com o download de símbolos habilitado, e pode ser interessante reabilitar a opção Enable Just My Code após terminar a investigação.
No Rider, isso não é necessário porque não há degradação perceptível de performance.
#Depurando um pacote
Uma vez com o Source Link habilitado, podemos depurar nosso código e arriscar um Step Into (F11). Assim que fizermos isso, o Visual Studio vai apresentar a seguinte mensagem:

Alguns detalhes que podemos notar na imagem acima:
- A IDE quer baixar o arquivo fonte MagicFactory.cs
- A fonte do download é
https://raw.githubusercontent.com
, indicando que o código fonte do pacote está hospedado no GitHub - Podemos confirmar o download a cada novo arquivo, ou informar para o Visual Studio não perguntar mais e sempre baixar os fontes
Expandindo os detalhes, podemos ver exatamente o link de onde onde será baixado o fonte. Note que o link inclui o hash do commit (68ead5c2b9ac0eeded3c19e6d3b591662bbcd1cc
) que gerou a versão do pacote NuGet que estamos tentando depurar:

Uma vez baixado o arquivo, podemos depurar o código normalmente:

Como podemos ver na imagem acima, durante nossa sessão de depuração, fomos capazes de explorar a implementação de um pacote NuGet acessando uma fonte C# que acaba de ser baixado do GitHub.
#Onde ficam salvos os fontes?
Depois de ver tudo isso funcionando, você pode estar se perguntando "mas e onde ficam salvos esses arquivos?".
Se conferirmos esse diretório, encontraremos cada um dos arquivos baixados, cada qual abaixo da mesma estrutura de diretórios em que estão inseridos no seu projeto original:

Espero que este artigo seja útil para você!