7
votes

Utiliser Windbg de Visual Studio

est-il possible d'utiliser des commandes WINDBG comme ! verrouille et .loadby sos mscorwks dans la fenêtre de commande Visual Studio (dans une session de débogage)? J'ai remarqué que je peux utiliser par exemple k pour imprimer une trace de pile, alors je me demandais s'il y a un moyen d'accéder aux autres commandes.


0 commentaires

3 Réponses :


8
votes

Oui, vous pouvez le faire.

  1. Joindre Visual Studio 2008 à votre processus de débogage.
  2. pause à un code.
  3. Aller à la fenêtre immédiate
  4. Type ! Charger SOS
  5. Vous êtes maintenant libre d'utiliser l'une des commandes WINDBG comme ! EeHeap ,! Dumpheap

    Il y a quelques conditions. Vous devez activer le débogage du code non géré dans vos propriétés du projet. Normalement dans la version 64 bits Studio ne prend pas en charge cela.

    Amusez-vous.


5 commentaires

Cool, merci pour ça. Avez-vous une idée si je peux avoir accès aux appels WINDBG non gérés tels que des serrures ou analysez-vous?


@NGOOZEFFF: Je pense que seules les commandes SOS sont possibles ici! Quelqu'un est corrigé-moi si je me trompe


Désolé d'être nitpicking ici, mais ce ne sont pas des commandes WINDBG, mais des commandes SOS. Malheureusement, les commandes Windbg régulières ne sont pas disponibles auprès de VS Afaik, ce qui le rend un peu plus difficile à utiliser SOS. En outre, vs ne prend pas en charge toutes les interfaces IDEBUGCIPLIENT nécessaires, la production de SOS est donc un peu bruyante dans vs.


Brian a raison, la réponse stricte à la question est non. SOS n'est pas windbg. En outre, WINDBG a une version x64, alors que SOS n'a pas, c'est-à-dire si vous souhaitez déboguer des applications x64 sans les recompiler dans 32 bits, puis Windbg, à l'extérieur vs est le seul moyen d'aller


! Charger SOS échoue sur VS2013: "identifiant" charge "est indéfini".



4
votes

Visual Studio 2012 a le transport "Mode utilisateur Windows Débogueur" dans la boîte de dialogue "Joindre à Process". Cela vous permet d'utiliser des commandes WINDBG dans la fenêtre immédiate.

Source: Utilisez le moteur WINDBG dans le débogage de mode utilisateur Visual Studio


4 commentaires

J'ai Visual Studio 2012 Professional (Mise à jour 4) installée. Cependant, le transbugger Windows Mode Windows Mode ne s'affiche pas pour moi. Certaines sources affingent que vous devez installer le WDK au-dessus d'une installation VS, mais des informations fiables ne semblent pas être facilement disponibles. Alors, quelle est l'accord?


Du lien: Une autre mise en garde est que vous devez actuellement installer le WDK au-dessus de Visual Studio 11 pour obtenir l'intégration du débogueur. Cela n'a pas fonctionné pour moi non plus avant d'installer le WDK.


Je peux confirmer que l'installation de Windows 8.0 WDK en haut de Visual Studio a également installé l'intégration Visual Studio. Je peux maintenant choisir Windows Mode utilisateur du débogueur comme le transport (ou choisissez un autre débogueur d'un projet de débogueur ). Il semble fonctionner de manière fiable, même s'il est lent pour moi. Certaines fonctionnalités du débogueur vs sont manquantes (par exemple, traces de traces ), tandis que d'autres ont changé (par exemple, une syntaxe différente pour définir les points d'arrêt de fonction). Les puissantes commandes de rallonge Windbg comme ! Gérer ou ! Les verrous sont maintenant disponibles auprès de la fenêtre VS GUI ( du débogueur Fenêtre immédiate ).


Remarque: Pour Visual Studio 2015, WDK 10 est requis pour le transport "Windows Mode User Debugger".



2
votes

À partir du kit de développement du pilote Windows (WDK) 8.0 Le débogueur Windows est intégré à Visual Studio (voir environnements de débogage ). L'installation du WDK au-dessus d'une installation Visual Studio permettra à un développeur de choisir un certain nombre de debuggers à partir de la boîte de dialogue Joindre à Process ou de définir le moteur de débogage dans le projet du débogueur d'un projet réglages. Cela a été vérifié pour Visual Studio 2012 et 2013. La manière dont j'ai lu le lien MSDN ci-dessus, cela devrait également fonctionner pour tout autre IDE pris en charge par le WDK 8.0 et supérieur.

Bien que Windbg offre beaucoup de commandes puissantes, il y a aussi des inconvénients. Cette liste n'est pas exhaustive et contient simplement ces problèmes que j'ai rencontrés:

  • ne peut pas attacher à plus d'un processus à la fois. Bien que non généralement un problème, cela est assez malheureux, si vous avez besoin de déboguer plus d'un processus à la fois. Le débogueur Visual Studio peut s'attacher à n'importe quel nombre de processus simultanément.
  • WINDBG n'utilisera pas les paramètres de symbole de votre IDE Visual Studio (testé sur VS 2012 Update 4). Bien que vous puissiez configurer l'IDE où chercher des symboles de débogage, Windbg n'honorera pas à ces paramètres. Windbg utilisera la variable d'environnement _nt_symbol_path et / ou le jeu de configuration via .sympath .
  • Syntaxe différente pour les points d'arrêt de fonction. Il s'agit d'une contrariété mineure, car vous ne pouvez pas utiliser la syntaxe de Visual Studio pour spécifier les points d'arrêt de fonction. Cela signifie également que les points d'arrêt de fonction sont ignorés qui ont été définis à l'aide de la syntaxe Visual Studio. Ce qui est plus ennuyeux, cependant, vous obtenez une boîte de dialogue d'avertissement pour chacun lors du lancement d'un débuteur.
  • Aucun support pour traces de trace . J'utilise de manière approfondie les traces de trace, pour insérer de manière inintolite la traçage dans un débuteur. Si vous utilisez également des points de trace, cela peut s'avérer plus qu'un ennui.

2 commentaires

WINDBG 'S BP Accepte une commande à exécuter lorsque le point de rupture est touché, vous pouvez donc imiter un point de trace. Par exemple, BP Combase! COSETERRORINFO "DT Combase! CERROROBJECT% EDX; G"


Avez-vous pu utiliser cette méthode avec VS 2017 et WDK (en particulier la version 1507+)? Débogage d'un processus en mode utilisateur à l'aide de la page Visual Studio indique "Cette fonctionnalité n'est pas disponible" pour cette combinaison, et lorsque j'ai essayé (après avoir changé la cible sur "localhost"), j'ai continué à obtenir un e_fail avec "impossible de se connecter / Opération non prise en charge "! J'essaie de m'assurer que ce n'est pas seulement un problème de configuration à ma fin.