web-dev-qa-db-fra.com

Comment déboguer du code dans un paquet de nuget créé par moi

J'ai créé et installé un paquet de nugets dans une autre solution, mais je dois maintenant déboguer le code du paquet lorsqu'il est appelé depuis ma nouvelle solution.

J'ai essayé de référencer la solution du package mais ne fonctionne pas.

J'utilise Visual Studio 2013.

24
Yatiac

Pour déboguer une DLL, vous avez besoin du fichier de symboles (.pdb). Si vous construisez votre projet dans la configuration debug, vous verrez que ces fichiers sont générés et placés dans le dossier de sortie de la construction.

Visual studio charge ces fichiers de symboles à différents endroits comme décrit ici . Mais le moyen le plus simple de déboguer vos paquets Nuget est de placer les fichiers .pdb des paquets dans le dossier de sortie de la construction du projet que vous voulez déboguer.


Si le code que vous essayez de déboguer est classé comme code non-utilisateur, vous devez décocherJust My Code dans les options de débogage.

enter image description here

Code utilisateur et non-utilisateur

Pour distinguer le code utilisateur du code non utilisateur, Just My Code examine les fichiers de symboles (.pdb) et les optimisations de programme. Le débogueur considère le code comme un code non utilisateur lorsque le fichier binaire est optimisé ou lorsque le fichier .pdb n'est pas disponible.

Trois attributs affectent également ce que le débogueur considère comme étant mon code:

  • DebuggerNonUserCodeAttribute indique au débogueur que le code auquel il est appliqué n'est pas mon code.
  • DebuggerHiddenAttribute masque le code du débogueur, même si Just My Code est désactivé.
  • DebuggerStepThroughAttribute indique au débogueur de parcourir le code auquel il est appliqué, plutôt que d'entrer dans le code.

Tout autre code est considéré comme un code d'utilisateur.

24
NtFreX

Ce travail a été obtenu en construisant le projet à partir du paquet Nuget en mode débogage, puis en copiant simplement les fichiers pdb et dll du répertoire de débogage vers l'emplacement de la dug du fichier Nuget dans le projet dans lequel je voulais le déboguer.

par exemple copie de

ExternalNugetPackage\bin\Debug \

à

Répertoire de projet\Packages\ExternalNugetPackage.1.0.0\lib\net4.5

7
ds4940

Comment déboguer du code dans un paquet de nuget créé par moi

Tout comme NtFreX a répondu, " Pour déboguer une DLL, vous avez besoin du fichier de symbole correspondant (.pdb). ". Vous pouvez donc créer des packages de symboles qui permettent aux utilisateurs d’intégrer le code de votre package dans le débogueur Visual Studio.

La façon dont nous le faisons (et fonctionne):

  1. Créez "*. Symbols.nupkg".
  2. Déployez le package de symboles sur le serveur Symbol Source.
  3. Configurez IDE. Les utilisateurs de packages peuvent ajouter https://nuget.smbsrc.net/ à vos sources de symboles dans Visual Studio.
  4. Ajoutez la bibliothèque requise pour projeter à l’aide de NuGet (à partir de notre serveur SymbolSource).
  5. Déboguer.

Pour plus d'informations, vous pouvez vous référer à Création de packages de symboles .

Si ces packages ne conviennent pas à la publication sur NuGet Gallery/SymbolSource, vous pouvez placer les fichiers * .nupkg et * .symbols.nupkg sur un disque local.

Remarque: Ajoutez le code source aux fichiers sources de débogage pour la solution qui référence le package (cliquez avec le bouton droit de la souris sur la solution, sélectionnez Propriétés ... Propriétés communes ... Fichiers sources de débogage et ajoutez le répertoire source racine pour la référence binaire pertinente).

7
Leo Liu-MSFT

Pour Visual Studio 2017 et le code source de votre paquet nuget hébergé sur GitHub ou BitBucket:

1) Activer les informations de débogage complètes dans le fichier * .csproj:

  <PropertyGroup Condition="'$(Configuration)'=='Debug'">
    <DebugType>full</DebugType>
    <DebugSymbols>true</DebugSymbols>
  </PropertyGroup>

ou cliquez avec le bouton droit de la souris sur les propriétés du projet, sur la construction, sur les avancées, sur les informations de débogage en sortie et définissez ce paramètre sur Full.

2) Pour activer le téléchargement et le passage à la source automatiques de votre dll, ajoutez nuget package SourceLink.Create.CommandLine à votre projet ou ajoutez-le manuellement dans un fichier * .csproj:

  <ItemGroup>
    <PackageReference Include="SourceLink.Create.CommandLine" Version="2.8.2" PrivateAssets="All" /> 
  </ItemGroup>

Plus d'infos ici

3) Dans Outils - Options - Débogage, désactivez "Activer uniquement mon code" et activez "Supprimer l'optimisation JIT lors du chargement de module (géré uniquement)".

Après cela, vous devriez pouvoir entrer dans les méthodes de votre DLL de paquetage Nuget.

4
xhafan