Pregunta

Es posible depurar de forma remota un proceso iniciado VB6 exterior?

La aplicación es una aplicación de VB6 con bastantes recursos DLL / OCX. Estoy intentando configurar una implementación de ClickOnce, mediante COM-Alta gratis, de la aplicación de VB6, pero he estado recibiendo errores cuando se ejecuta.

Mi comprensión de la forma en que VB6 redirige registerations COM probablemente quiere decir que esto no es posible, pero pensé que alguien podría tener una mejor idea.

¿Fue útil?

Solución

Creo que al depurar en Visual Basic 6, no se adhieren a un binario corriendo pero en vez interpreta el código dentro de su propio proceso. Esta es la razón por la API de Win32 administrador de tareas y muestran VB6.exe como la aplicación en ejecución durante la depuración.

Además, como se dice, a veces VB6 cortocircuitos llama a bibliotecas COM de modo que interceptan estas llamadas no siempre es posible.

Usted está probablemente va a tener que recurrir a la tala inteligente (es decir, registrar los valores de las variables en torno a los puntos en los que los errores que está recibiendo ocurren con la esperanza de localizar la línea de código que se produce en, y / o el estado de variables relevantes.)

Buena suerte

Otros consejos

Para apoyar la respuesta de Darryl sugiriendo WinDbg - aquí hay un 2006 entrada en el blog por un tipo sobre el uso de Microsoft WinDbg con VB6 y 2004 entrada de blog por otro Microsoft tipo con una breve introducción a WinDbg.

EDIT: Sólo para que quede totalmente claro. Windbg es un depurador independiente libre de Microsoft. Compilar su EXEs VB6, DLL y OCX en código nativo con símbolos (crear archivos PDB) y usted será capaz de depurar la aplicación ClickOnce.

extracto clave en el blog:

  

Si usted tiene acceso limitado a la máquina servidor, puede utilizar la   instalaciones de depuración remota de WinDbg. Adjuntar una copia de WinDBG a la   proceso de la manera habitual y luego convertirlo en un servidor de depuración   (Echa un vistazo a .server en la ayuda en WinDbg). A continuación, puede conectarse a él   remota desde el menú Archivo de WinDbg. Será como estar   allí excepto por la falta de ruido de los ventiladores de la sala de servidores. Cuando   la depuración de un mando a distancia, su copia de WinDbg es sólo un terminal muy elegante   por lo que todas las extensiones, los símbolos y así sucesivamente tienen que estar en el servidor remoto.   Esta opción se configura de la misma manera para cualquier DLL, Visual Basic 6 o .NET.

     

Los símbolos de su componente no se carga hasta que su componente hace   y lo que tiene que permitir que el servidor al menos ese tiempo. Puedes poner   una ruptura en principio de su código de VB si usted quiere parar el depurador en   ese punto, pero si lo hace, recuerde que se detendrá allí cada vez   a través del código. Vamos a suponer que se deja correr y luego entrar.   Si la lista de los símbolos cargados para su módulo con "x MyModule! *"   a continuación, verá todas sus funciones, junto con una gran cantidad de símbolos   liado allí para usted. VB agrega interfaces y símbolos bastante   sin vergüenza, pero que por lo general no tiene que preocuparse por ellos. Uno   Lo que probablemente se verá extraño es que toda la sintaxis de clase / método   con la convención de colon doble de C ++ en lugar de la pequeña amigable   punto. WinDbg no entiende que VB es diferente y es tratado   al igual que cualquier DLL con símbolos.

     

A partir de aquí, se puede establecer puntos de interrupción en la forma habitual (pb etc) y la etapa   a través de código. También puede abrir los módulos de código fuente de VB y conjunto   puntos de interrupción en ellas con F9 aunque las extensiones de archivos no están en VB   la fuente de tipo de archivo desplegable. Recorrer el código está revelando   pero podría ser un poco alarmante si no se ha visto que el código VB   genera para usted antes. Se le paso a paso por el ensamblador   y hay una gran cantidad de sustancia viscosa COM allí. HResults se comprueban mucho.   Es probable que necesite para hacer referencia a la fuente de frecuencia para calcular dónde   usted es ya que se necesita un poco de práctica para ser capaz de saber lo que el   código fuente parecía. Las variantes son especialmente difícil porque   VB hace mucho trabajo para usted allí y lo que parece ser un simple   ecuación puede dar lugar a una gran cantidad de código. El código optimizado es aún   más difícil debido a que la orden de ejecución es a menudo muy diferente de   lo que se podría esperar y es más difícil de lo habitual para ver los datos.

     

Los datos no es fácil de conseguir en esta forma. Cuando nos fijamos en las variables locales   (Dv es la orden), entonces usted puede ver que las variables son simplemente enumeran   como eclipsó lo que significa que la memoria está siendo utilizado para algo   más también en el curso de la vida o la función que el nombre no es   único en este contexto. Enumeraciones solo muestran como enteros o largos y   objetos muestran como punteros. De hecho, ellos siempre eran exactamente eso, pero   el IDE de VB que se esconde de usted. cadenas VB son COM BSTR (y   en consecuencia Unicode) bajo las sábanas y las matrices de bytesson realmente Char   matrices. Puede que se sorprenda al descubrir que las cadenas VB son Unicode   como VB parece no tener soporte para cualquier cosa menos ANSI. Es decir   debido a que el motor de forma Rubí fue sólo ANSI. El tiempo de ejecución convierte la   cadenas Unicode a ANSI para Ruby y API llamadas aunque hay maneras   para pasar Unicode si lo desea.

     

No vas a ser capaz de obtener en el Err, aplicación u objetos de impresora   ya que tendría que pasar por un montón de interior y completamente   estructuras indocumentados a llegar a ellos. Incluso si se pudiera llegar hasta allí,   que serían sólo los datos en bruto sin las funciones de acceso que   utilizar en VB. Si usted tiene que mirar a cualquiera de esos campos, la mejor opción   es incorporarlos depurar el código en el código fuente para copiar sus valores a   en alguna parte que se puede conseguir en.

     

Se puede intervenir al tiempo de ejecución de VB si quieres, pero probablemente no será   muy revelador si usted está tratando de depurar la aplicación. Si lo haces,   notará que internos de VB están influenciados muy COM. los   influencia era en realidad dos vías ya algunas ideas COM vinieron de VB   originalmente.

     

Es posible que vea las excepciones cuando se ejecuta el código. referencia nula   excepciones (es decir, eliminación de referencias a un puntero nulo) no son poco comunes o   nada de qué preocuparse. Ellos se muestran como primera oportunidad C000005   excepciones con una dirección de 0 o casi 0. El tiempo de ejecución a veces hacer   que si hay objetos fijados a nada más que lo que es seguro porque la   únicos valores posibles son nulo o un valor válido. También verá   excepciones si su código hace búsquedas en colecciones y el valor es   no ahí. Porque las excepciones son ahora tan caro, es probable que desee   para evitar hacer que si se puede. Otra excepción que se quiere   comúnmente ver es c000008f. Si se mira el número hasta entonces encontrará   que es un punto flotante excepción resultado inexacto. Se utiliza en una   diferente significado aquí - ya que no generamos real en coma flotante   excepciones resultados inexactos, que con seguridad se pueden tirar para indicar VB   errores del tipo que puede atraparse normales.

     

Depuración de caidas o bloqueos en los componentes de VB se hace mucho en el   misma manera que con cualquier otro componente no administrado, pero es sólo un poco   más difícil a causa de las compilaciones descritos anteriormente. Si usted tiene que tratar   depuración de código VB esta manera, no te recomiendo que comience   en una aplicación "Hola mundo" y su forma de trabajo. Todas las cosas   que puede VB un lenguaje fácil de codificar en que sea un terrible lenguaje para   depuración.

¿Ha tratado windbg ? Sólo asegúrese de que tiene los archivos PDB para el proyecto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top