Débogage du code .NET avec MS Symbol Server - VS n’affiche pas les valeurs des variables

StackOverflow https://stackoverflow.com/questions/294738

  •  08-07-2019
  •  | 
  •  

Question

Lorsque je débogue mon code de site Web ASP.NET en utilisant le symbole de débogage Microsoft pour .NET ..., je continue à avoir ce "résultat" idiot pour la plupart des variables lorsque je débogue le code de framework .NET (qui est bien sûr fourni par Microsoft Symbol Server, que j’ai dit à VS2008 de saisir les informations, de)

Cannot obtain value of local or argument 'cookie' as 
it is not available at this instruction pointer, possibly because 
it has been optimized away.

C'est comme si le code que j'utilise utilise un code compilé optimisé. Si tel est le cas, puis-je lui dire de ne pas optimiser? Je suis en configuration DEBUG. C'est très frustrant parce que je ne peux pas déboguer .. parce que je ne peux pas voir / récupérer les valeurs des variables locales alors que je fais défiler le code.

Des indices / pensées?

Était-ce utile?

La solution

Shawn Burke a décrit une méthode permettant de désactiver cette option sur son blog .

Créez tout d'abord un CMD capable de charger Visual Studio sans optimisation JIT.

set COMPLUS_ZapDisable=1
cd /d "%ProgramFiles%\Microsoft Visual Studio 9.0\Common7\ide\"
start devenv.exe
exit

Une fois dans votre projet Visual Studio, procédez comme suit:

1) Faites un clic droit sur votre fichier de projet et choisissez "Propriétés"

.

2) Choisissez l’option " Débogage " Cliquez sur l'onglet et décochez la case "Activer le processus d'hébergement Visual Studio"

.

3) Lancez votre application dans le débogueur.

Autres conseils

Pour une application .Net normale, vous pouvez désactiver l'utilisation des optimisations JIT avec un fichier .INI situé à côté du fichier binaire de départ. Voici un lien vers la façon dont cela est accompli

http: // blogs.msdn.com/jaredpar/archive/2008/08/29/disabling- jit-optimizations-while-debugging.aspx

Déboguer ASP.Net est cependant un peu différent et je ne sais pas si cela fonctionnera pour vous. Si vous déboguez localement en utilisant le serveur Web léger (Cassini), vous pouvez appliquer cette astuce à Cassini lui-même. Si vous déboguez directement sur un serveur Web à l’intérieur d’IIS, je ne sais pas comment faire fonctionner cette astuce, mais nous espérons que cela vous mènera dans la bonne direction.

Après de nombreuses recherches, j'ai trouvé un moyen de créer également ce "COMPLUS_ZapDisable". Cette technique fonctionne lors de la connexion à une application hébergée par IIS sous IIS7 / Windows 7 x64.

Dans mon cas, j'utilise des symboles construits par Reflector Pro, bien que je suppose que cela fonctionnera également pour les symboles Microsoft sur lesquels le PO s'est interrogé.

Le truc consiste à trouver le bon endroit pour définir cette variable d’environnement afin que votre w3wp.exe soit lancé avec ce paramètre activé. Pour ce faire, ajoutez une clé de chaîne appelée "COMPLUS_ZAPDISABLE". dans votre registre sous "HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ Environment". Définissez la valeur de la clé sur "1", ce qui devrait suffire. Ne le faites pas sur la production =)

Félicitations à Clive Tong, auteur de cet article de Red Gate, pour m'avoir orienté dans la bonne direction.

Le code du cadre .NET étant optimisé, vous ne pourrez pas afficher toutes les variables car elles n'existent probablement pas dans le code optimisé. Je suppose que vous essayez de déboguer à l'intérieur du framework .NET lui-même. Malheureusement, vous ne pouvez rien faire à ce sujet.

Enfin, cette solution a fonctionné pour moi lors de la connexion à l'aspnet_wp.exe Visual Studio 2008, .NET Framework 2.0: allez dans les propriétés du projet, dans l'onglet Construction, le bouton Avancé - > définissez les informations de débogage en sortie sur "complet". J'espère que cela aide quelqu'un.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top