2011-04-27 2 views
2

Comment puis-je déboguer un scénario dans lequel une application Visual C++ 2010 SP1 ne peut pas charger complètement ses dépendances et quitte prématurément sans afficher son interface utilisateur?Comment déboguer des problèmes de chargement de dépendance statique?

Je suis intéressé par un bon guide pour Fusion Logs, dépendant de la marche, et débogueur à distance, si vous pensez qu'ils sont pertinents. Est-ce quelque chose qui peut être facilement vérifié avec WinDbg? Qu'en est-il de Process Explorer?

Est-il possible de lancer un processus sur une machine distante avec un débogueur distant connecté?

Serait-il possible de vérifier si une exécution correcte Visual C++ 2010 SP1 est installée?

Une limitation: l'application s'exécute correctement sur la boîte du développeur avec Visual Studio installé. Le problème ne peut être observé que sur une machine cible propre. Cela signifie que ce problème peut disparaître lors de l'installation d'une chaîne d'outils.

+1

http://stackoverflow.com/questions/255669/how-to-enable-assembly-bind-failure-logging-fusion-in-net – GregC

+0

http://msdn.microsoft.com/fr-fr/library /2ys11ead.aspx – GregC

Répondre

1

Est-il possible de lancer un processus sur une machine distante avec un débogueur distant connecté?

Bien sûr, vous pouvez. Par exemple, dans Visual Studio 2008, cliquez avec le bouton droit sur votre projet -> Propriétés -> Propriétés de configuration -> Débogage, sélectionnez "Débogueur Windows distant" dans la liste déroulante "Débogueur à lancer". Puis tapez le chemin complet de votre EXE sur votre machine distante et en fonction des arguments le cas échéant. Avant cela, vous devez d'abord exécuter le moniteur de débogage à distance sur votre machine distante. Copiez \ Program Files \ Microsoft Visual Studio 9.0 \ Common7 \ IDE \ Remote Debugger \ x86 (ou autre plate-forme) sur votre ordinateur distant et exécutez msvsmon.exe.

Généralement, si votre application se ferme en raison de l'absence de dépendance statique, vous pouvez utiliser Dependency Walker pour vérifier lequel est manquant.

2

Vérifiez si le commutateur/VERBOSE peut vous aider à déterminer la dépendance que l'éditeur de liens essaie de charger et d'exécuter lorsque vous générez et commencez à déboguer le code. Si vous utilisez le commutateur/VERBOSE, l'éditeur de liens écrira les messages dans la fenêtre de sortie sur les bibliothèques chargées par le lieur, qui sont également disponibles dans le journal de construction pour que vous puissiez y jeter un coup d'œil. De cette façon, s'il y a une erreur dans le chargement d'une dépendance particulière PEUT ÊTRE cela pourrait vous aider.

J'ai essayé/VERBOSE quand j'avais des erreurs de lien et connaissais quelle dépendance causait le problème dans mon code.

Référez-vous à http://msdn.microsoft.com/en-us/library/wdsk6as6(v=vs.80).aspx pour vérifier si cela peut vous aider.

4

Je vérifie toujours problème de dépendance dll par DependencyWalker puis en utilisant the Global Flags Editor gFlags.exe, dans l'onglet « Fichier image », la configuration de votre programme et cochez l'option « Afficher chargeur se mette ». Lorsque vos programmes s'exécutent, WinDbg.exe devrait générer beaucoup de messages de chargement de DLL, à partir d'eux, avec l'aide de dependencyWalker avec votre code source (si vous utilisez LoadLibrary), vous devriez être capable de trouver où va mal.

+1

Un autre vote pour "Afficher les accrochages du chargeur". Vous en apprendrez plus que ce que vous avez toujours voulu savoir sur la résolution de chargement des DLL. SxsTrace affichera également les détails du chargement DLL côte à côte sans débogueur, et révélera rapidement si les runtimes C sont manquants. –

+0

La référence à Dependency Walker devrait probablement être accompagnée d'un grand signe d'avertissement, qu'elle n'est plus fiable. Il n'a pas été mis à jour depuis des années et affiche à peu près des informations trompeuses pour n'importe quelle version de Windows 7 et plus. – IInspectable

Questions connexes