No se puede depurar Esri Addin para ArcCatalog

8

Fue un lanzamiento de una moneda si esta pregunta es una pregunta GIS.SE o StackOverflow ... Voy con GIS.SE porque el problema parece estar en ArcCatalog.

Tengo varios complementos que se han escrito para ArcCatalog (y también ArcMap); anteriormente pude F5 depurar el código usando puntos de interrupción ahora todos mis puntos de interrupción están inactivos con el mensaje El punto de interrupción no se alcanzará actualmente. No se han cargado símbolos para este documento :

ingrese la descripción de la imagen aquí

He probado las sugerencias de Stack Overflow:

Corrección "El punto de interrupción no se alcanzará actualmente. No se han cargado símbolos para este documento ".

Este punto de interrupción no se alcanzará actualmente, el código fuente es diferente del original (incluso después de la limpieza / reconstrucción)

El punto de interrupción no se alcanzará actualmente. No se han cargado símbolos para este documento

y también

¿Por qué no se puede "alcanzar" el punto de interrupción al depurar un complemento de ArcGIS 10? Pero esto parece ser un problema diferente.

Como se trata de un complemento (dll), no hay proyecto de inicio. He limpiado todas las otras versiones. Hice un cambio sutil en el archivo Esriaddinx en el message=para confirmar que se estaban haciendo los cambios, todo bien, no hay una versión anterior.

Durante la limpieza, noté que los complementos para ArcCatalog se copian %USERPROFILE%\Documents\ArcGIS\AddIns\Desktop10.X\{AddInID}\donde los complementos de ArcMap no. Intenté copiar el archivo pdb en la carpeta de complementos, pero parece que el código ya no se está depurando y ArcCatalog ha cambiado / redirigido a la copia.

¿Hay alguna forma de depurar con complementos de puntos de interrupción para ArcCatalog? Tenga en cuenta que los complementos de ArcMap y las aplicaciones independientes depuran muy bien.

Medio ambiente:

  • Windows 7 de 64 bits
  • ArcGis 10.1
  • Visual Studio 2010 Professional (VB.net y C #)
Michael Stimson
fuente
Tuve un problema similar con ArcMap 10.3 en combinación con Visual Studio 2013. Encontré las mismas publicaciones que mencionaste, y de hecho, en un momento en realidad pude depurar y alcanzar un punto de interrupción. Pero por alguna razón eso dejó de funcionar después de un tiempo, y no había forma de que volviera a funcionar. Finalmente, revertí el marco de destino en mi proyecto de .Net 4.5 a .Net 3.5 y configuré el tiempo de ejecución soportado en .exe.config en v2.0.50727. Eso lo resolvió para mí. ¿Quizás su complemento ArcCatalog usa 4.5 y ArcMap one 3.5?
Berend
Esa es una posibilidad @Berend. Target Framework (todas las configuraciones) está configurado en .NET Framework 3.5 Client Profile ... ¿debería ser 4 o 4 Client Profile? Esta herramienta es muy antigua, originalmente escrita en VB6, se convirtió a .net en ArcGis 9.3, que usa 3.5, por lo que cuando se convirtió en un complemento, el marco no cambió, se compiló y ejecutó OK, así que no vi el Necesito cambiarlo. Realmente creo que estás haciendo algo aquí, algo que no he visto en las otras publicaciones.
Michael Stimson
ESO ES @Berend !!! escribe eso como respuesta para cobrar tu recompensa. Cambié el marco de destino a .NET Framework 4 Client Profile y los puntos de interrupción se activaron; Sabía que tenía que haber algo simple pero bien escondido que estaba pasando por alto ... Muchas gracias . Ahora puedo depurar este código correctamente.
Michael Stimson

Respuestas:

2

Actualizando mi comentario inicial a una respuesta:

Tuve un problema similar con ArcMap 10.3 en combinación con Visual Studio 2013. Encontré las mismas publicaciones que @ michael-miles-stimson mencionó, y de hecho, en un momento en realidad pude depurar y alcanzar un punto de interrupción. Pero por alguna razón, eso dejó de funcionar después de un tiempo, y no había forma de que volviera a funcionar.

Finalmente, revertí el marco de destino en mi proyecto de .Net 4.5 a .Net 3.5 y configuré el tiempo de ejecución soportado en .exe.config en v2.0.50727. Eso lo resolvió para mí.

Si el complemento ArcCatalog usa 4.5 y ArcMap one 3.5, eso explicaría el comportamiento explicado en la pregunta.

No creo que importe si usa la versión Cliente o Completa, siempre tiendo a usar la Versión Completa, porque en un punto, siempre parece que me falta una clase que no está en la versión Cliente.

Berend
fuente
Gracias Berend. Eso solucionó totalmente el problema, toma la recompensa con mis cumplidos.
Michael Stimson
1

Durante la limpieza, noté que los complementos para ArcCatalog se copian en% USERPROFILE% \ Documents \ ArcGIS \ AddIns \ Desktop10.X {AddInID} \ donde los complementos de ArcMap no son

En realidad, los complementos de Arcmap también se copian en esa ubicación después de la instalación (o un Build in Visual studio).

Para resolver este problema, intente estos pasos:

  1. Limpie toda su solución en Visual Studio haciendo clic derecho en la solución y elija Limpiar solución

  2. si su proyecto de complemento de arccatalog depende de otros ensamblados de terceros, asegúrese de que esos ensamblados tengan archivos .pdb (símbolo) junto a ellos

  3. En Visual Studio, si tiene otros proyectos en su solución que su proyecto de arccatalog depende de ellos, agregue su referencia de proyecto en lugar de sus dlls. como esta imagen:

ingrese la descripción de la imagen aquí

Farid Cheraghi
fuente
Hice la limpieza, esa fue una de las primeras cosas que hice, no hay otros proyectos o ensambles de terceros (tal vez, este necesita la biblioteca Excel v12) ... ¿crees que los objetos Excel están causando este problema? si es así, ¿cómo puedo obtener un archivo pdb para eso? No creo que Microsoft me dé su código fuente independientemente de la antigüedad de esa versión.
Michael Stimson
Muy posible. Simplemente elimine los objetos de Excel, limpie y vuelva a intentar la depuración.
Farid Cheraghi
compartir el código fuente de microsoft es un no. Para pdb, búscalo en google.
Farid Cheraghi
1
Excel / ArcObjects es lo que necesito para depurar. Por alguna razón, va a través de la hoja hasta aproximadamente X y se detiene. Sé que ArcGis v10.x admite hojas de cálculo de Excel, sin embargo, este código y las hojas asociadas se originaron en ArcGis 9.1 y las hojas no son compatibles (el encabezado está en la fila 3). Esta publicación dio instrucciones sobre cómo obtener el pdb social.msdn.microsoft.com/Forums/office/en-US/…, así que lo intentaré .
Michael Stimson
1
Farid, resulta que era una versión de .NET Framework la que causaba el problema. Esto podría tener algo que ver con que Excel no quiera jugar con la versión anterior. Una de las muchas actualizaciones de Microsoft puede haber alterado la capacidad de usar objetos Excel 12 en .net 3.5.
Michael Stimson
1

Ok, acabo de verificar que puedo pasar el código usando este proceso. Estoy haciendo esto en ArcMap, pero creo que debería aplicarse a ArcCatalog ya que el proceso se ocupa de depurar archivos DLL y no un elemento específico de ESRI. Confirmé esto en ArcMap 10.2.2 y ArcCatalog 10.2.2. Como este es un proceso de Windows que trata directamente con las DLL, las versiones de software ESRI no deberían importar.

Estoy usando Visual Studio para adjuntar a un proceso .

Puedo pasar a través de una extensión compilada (DLL) usando este proceso cuando la DLL se invoca en otro programa.

Esto es lo que estoy haciendo ...

En Visual Studio, abra su proyecto de extensión. Construí mi extensión en VS 2010 C # Express, pero estoy usando VS 2013 Ultimate para hacer esto. No estoy seguro de si Adjuntar al proceso es una opción en la versión Express 2010. No lo vi, pero podría estar oculto en algún lugar ya que era la versión Express.

Abra su producto ESRI e instale el complemento. Ahora, de vuelta en VS, haga clic en Adjuntar al proceso y seleccione el proceso de su producto ESRI. El mío fue ArcMap.exe . A partir de aquí, Visual Studio debe adjuntar su depurador al programa y cuando se ejecute la DLL que tiene abierta y los puntos de interrupción establecidos, se detendrá allí. Esto actuará como cualquier otro programa que esté depurando en Visual Studio. Se puede estirar algunos de depuración en algunos de los artículos de ESRI aunque el código es más probable ofuscado por lo que no es tan útil.

Me aseguré de instalar el complemento desde mi directorio de lanzamiento para mi proyecto. Por lo que puedo decir, ESRI no copia la DLL en una de sus carpetas, pero usan su Utilidad de registro de ensamblaje Esri para registrar la ubicación de la DLL para que el sistema sepa dónde encontrarla cuando se hace referencia desde un producto ESRI.

FYI: uso este proceso para depurar bibliotecas de clases que escribo en un proyecto que se están utilizando en otro. La misma teoría allí debería aplicar complementos ESRI ya que son solo bibliotecas de clases (DLL) que se invocan en otro programa. Aparte de Visual Studio, creo que cualquier otro depurador de Windows debería poder conectarse a la DLL.

POR FAVOR publique comentarios sobre este. He pensado que esto funcionaría por un tiempo y tengo mucha curiosidad por ver cómo otros son justos con este método.

EDITAR Acabo de crear un nuevo complemento ArcCatalog, que consiste en un simple botón. Agregué una asignación de cadena string stophere = "debugger stopped!";en el controlador de eventos para el evento de clic del botón. A través de ArcCatalog, dejó de usar el método Adjuntar al proceso . La información de Visual Studio 2010 sobre el proceso está aquí .

Hay algunas cosas en MSDN sobre la depuración de archivos DLL a través de varios métodos en Visual Studio y Windows Debugger. Personalmente, considero que Attach to Process es mejor que iniciar un método de programa externo y también es mejor que usar el depurador remoto .

El único inconveniente de este método es que pierde el enfoque F5 donde depura directamente desde Visual Studio. Eso significa que debe realizar cambios en su código, instalar la actualización, iniciar ArcCatalog, Adjuntar al proceso y luego alcanzar sus puntos de interrupción. Sin embargo, creo que este método es bastante bueno para saber en caso de que tenga problemas como el que tiene. Este proceso puede ser un poco más largo, pero es un método infalible para obtener sus resultados.

Branco
fuente
Tengo Visual Studio 2010 Professional , hay una gran diferencia entre ArcMap y ArcCatalog como se indica en la pregunta ... mis complementos de ArcMap se depuran muy bien. Cuando estaba escribiendo esto como código COM (ArcGis 9.3.1) funcionó bien ... en realidad, pensando en eso, debería asegurarme de que las extensiones Esri muy antiguas (9.3.1) también hayan desaparecido. ¿Qué fue lo que dijo en su comentario sobre la edición de ArcCatalog.exe.config, puede mostrarme la primera media docena de líneas por favor? Intente crear un complemento de ArcCatalog que haga muy poco (msgbox debería ser suficiente) y vea si puede depurarlo.
Michael Stimson
@ MichaelMiles-Stimson ... ¿ese comentario fue para esta respuesta? Además, edité mi pregunta para agregar más información y probé con ArcCatalog. Mi método funciona pero no puede F5 desde Visual Studio, necesita hacer un poco más de trabajo pero aún así lograr el mismo resultado sin tener que lidiar con los archivos de configuración.
Branco
Branco, gracias por su atenta respuesta, pero resultó que era una versión de .NET Framework la que estaba causando el problema.
Michael Stimson
1

Este es un archivo que construí durante un par de años discutiendo con extensiones ArcMap y ArcCatalog y luego Complementos:

Cosas que pueden evitar que ArcMap depure complementos en Visual Studio:

  • Modo de lanzamiento en lugar de modo de depuración (si se usa un enfoque antiguo que no sea Complemento, esto puede ser un problema porque lo más probable es que el \ bin \ Debug dll se haya registrado con regasmo, no \ bin \ Release
  • Versiones antiguas de herramientas en la interfaz de usuario que impiden que se cargue la versión de depuración (inicie ArcMap sin Visual Studio, elimine todos los comandos y elimine todos los complementos, cierre ArcMap)
  • ¿Existe la posibilidad de que se esté utilizando la versión que no es un complemento? Si no, dll debe estar registrado
  • Nunca es necesario instalar manualmente el complemento para la depuración
  • Solución y proyecto limpios, luego mire manualmente los archivos de la aplicación y elimine todos los contenidos / bin y / obj
  • Vaciar los contenidos de C: \ Users \ <NAME> \ Local Settings \ ESRI \ Desktop10.0 \ AssemblyCache
  • Asegúrese de que cualquier otra ubicación de proyecto \ bin mencionada anteriormente / posiblemente por ArcMap durante la depuración no tenga dlls / complementos previamente construidos con el mismo nombre que el que está tratando de depurar (es decir, migración de red de puntos / versión de complemento choque)
  • En algunos complementos, los puntos de interrupción solo serán viables después de hacer clic en el botón de la herramienta, es decir, cuando se inicializa
  • Si no se alcanzan puntos de interrupción, es posible que se genere una excepción en el constructor y la herramienta no se esté ejecutando. Verifique esto mostrando todas las excepciones CLR a través del menú Depurar -> Excepciones -> marque 'Excepciones de Common Language Runtime'
  • Si todo lo demás falla, reinicie
tonto
fuente
Gracias por el esfuerzo tombumb, todos fueron abordados en la publicación vinculada. Berend tiene la respuesta correcta (esta vez) ya que no era uno de los sospechosos habituales.
Michael Stimson
0

Aquí está la solución:

Intente eliminar SupportedRuntime de arcmap.exe.config, en el directorio bin.

Este es el archivo xml \ ArcGIS \ Desktop10.0 \ bin \ arcmap.exe.config.

¿Por qué no se puede "alcanzar" el punto de interrupción al depurar un complemento de ArcGIS 10?

Alireza
fuente
Hice referencia a esa publicación en la pregunta. No se trata de ArcMap, eso funciona bien, es ArcCatalog lo que está causando el problema. Buen intento sin embargo. Creo que voy a tener que ofrecer una recompensa por esto.
Michael Stimson
Hola @ MichaelMiles-Stimson. ¿Has intentado editar ArcCatalog.exe.config? Para el último complemento que desarrollé, descomenté esto <! - <SupportRuntime version = "v4.0.30319" /> -> y en su lugar comenté esto <supportRuntime version = "v2.0.50727" />
rowanwins
No pude encontrar <supportRuntime version = "v2.0.50727" /> para comentar @rowanwins. Suponiendo que tengo una copia de seguridad y quiero eliminar la línea, ¿qué pasa en el gabinete <startup>? ¿Hay alguna razón por la cual esta línea está comentada?
Michael Stimson
Quizás @rowanwins podría poner eso como respuesta, eso permitiría al menos una captura de pantalla de lo que está tratando de expresar y potencialmente algunas palabras más y lo investigaré mañana ... ¡hora de casa!
Michael Stimson
0

Algunos pasos obvios (supongo que ya has probado estos ... pero aún así).

  1. Compruebe si el modo sigue siendo "Depurar" en lugar de liberar.
  2. Elimine las carpetas "obj" y "bin" y reconstruya.
vinayan
fuente
Sí, hecho eso. Eso fue mencionado en una de las publicaciones de desbordamiento de pila. Tiene que ser algo menos obvio.
Michael Stimson