web-dev-qa-db-fra.com

Que signifie "code externe" dans la pile d'appels?

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.

23
Simon Kiely

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

13
Tigran

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

enter image description here

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

enter image description here

Cela ouvrira la boîte de dialogue qui montre les emplacements sur le disque

enter image description here

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.

28
Matas Vaitkevicius

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.

4
marc wellman

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.

2
Polynomial

Méthodes pour lesquelles vous n'avez pas de code/symbole. Comme le framework .NET ou les assemblys tiers.

0
Wolfgang Ziegler

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

0
Aghilas Yakoub