J'appelle une méthode dans Visual Studio et j'essaie de la déboguer en passant en revue la pile d'appels.
Certaines de ses lignes sont marquées "Code externe".
Qu'est-ce que cela veut dire exactement? Les méthodes d'un fichier .dll ont-elles été exécutées?
Question stupide; mais besoin d'une réponse définitive.
Ce sont les lignes où information de symbole n'est actuellement pas disponible pour Visual Studio Debugger
. En d'autres termes, Debugger
n'est pas en mesure de récupérer le code de la ligne exécutée.
J'ai écrit actuellement parce que les informations sur le symbole peuvent être téléchargées ou configurées.
Pour plus d'informations, vous pouvez lire ceci: Comment: spécifier des emplacements de symbole et un comportement de chargement
[Code externe] signifie qu'il n'y a pas d'informations de débogage disponibles pour cette dll.
Ce que vous pouvez faire est dans la fenêtre Call Stack
, cliquez avec le bouton droit de la souris. Ensuite, sélectionnez Show External Code
cela développera [Code externe] et vous montrera les modules appelés.
une fois que vous avez développé, vous verrez les dll appelées, vous pouvez obtenir les emplacements sur le disque en cliquant sur Symbol Load Information...
Cela ouvrira la boîte de dialogue qui montre les emplacements sur le disque
Si vous souhaitez déboguer ces fichiers externes, vous devez obtenir les fichiers .pdb
pour les dll et les placer dans le même dossier que .dll
.
cela devrait vous permettre de Load symbols
(menu dans la capture d'écran 2 ci-dessus Symbol Load Information
) et de lancer le débogage.
Plus d'informations sur l'obtention des fichiers .pdb ici.
Et voici un exemple réel de fichier .pdb EF en cours de génération
J'espère que cela vous fait gagner du temps.
La notation 'Code externe' fait référence à tout ce qui n'appartient pas à 'Mon code'.
C’est ce qui est décrit dans la documentation MSDN ici Comment: utiliser la fenêtre Pile d’appel
En code managé, par défaut. la fenêtre Pile d’appel masque les informations relatives au code non-utilisateur. > La notation suivante apparaît à la place des informations cachées.
<[Code externe]>
Le code non-utilisateur est tout code qui n'est pas "Mon code".
Your Code
est comme vous auriez pu penser tout ce que vous avez écrit vous-même. Donc, avec cette définition, tout ce qui appartient aux dll externes est omis dans la trace de la pile d'appels.
De plus, selon Comment: entrer dans juste mon code vous avez la possibilité de refuser le débogueur pour essayer de tracer du code non-utilisateur.
Ici vous trouverez l'explication de ce que user code
est réellement:
Pour distinguer le code utilisateur du code non utilisateur, Just My Code examine trois choses: les fichiers DBG, les fichiers PDB et l'optimisation.
Ces lignes ne sont pas référencées par les symboles de débogage que vous avez chargés.
Ce code peut faire partie d'une DLL externe ou d'un code natif à l'intérieur du CLR. Si vous savez de quel module il s'agit et que vous disposez des symboles de débogage, vous pouvez les charger manuellement dans Visual Studio.
Méthodes pour lesquelles vous n'avez pas de code/symbole. Comme le framework .NET ou les assemblys tiers.
vous pouvez utiliser l'action Attacher au processus du menu Débogage pour déboguer une instance en cours d'exécution de votre application hôte. (Le processus en cours contient les fichiers de symboles de débogage .pdb).