Question

Je dois utiliser un composant tiers sans le code source.J'ai la version de la DLL et la libération fichier PDB.Nous allons l'appeler "CorporateComponent.dll'.Mon propre code crée des objets à partir de cette DLL et les appels de méthodes sur ces objets.

CorpObject o = new CorpObject();
Int32 result = o.DoSomethingLousy();

Pendant le débogage, la méthode 'DoSomethingLousy" lance une exception.Quel est le fichier PDB faire pour moi?Si elle fait quelque chose de gentil, comment puis-je être sûr que je suis en train de faire usage de celui-ci?

Était-ce utile?

La solution

Pour confirmer si vous êtes à l'aide de l'APB, CorporateComponent.pdb, lors du débogage dans l'IDE de Visual Studio examen de la fenêtre de sortie et recherchez la ligne indiquant que le CorporateComponent.dll est chargé et suivi de la chaîne Symbols loaded.

Pour illustrer à partir d'un projet de la mine:

The thread 0x6a0 has exited with code 0 (0x0).
The thread 0x1f78 has exited with code 0 (0x0).
'AvayaConfigurationService.vshost.exe' (Managed): Loaded 'C:\Development\Src\trunk\ntity\AvayaConfigurationService\AvayaConfigurationService\bin\Debug  \AvayaConfigurationService.exe', Symbols loaded.
'AvayaConfigurationService.vshost.exe' (Managed): Loaded 'C:\Development\Src\trunk\ntity\AvayaConfigurationService\AvayaConfigurationService\bin\Debug\IPOConfigService.dll', No symbols loaded.

Loaded 'C:\Development\src...\bin\Debug\AvayaConfigurationService.exe', Symbols loaded.

Cela indique que l'APB a été trouvé et chargé par l'IDE de débogueur.

Comme indiqué par d'autres Lors de l'examen de la pile des images au sein de votre application, vous devriez être en mesure de voir les symboles de la CorporateComponent.apb.Si vous n'avez pas le cas, alors peut-être que le tiers n'a pas d'inclure les informations de symbole de la libération APB construire.

Autres conseils

L'apb contient des informations le débogueur besoins afin de lire correctement la pile.Votre les traces de pile contiendra les numéros de ligne et les noms de symbole de la pile d'images à l'intérieur des modules pour lesquels vous avez de l'apb.

Je vais vous donner deux usages des exemples.La première est la réponse la plus évidente.La seconde explique la source indexés sur apb est.

1er exemple d'utilisation...

Selon convention d'appel et les optimisations du compilateur utilisé, il pourrait ne pas être possible pour le débogueur manuellement détendez-vous de la pile par l'intermédiaire d'un module pour lequel vous ne disposez pas d'un apb.Cela peut se produire avec certaines bibliothèques tierces et même pour certaines parties de l'OS.

Imaginez un scénario dans lequel vous rencontrer une violation d'accès à l'intérieur de l'OS de windows.La trace de la pile n'est pas vous détendre dans votre propre application parce que composant de système d'exploitation utilise une convention d'appel qui confond le débogueur.Si vous configurez votre chemin de symbole pour télécharger le public OS apb, puis il ya une bonne chance que la trace de la pile détendre dans votre application.Cela vous permet de voir exactement quels sont les arguments de votre propre code passé dans le système d'exploitation système d'appel.(et exemple similaire pour l'AV à l'intérieur d'un 3ème partie de la bibliothèque ou même à l'intérieur de votre propre code)

2ème exemple d'utilisation...

Apb ont une autre propriété intéressante - ils peuvent intégrer avec certains systèmes de contrôle de source à l'aide d'une fonctionnalité que microsoft appelle "source d'indexation".Une source indexés sur apb contient la source des commandes de contrôle, qui précisent comment extraire de la source de contrôle de l'exacte des versions de fichiers qui ont été utilisés pour construire le composant.Microsoft débogueurs comprendre comment exécuter les commandes pour extraire automatiquement les fichiers au cours d'une session de débogage.C'est une fonctionnalité puissante qui sauve le débogage egineer d'avoir à synchroniser manuellement un arbre source de la bonne étiquette pour une de construire.C'est surtout utile pour le débogage à distance des sessions et pour l'analyse de crash dumps post-mortem.

Les "outils de débogage pour windows" de l'installation (windbg) contient un document nommé srcsrv.doc qui fournit un exemple montrant comment utiliser srctool.exe pour déterminer les fichiers sources sont des sources indexées dans apb.

Pour répondre à votre question "comment savoir", les "modules" dans le débogueur peut vous dire quels modules ont un correspondant de l'apb.Dans windbg utiliser le "lml" de commande.Dans visual studio, sélectionnez les modules à partir de quelque part dans le débogage de menus.(désolé, je n'ai pas une version à jour de visual studio à portée de main)

L'APB est un fichier de base de données des cartes les instructions à leurs numéros de ligne dans le code d'origine ainsi, lorsque vous obtenez une trace de la pile, vous obtiendrez les numéros des lignes de code.Si c'est une DLL non managée ensuite le fichier PDB permettra également de vous donner les noms des fonctions dans la trace de la pile, alors que cette information est généralement disponible uniquement pour les fichiers Dll sans Pdb.

Le principal-je obtenir de l'apb est le nombre de lignes et de vrais noms de méthode pour les traces de pile.

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