Frage

Ist es möglich, aus der Ferne zu debuggen ein Prozess außerhalb VB6 gestartet?

Die Anwendung ist eine VB6-Anwendung mit ganz wenigen dll / ocx Ressourcen. Ich versuche, eine Clickonce-Bereitstellung einrichten, Eintragungsfrei COM verwenden, der VB6 app aber wurden Fehler bekommen, wenn sie ausgeführt wird.

Mein Verständnis für die Art und Weise, dass VB6 COM registerations Umleitungen bedeutet wahrscheinlich, dass dies nicht möglich ist, aber ich dachte, es könnte jemand eine bessere Idee.

War es hilfreich?

Lösung

Ich glaube, dass, wenn in VB6 debuggen, es nicht zu einem laufenden binären nicht anhängen, sondern interpretiert den Code innerhalb seiner eigenen Prozess. Aus diesem Grunde ist der Task-Manager und Win32-APIs VB6.exe als Lauf App zeigt beim Debuggen.

Auch wie Sie sagen, VB6 manchmal Kurzschlüsse ruft COM-Bibliotheken so diese Anrufe abfangen ist nicht immer möglich.

Sie werden wahrscheinlich auf intelligente Protokollierung zurückgreifen müssen (dh log die Werte der Variablen um die Punkte, an denen die Fehler, Sie werden immer in der Hoffnung, Lokalisieren der Codezeile auftreten es auf auftritt, und / oder der Staat von relevanten Variablen.)

Viel Glück

Andere Tipps

Um Darryl Antwort zu unterstützen was darauf hindeutet, Windbg - hier ist ein 2006 Blog-Post von einem Microsoft-Mann über die Verwendung von WinDbg mit VB6 und 2004 Blog-Post von einem anderen Microsoft Mann mit einer kurzen Einführung in Windbg.

EDIT: Nur um es ganz klar. Windbg ist ein kostenloser Standalone-Debugger von Microsoft. Stellen Sie sich Ihren VB6 EXE-Dateien, DLLs und OCX in nativen Code mit Symbolen (erstellen PDB-Dateien), und Sie werden Ihre Clickonce-Anwendung debuggen.

Key Auszug aus dem Blog:

  

Wenn Sie nur begrenzten Zugang zu dem Server-Rechner haben, dann können Sie mit der   Remote-Debugging von WinDbg. Fügen Sie eine Kopie von WinDbg auf die   Prozess in der üblichen Weise und es dann wiederum in einem Debug-Server   (Check out .server in der WinDbg-Hilfe). Anschließend können Sie mit ihm verbinden   entfernt von dem Datei-Menü von WinDbg. Es ist genau wie sein   es außer für den Mangel an Lärm von den Server-Raum-Fans. Wann   Debuggen von einem entfernten, Ihre Kopie von WinDbg ist nur ein sehr intelligentes Terminal   so dass alle Erweiterungen, Symbole usw. haben auf dem Remote-Server sein.   Sie setzen diese genau die gleiche Art und Weise für jede DLL, VB6 oder .NET-up.

     

Die Symbole für die Komponente wird nicht geladen, bis die Komponente tut   und so müssen Sie den Server laufen zumindest so lange lassen. Du kannst Geben   eine Pause in früh in Ihrem Code VB wenn Sie den Debugger stoppen an   dieser Punkt aber wenn Sie das tun, denken Sie daran, dass es dort jedes Mal zu stoppen   durch den Code. Nehmen wir an, dass Sie laufen lassen und dann brechen in.   Wenn Sie Liste der geladenen Symbole für das Modul mit „x MyModule! *“   dann werden Sie alle Ihre Funktionen zusammen mit einer Menge von Symbolen sehen   dort für Sie gebündelt. VB fügt Schnittstellen und Symbole ganz   schamlos, aber Sie brauchen im Allgemeinen nicht über diejenigen zu kümmern. Ein   was wahrscheinlich seltsam aussehen wird, ist, dass alle Klasse / Methode Syntax   mit dem doppelten Doppelpunkt Konvention ++ C anstelle der freundlichen kleinen   Punkt. WinDbg verstehen nicht, dass VB anders ist und es behandelt wird   wie jede DLL mit Symbolen.

     

Von hier aus können Sie Stützpunkte in der üblichen Weise (bp etc) und Schritt gesetzt   durch Code. Sie können auch VB Quellcodemodule öffnen und Set   Haltepunkte in ihnen mit F9 obwohl die VB-Dateierweiterungen sind nicht in   die Quelldateityp Dropdown-Liste. Schreiten durch den Code wird enthüllt   aber vielleicht ein wenig alarmierend sein, wenn Sie den Code nicht, dass VB gesehen haben   erzeugt für Sie vor. Sie werden durch den Assembler werden Schritt   und es gibt eine Menge von COM Schmiere drin. HRESULTS bekommen eine Menge geprüft.   Sie werden wahrscheinlich oft auf die Quelle verweisen müssen arbeiten, wo   Sie sind, da es ein wenig Übung in der Lage sein zu wissen, nimmt, was die   Quellcode aussah. Varianten sind besonders anspruchsvoll, weil   VB hat eine Menge Arbeit für Sie da und was aussieht wie eine einfache   Gleichung kann in einem sehr viel Code führen. Optimiertem Code ist sogar   oft die Ausführung schwieriger, weil die Reihenfolge ist sehr verschieden von   was man erwarten könnte, und es ist schwieriger als üblich, die Daten zu sehen.

     

Die Daten sind nicht einfach auf diese Weise zu erhalten. Wenn man sich auf der lokalen Variablen   (Dv ist der Befehl), dann können Sie sehen, dass Variablen einfach aufgelistet   als verdunkelte was bedeutet, dass der Speicher für etwas verwendet wird,   wie auch sonst in der Funktion Lebensdauer oder dass der Name nicht   in diesem Zusammenhang eindeutig. Aufzählungen zeigen, wie ganze Zahlen oder Long-Positionen und   Objekte zeigen als Zeiger. In der Tat, sie immer genau war, dass aber   die VB IDE versteckt, dass von Ihnen. VB Strings sind COM BSTRs (und   Unicode entsprechend) unter den Abdeckungen und Byte-Arrayswirklich char   Arrays. Sie werden überrascht sein, zu entdecken, dass VB Strings Unicode sind   als VB erscheint alles andere als ANSI keine Unterstützung zu haben. Das ist   weil die Ruby-bildet war Motor nur ANSI. Die Laufzeit-wandelt die   Unicode-Strings zu ANSI für Anrufe Ruby und API obwohl es Möglichkeiten gibt,   Unicode zu übergeben, wenn Sie wollen.

     

Sie werden in der Lage sein nicht an der Err, App oder Drucker Objekte zu erhalten   da Sie müßten durch eine Menge von internen gehen und vollständig   undokumentiert Strukturen auf sie zu bekommen. Auch wenn Sie es bekommen können,   sie würden nur Rohdaten ohne die Zugriffsfunktionen, die Sie   Verwendung in VB. Wenn Sie an einem dieser Felder suchen müssen, ist Ihre beste Wette   ihre Werte zu Debug-Code in den Quellcode einbetten zu kopieren   irgendwo, dass man sich bekommen.

     

Sie können sich in der VB-Laufzeit Schritt, wenn Sie wollen, aber es wird wahrscheinlich nicht sein   sehr aufschlussreich, wenn Sie Ihre Anwendung zu debuggen versuchen. Wenn Sie tun,   Sie werden feststellen, dass VB Interna sind sehr COM beeinflusst. Das   Einfluss war eigentlich zwei Art und Weise, da einige COM Ideen kamen von VB   ursprünglich.

     

Sie können Ausnahmen sehen, wenn Ihr Code ausgeführt wird. nULL-Verweis   Ausnahmen (das heißt einen Null-Zeiger Dereferenzierung) sind keine Seltenheit oder   nichts zu befürchten. Sie zeigen auf, als erste Chance C000005   Ausnahmen mit einer 0 oder nahezu 0-Adresse. Die Laufzeit wird manchmal tun   wenn es, dass Objekte auf nichts anderes als dass es sicher ist, weil die   nur mögliche Werte sind null oder ein gültiger Wert. Sie werden auch sehen   Ausnahmen, wenn Ihr Code tut Lookups in Sammlungen und der Wert ist   nicht dort. Da Ausnahmen jetzt so teuer sind, wollen Sie wahrscheinlich   tun, dass, wenn möglich zu vermeiden. Eine weitere Ausnahme, dass Sie   häufig zu sehen ist c000008f. Wenn Sie die Nummer nachschlagen dann werden Sie feststellen,   dass es sich um eine Gleitkomma ungenaues Ergebnis Ausnahme. Es wird in einem benutzten   andere Bedeutung hier - da wir erzeugen keine wirkliche Gleitkomma   ungenaue Ergebnis Ausnahmen, sie können sicher VB geworfen werden, um anzuzeigen,   Fehler der normalen auffangbar Art.

     

hängt und stürzt in VB Komponenten Debuggen ist sehr viel in das getan   genauso wie bei jedem anderen nicht verwalteten Komponente, aber es ist nur ein wenig   härter wegen der Compilations oben beschrieben. Wenn Sie versuchen,   VB-Code Debugging auf diese Weise, würde ich empfehlen, dass Sie beginnen   auf einer „Hallo Welt“ -Anwendung und arbeiten Sie Ihren Weg nach oben. All die Dinge   das kann eine einfache Sprache VB codieren es eine schreckliche Sprache machen   debug.

Haben Sie versucht, windbg ? Sie müssen nur sicherstellen Sie PDB-Dateien für das Projekt haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top