2009-09-30 20 views
10

Utilisation de Visual Studio 2008 SP1 et d'un projet VB.NET; J'ai un code dans lequel je ne peux pas intervenir. La fenêtre Immédiat affiche le message "Passer la méthode sans symboles 'Some.Namespace.Here'"Survoler la méthode sans symboles - Comment intervenir?

Comment puis-je m'assurer que la méthode a toujours des symboles ?! Je dois entrer dans chaque ligne de code. Je suis en appuyant sur F8 (qui est "Step Into" dans VS2008, de la mémoire, je pense qu'il était F11 dans VS2005). Ce débogueur m'a toujours confondu: Sur les pages de propriétés de niveau Solution, je vois une liste déroulante de configuration avec 4 valeurs: Actif (Débogage), Déboguer, Libérer, Toutes les configurations. - actuellement défini sur "Active (Debug)" Au niveau du projet, je vois une liste déroulante de configuration avec 2 valeurs: Debug, Release. - actuellement défini sur "Debug"

Répondre

0

Si l'espace de noms en question est une DLL tierce qui n'est pas fournie avec les symboles (fichier pdb), cela se produit. Pour "entrer" dans le fichier de symboles est nécessaire.

Si c'est votre propre code, il vous suffit de vérifier que vos fichiers de symboles existent. L'avoir mis au débogage au niveau du projet devrait le faire.

+1

Oui, c'est mon propre code, et je l'ai mis à "Active (Debug)" au niveau du projet (et aussi au niveau de la solution, comme décrit dans ma question initiale). Je peux voir les fichiers .pdb, en fait je les ai supprimés manuellement et recompilés à nouveau afin qu'ils soient produits à nouveau. Je m'attends à ce que les deux méthodes frm.Show() et frm.Focus() passent à l'événement frm_Activated, car j'appuie sur F8, mais cela n'arrive PAS. Je dois mettre un point de rupture manuellement dans cet événement. – joedotnot

22

Je sais que c'est une vieille question, mais utilisez-vous peut-être la fonctionnalité de rendement dans une méthode qui renvoie un IEnumerable?

Par exemple (pièce):

public IEnumerable<object> GetObjects(IEnumerable<object> objects) 
{ 
    foreach(var obj in objects) 
     yield return obj; 
} 

je rencontre dans mes tests unitaires souvent, mais en raison de l'évaluation paresseuse, les déclarations de rendement ne sont pas exécutées jusqu'à ce qu'il soit nécessaire. Une façon de forcer l'énumération est de lier un .ToList() à l'appel par exemple, bien que vous ne vouliez pas le faire de façon permanente à moins que l'appel ne soit un test pour une fonctionnalité où l'énumération elle-même n'est pas importante.

fait donc ce qui suit devrait donner lieu à l'énumération:

GetObjects(new List<object>()).ToList(); 

En bref, si vous appelez une méthode qui nécessite l'énumération, mais le résultat n'énumèrent, vous obtiendrez cette erreur dans la sortie. Cela peut également arriver avec les instructions LINQ, comme .Sélectionner. Edit: Je n'ai pas remarqué que c'était un projet VB.NET, mais je suis assez sûr que le principe est toujours là.

4

Je suis tombé sur le même problème exact dans Visual Studio 2010. Je tenterais d'entrer dans la source .NET Framework, Visual Studio l'écraserait, la fenêtre de sortie indiquerait qu'il ne pouvait pas entrer dans le fichier de symboles n'était pas chargé mais quand je regardais la fenêtre des modules, je voyais que le fichier de symboles correspondant était en fait chargé.

Le problème était que le fichier de symboles .NET était chargé mais qu'il ne s'agissait pas du fichier de symboles .NET avec les informations de source incluses. Le serveur de symboles publics de Microsoft au http://referencesource.microsoft.com/symbols contient des symboles avec des informations de source incluses. Le serveur de symboles publics de Microsoft au http://msdl.microsoft.com/download/symbols contient des symboles sans information source.

Une solution consiste à définir _NT_SYMBOL_PATH correctement afin qu'il saisisse les symboles .NET Framework de http://referencesource.microsoft.com/symbols s'ils existent et de http://msdl.microsoft.com/download/symbols sinon.Quelque chose comme ceci fonctionnerait:

_NT_SYMBOL_PATH = SRV * d: \ SymbolsCache * http: //referencesource.microsoft.com/symbols; SRV * d: \ SymbolsCache * http: //msdl.microsoft.com/download/ symboles

Ce _NT_SYMBOL_PATH fera en sorte que le débogueur recherche d'abord des symboles avec des informations sources, puis s'il n'y en a aucun, il recevra les symboles sans lui. Lorsque Visual Studio a un fichier de symboles avec les informations de la source, il peut entrer dans ce code.