2011-06-21 2 views
1

Une mauvaise version d'une DLL (MSVCR90d.dll au lieu de MSVCR90.dll) est utilisée pour l'opérateur de suppression, provoquant un plantage. Dans la pile d'appel, seul le nom de la DLL est affiché, pas leur chemin. Comment voir le chemin? Edit: Je construis en mode Release, pas en mode debug. Alors, pourquoi la DLL de débogage est-elle utilisée? J'ai vu le même problème signalé sur de nombreux autres sites, mais je n'ai pas trouvé de solution de travail. Hier, j'ai trouvé Dependency Walker que la DLL de débogage est en train d'être récupérée, donc j'ai renommé la DLL, puis la version a été récupérée dans Dependency Walker, et mon programme ne s'est pas crashé. Je n'ai rien changé aujourd'hui, mais le programme a recommencé à planter. Et quand je vois l'arbre de dépendant de dépendance, il montre MSVCR90d.dll (le debug dll) avec un point d'interrogation, disant qu'il n'a pas pu le trouver dans le chemin. Pourquoi ne peut-il pas ramasser la version dll? Aussi, je ne sais pas d'où la DLL de débogage est utilisée par le runtime.Microsoft Visual Studio: comment trouver l'emplacement de chargement d'une DLL?

+0

a fait, l'une des réponses pour vous? Si non, avez-vous trouvé une autre solution? Si oui, vous devriez le publier ici et l'accepter comme réponse. –

Répondre

0

Pour découvrir les détails d'un dll, vous pouvez utiliser DependencyWalker

Cependant, dans votre cas, je pense que d est d'être ajouté au nom de dll, probablement parce que vous créez une construction DEBUG, et pour cela DEBUG versions de toutes les dlls sont chargées.

Si vous choisissez de créer un RELEASE construire, vous n'auriez pas une d annexée à msvcr90.dll

+0

J'ai créé une version Release (avec les symboles de débogage activés), pas une version Debug. Je ne sais pas pourquoi la version de débogage de MSVCR90d.dll est ramassé. –

+0

Je pense que cela permettrait à VS d'utiliser aussi la version de débogage. Essayez une fois sans elle, et cela le confirmerait. Vous pouvez ensuite republier une nouvelle question ou la modifier en conséquence, pour obtenir une réponse appropriée. –

+0

Je viens d'essayer après avoir supprimé les options de débogage dans les paramètres du compilateur et de l'éditeur de liens, mais toujours confrontés au même problème. La DLL de débogage est utilisée et se bloque. –

0

Vous n'avez pas besoin de savoir chemin dll, vous devez comprendre pourquoi la version de débogage de l'opérateur de suppression est appelé . Peut-être que la constante _DEBUG est définie dans la configuration de la version.

1
  1. Vous pouvez les ajouter dans votre variable d'environnement PATH globale. Refer here
  2. Vous pouvez spécifier la DLL manuellement en cliquant avec le bouton droit sur la solution et en sélectionnant Ajouter une référence, puis naviguez jusqu'à la DLL particulière.
  3. Vous pouvez ajouter le chemin aux DLL aux paramètres des fichiers exécutables sous Outils> Options> Projets et Solutions> Répertoires VC++
+1

Je suis d'accord avec la réponse de @Ozair Kafray aussi !! – Jayesh

+0

Hey Jayesh, s'il vous plaît trouver ma question éditée avec plus de détails. J'ai ajouté une référence au répertoire contenant la Release dll, mais toujours pas de changement dans le comportement d'exécution, je ne sais pas d'où la DLL de débogage est récupérée, ou pourquoi la DLL de débogage est utilisée même, depuis que j'ai construit mon programme en mode de libération. –

+0

Il ne devrait pas choisir le mauvais normalement. Veuillez utiliser l'outil [Fiddler] (http://www.fiddler2.com/fiddler2/) pour analyser l'itinéraire de votre application Web .... – Jayesh