Español

Problema: Resultados inesperados al utilizar el depurador de Visual Basic

Descripción

Al depurar una DLL de Visual Basic, se produce uno de los siguientes problemas:

- El mapa de bits definido en la implementación de ICommand no aparece en la barra de herramientas mientras el modo de depuración está activado.
- El intento de QueryInterface en una interfaz válida falla.
- Se devuelve un error al ejecutar IFeatureClass::Select against SDE data.
- ArcMap deja de funcionar en el modo de depuración.

Causa

Cuando la aplicación se ejecuta en el modo de depuración, Visual Basic intercambia el CLSID del componente y ArcMap carga VB6Debug.dll en la memoria en lugar de en el componente. El depurador reenvía las solicitudes a los proyectos de ActiveX DLL, lo cual permite al usuario depurar de forma interactiva con Visual Basic. Como VB6Debug.dll se está ejecutando en un espacio de proceso distinto al de ArcMap, se requiere un código de serialización especial para pasar objetos entre límites. Esta serialización especial es la causa de los problemas de depuración.

Solución o solución alternativa

  • Utilice los add-ins ESRI Error Handler Generator y ESRI Line Number Generator desde ArcObjectsOnline cuando cree la aplicación. Consulte el vínculo de la Información relacionada que aparece a continuación.
  • Depure la aplicación de Visual Basic con el depurador de C++.
     
    Para depurar código de ArcObjects escrito en Visual Basic, utilice add-ins de Esri (ESRI Error Handler Generator y ESRI Line Number Generator) o ejecute su código de VB en el depurador de C++.
    Encontrará más información sobre los add-ins de Esri en la carpeta Utilidades de la Ayuda de desarrolladores de ArcObjects.

    Procedimiento:
    Siga estos pasos para utilizar Visual C++ para depurar una aplicación de ArcObjects en Visual Basic ActiveX DLL.
    Nota:
    Los pasos del 1 al 3 se refieren al proyecto de Visual Basic; el resto de pasos, a Visual C++.
    1. En el proyecto de Visual Basic ActiveX DLL, haga clic en Proyecto > Propiedades > Compilar.
    2. Active Crear información de depuración simbólica.
    3. Haga clic en Archivo > Crear xxxx.dll, para recompilar la DLL y crear el archivo de PDB.
    4. Inicie VC++. Cierre los espacios de trabajo que estén abiertos.
      Advertencia:	
      Debe tener instalado Visual C++ para poder continuar.
    5. Haga clic en Archivo > Abrir e ir al archivo de clase de Visual Basic (.cls) de su proyecto de Visual Basic ActiveX DLL.
    6. Pulse F5 para ejecutar el programa (Compilar > Iniciar depuración > Ir).
    7. Haga clic en Sí para crear un proyecto.
    8. Haga clic en No si no desea crear un EXE.
    9. Haga clic en Proyecto > Configuración > Depurar.
    10. Haga clic en Categoría general. Establezca Ejecutable para la sesión de depuración en ..\arcexe82\bin\ArcMap.exe.
    11. En la lista desplegable Categoría, haga clic en DLL adicionales. Vaya a su DLL de Visual Basic y haga clic en Aceptar.
    12. Defina puntos de corte en el código yendo a la línea en la que desee empezar y pulsando F9.
    13. Pulse F5 para ejecutar el programa.
    14. Active la casilla ..\arcgis\arcexe82\bin\ArcMap.exe y haga clic en Aceptar.
    15. Pulse F10/F11 para desplazarse por el código.
      Nota:
      Si, mientras se desplaza por el código, el depurador llega a una línea que tiene un problema, no le dejará pasar a la siguiente línea.

Información relacionada