Question

Est-il possible de déboguer un processus à distance a commencé en dehors VB6?

L'application est une application VB6 avec quelques ressources dll / ocx. Je cherche à installer un déploiement ClickOnce, en utilisant COM d'enregistrement-gratuit, de l'application VB6 mais reçois des erreurs lors de l'exécution.

Ma compréhension de la façon dont VB6 COM réoriente registerations signifiera probablement que cela est impossible, mais je pensais que quelqu'un pourrait avoir une meilleure idée.

Était-ce utile?

La solution

Je crois que lors du débogage dans VB6, il ne se fixe pas à une place binaire en cours d'exécution, mais interprète le code au sein de son propre processus. Voilà pourquoi les API Gestionnaire des tâches et Win32 montrent VB6.exe que l'application en cours d'exécution lors du débogage.

De plus comme vous le dites, VB6 parfois court-circuit appels aux bibliothèques COM afin interceptant ces appels n'est pas toujours possible.

Vous allez probablement devoir recourir à l'exploitation intelligente (c.-à-enregistrer les valeurs des variables autour des points où les erreurs que vous obtenez se produisent dans l'espoir de localiser la ligne de code, il se produit sur et / ou l'état des variables pertinentes.)

Bonne chance

Autres conseils

Pour soutenir Darryl réponse suggérant Windbg - est ici une 2006 de blog par un gars de Microsoft sur l'utilisation Windbg avec VB6 et 2004 blog par un autre Microsoft gars avec une brève introduction à Windbg.

EDIT: Juste pour le rendre totalement clair. Windbg est un débogueur autonome gratuit de Microsoft. Compilez votre Exes VB6, DLL et OCX en code natif avec des symboles (créer des fichiers PDB) et vous pourrez déboguer votre application ClickOnce.

extrait clé du blog:

  

Si vous avez un accès limité à la machine de serveur, vous pouvez alors utiliser la   de débogage à distance de WinDbg. Joindre une copie de WinDbg au   processus de la manière habituelle, puis tourner à un serveur de débogage   (Consultez .server dans l'aide WinDbg). Vous pouvez ensuite s'y connecter   à distance dans le menu Fichier de WinDbg. Ce sera comme être   là, sauf l'absence de bruit des ventilateurs de salle de serveur. Quand   mise au point d'une télécommande, votre copie de WinDbg est juste un terminal très intelligent   si toutes les extensions, les symboles et ainsi de suite doivent être sur le serveur distant.   Vous définissez cette la même manière exacte pour toute DLL, VB6 ou .NET.

     

Les symboles de votre appareil ne se charge pas jusqu'à ce que votre composant   et donc vous devez laisser le serveur au moins aussi longtemps. Tu peux mettre   une pause au début de votre code VB si vous voulez arrêter le débogueur   ce point, mais si vous le faites, rappelez-vous qu'il arrêtera là chaque fois que   par le code. Supposons que vous laissez courir et effraction.   Si vous listez les symboles chargés pour votre module avec « x MyModule! * »   alors vous verrez toutes vos fonctions, ainsi que beaucoup de symboles   livré là-dedans pour vous. VB ajoute des interfaces et des symboles tout à fait   sans vergogne, mais vous avez besoin généralement pas à se soucier de ceux-ci. Un   chose qui va probablement regarder étrange est que toute la classe / syntaxe de la méthode   avec la convention de double du côlon C de la place du sympathique petit   point. WinDbg ne comprend pas que VB est différent et il est traité   comme tout DLL avec des symboles.

     

A partir de là, vous pouvez définir des points d'arrêt de la manière habituelle (pb, etc.) et l'étape   par le code. Vous pouvez également ouvrir des modules de code source VB et ensemble   avec les points d'arrêt F9 bien que les extensions de fichier VB ne sont pas   le menu déroulant de type de fichier source. Parcourant le code est révélateur   mais peut-être si vous ne l'avez pas vu un peu inquiétant que le code VB   génère pour vous avant. Vous serez par l'assembleur stepping   et il y a beaucoup de COM goo là-dedans. HRESULTS se vérifier beaucoup.   Vous aurez probablement besoin de se référer à la source souvent au travail où   vous êtes, car il faut un peu de pratique pour être en mesure de savoir ce que le   code source ressemblait. Des variantes sont particulièrement difficiles parce que   VB fait beaucoup de travail là-bas pour vous et ce qui ressemble à simple   l'équation peut entraîner beaucoup de code. code optimisé est même   plus difficile parce que l'ordre d'exécution est souvent très différent de   ce que vous pourriez attendre et il est plus difficile que d'habitude de voir les données.

     

Les données ne sont pas faciles à obtenir à cette façon. Quand vous regardez les variables locales   (Dv est la commande), vous pouvez voir que les variables sont simplement énumérées   comme éclipsée ce qui signifie que la mémoire est utilisée pour quelque chose   d'autre et au sein de la durée de vie de fonction ou que le nom n'est pas   unique dans ce contexte. Énumérations montrent comme des entiers ou des positions longues et   objets montrent que des pointeurs. En fait, ils étaient toujours exactement cela, mais   le VB IDE cache que de vous. chaînes VB sont COM BSTR (et   en conséquence Unicode) sous les couvertures et les tableaux d'octetssont vraiment omble chevalier   tableaux. Vous pourriez être surpris de découvrir que les chaînes VB sont Unicode   comme VB semble avoir aucun support pour quoi que ce soit, mais ANSI. C'est   parce que le moteur était Ruby forme que ANSI. Le temps d'exécution convertit le   Les chaînes Unicode à ANSI pour les appels API Ruby et bien qu'il existe des moyens   passer Unicode si vous voulez.

     

Tu ne vas pas être en mesure d'obtenir au Err, App ou objets d'imprimante   puisque vous devrez passer par beaucoup d'internes et complètement   structures en situation irrégulière pour les atteindre. Même si vous pouvez y arriver,   ils seraient simplement des données brutes sans les fonctions accesseurs que vous   utiliser dans VB. Si vous avez besoin de regarder l'un de ces champs, votre meilleur pari   est d'inclure du code de débogage dans le code source pour copier leurs valeurs   quelque part que vous pouvez obtenir à.

     

Vous pouvez intervenir pour l'exécution VB si vous voulez, mais il ne sera probablement pas   très révélateur si vous essayez de déboguer votre application. Si tu fais,   vous remarquerez que les internes de VB sont très influencés COM. le   influence était en fait deux sens depuis quelques idées COM provenaient de VB   à l'origine.

     

Vous pouvez voir des exceptions lors de l'exécution de votre code. référence null   exceptions (à savoir déréférencer un pointeur nul) ne sont pas rares ou   quoi que ce soit à craindre. Ils apparaissent comme première chance C000005   exceptions avec 0 ou presque 0 adresse. Le temps d'exécution va parfois faire   que, si les objets sont fixés à rien, mais qui est sûr parce que la   seules valeurs possibles sont nulles ou une valeur valide. Vous verrez aussi   exceptions si votre code dans les collections ne lookups et la valeur est   pas ici. Parce que les exceptions sont maintenant si cher, vous voulez probablement   pour éviter de faire cela si vous le pouvez. Une autre exception que vous voulez   souvent voir est c000008f. Si vous regardez le nombre vers le haut puis vous trouverez   qu'il est un point flottant exception résultat inexact. Il est utilisé dans un   sens différent ici - puisque nous ne générons pas à virgule flottante réel   exceptions résultat inexactes, ils peuvent en toute sécurité être jetés pour indiquer VB   erreurs du type trappable normale.

     

Débogage et se bloque dans les composants accidents VB se fait très bien dans la   même manière que tout autre composant non géré, mais il est juste un peu   plus difficile en raison des compilations décrites ci-dessus. Si vous devez essayer   le débogage du code VB de cette façon, je recommande fortement que vous commencez   sur un « Bonjour tout le monde » application et travailler votre chemin. Toutes les choses   qui peut VB une langue facile à coder en faire une terrible langue   débogage.

Avez-vous essayé windbg ? Assurez-vous que vous avez des fichiers pdb pour le projet.

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