Aujourd'hui, je déboguais une application dans mon travail. J'ai procédé à la définition d'un point d'arrêt dans l'un de mes blocs catch afin d'inspecter une exception avec plus de détails.
La fenêtre modale View Detail
s'ouvre normalement, mais au lieu de me montrer les détails de l'exception, elle génère une erreur étrange, une erreur que je n'ai jamais eue, et je ne sais pas ce que cela signifie:
L'erreur dit:
Le nom '$ exception' n'existe pas dans le contexte actuel
Ceci est frustrant parce que je suis dans la portée du bloc de capture, donc je devrais être capable de voir mon exception.
Après avoir redémarré mon application, j'ai réussi à la déboguer parfaitement. C'était la seule fois (jusqu'à présent) j'ai eu cette erreur.
Est-ce que quelqu'un sait ce que cela signifie et comment puis-je résoudre ce problème (sans avoir à redémarrer l'application)?
NOTE: J'utilise Visual Studio 2012 Premium . Version 11.0.61030.00 Mise à jour 4
Essayez explicitement d'indiquer au compilateur comment importer la dll. Ex:
using System;
using System.Runtime.InteropServices;
namespace BitmapProcessingCs
{
public static class NativeMethods
{
[DllImport("BitmapProcessingCpp.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern void GenerateBitmap(IntPtr src, int dimension);
}
}
Consultez la bibliothèque de MSDN: https://msdn.Microsoft.com/en-us/library/ms164891.aspx
Selon eux, vous obtiendrez une exception si vous essayez d'évaluer un objet exception si aucune exception ne s'est produite. Mais, puisque vous êtes dans le bloc catch, une excption s'est produite ... Sans voir votre code, il est difficile de le deviner, mais est-il possible que plusieurs threads soient en cours d'exécution et que l'exception ait été consommée par un thread avant d'être gérée par un autre? Cela n'a pas vraiment de sens mais ça vaut la peine de regarder. Une option sûre (r) serait de vérifier que l’exception est nulle dans votre enregistreur avant d’essayer d’obtenir des détails. Il convient également de regarder: L’exception HttpRequestException contient une exception interne, qui pourrait être la source de votre référence null? Je ne fais que spéculer.
Quand j'ai vu cette erreur, j'obtenais également des erreurs "Impossible d'évaluer l'expression" dans le débogueur. Cela m'a conduit à ce billet de Rick Strahl qui disait que c'était un bogue dans la version originale de Visual Studio 2013.
Lorsque j'ai vérifié la machine sur laquelle je me trouvais, VS2013 était en fait sans aucune des mises à jour installées. L'installation des mises à jour a résolu le problème.
J'ai résolu le même problème dans ces étapes:
étape 1) Si vous programmez votre DLL personnalisé en C++ à l'aide de Visual studio, définissez le paramètre Common Language Runtime Support (/clr)
sur Common Language Runtime Support (/clr)
dans la page de propriétés de votre projet.
étape 2) Pour utiliser la décélération dans le fichier .h
, utilisez le mot clé __declspec(dllexport)
comme ci-dessous:
__declspec(dllexport) double Sub(int a,int b);
étape 3) Créez et exportez le fichier DLL, puis utilisez le logiciel Dependency Walker pour obtenir votre fonction EntryPoint .
step4) Import DLL fichier Dans le projet C #, définissez EntryPoint et CallingConvention variable comme ci-dessous:
[DllImport("custom.dll", EntryPoint = "?Sub@@Y234NN@Z", CallingConvention = CallingConvention.Cdecl)]
public static extern double Sub(int a,int b);
Je suis d'accord avec trapsuutjies, il n'y a probablement aucune exception. Pour supprimer cette erreur, appuyez sur Ctrl + Alt + E, développez Assistant de débogage managé et décochez LoadFromContext.