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?".
~\AppData\Local\SourceServer
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ê!