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

24

De vez en cuando me encuentro con el siguiente problema:

Comienzo a depurar el complemento y los puntos de interrupción se ignoran. Casi parece que la comunicación entre el IDE y el componente no funciona.

Mi problema es que la última vez que sucedió esto lo resolví y ahora no recuerdo qué hice para solucionarlo.

El punto de interrupción no se alcanzará actualmente. No se han cargado símbolos para el documento. ingrese la descripción de la imagen aquí

En parte, el problema que tengo ya se describe aquí, pero no hay una solución para el mal funcionamiento del punto de interrupción real.

Tenga en cuenta que esto normalmente funciona.

Eliminar el bin y el obj no parece funcionar.

Esta vez acabo de restaurar todo mi proyecto desde la copia de seguridad y comencé de nuevo, pero me gustaría saber cómo solucionarlo si vuelvo a encontrarlo.

Jakub Sisak GeoGraphics
fuente
1
¿Está el atributo xml "onDemand" establecido en falso en su archivo de configuración?
Kirk Kuykendall
No tengo una respuesta definitiva (aunque generalmente significa que el depurador no puede encontrar el archivo pdb para el dll cargado), pero puede intentar examinar estas preguntas en SO para ver si lo llevan en la dirección correcta.
Michael Todd
@ Kirk, no veo ese atributo en el archivo config.esriaddinx.
Jakub Sisak GeoGraphics
@ Michael - gracias. echará un vistazo más de cerca. El problema es que puedo estar agregando funcionalidad a mi complemento durante meses y felizmente depurar y, de repente, los puntos de interrupción no funcionan ...
Jakub Sisak GeoGraphics
2
También me ha sucedido varias veces sin razón aparente. Si recuerdo, la eliminación de los directorios obj y bin lo resolvió un par de veces, copiando el pdb y dll sospechoso al directorio bin del proyecto actual funcionó un par de veces, etc. Nada de lo que pueda señalar funcionará siempre , aunque. Buena suerte.
Michael Todd

Respuestas:

16

Aquí hay una solución no oficial y aún no probada del personal de ESRI. (Destacaron que esta no es una solución oficial)

Intente eliminarlo de arcmap.exe.config, en el directorio bin.

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

ingrese la descripción de la imagen aquí

Jakub Sisak GeoGraphics
fuente
3
En realidad, está "documentado" aquí resources.arcgis.com/en/help/arcobjects-net/conceptualhelp/… Me encontré con este problema al codificar el complemento ogr-workspace y terminé poniéndolo en las Preguntas frecuentes del desarrollador github.com/ RBURHUM / arcgis-ogr
Ragi Yaser Burhum
Esto resolvió el problema para mí y otro problema que tenía de que mis Debug.WriteLine()mensajes no se enviaran a la ventana de salida en VS 2010.
GeoSharp
Me encontré con este problema DE NUEVO y esto es lo que funcionó esta vez. Estoy ejecutando VS 2010 Express (C #) y apunto a .NET 4.0. Tuve que descomentar la versión de tiempo de ejecución compatible v4.0 y eliminar la referencia v2.0.
Radar
8

2 años y 2 versiones más tarde y esto sigue siendo un problema. Acabo de terminar de actualizar / mejorar todos mis complementos para 10.2 y encontré este problema nuevamente. Implementé TODAS las sugerencias en esta publicación y nada funcionó, pero he descubierto 1 posible problema adicional . Desafortunadamente, no estoy seguro de si este fue el culpable o no porque también he implementado la mayoría de las otras soluciones posibles al mismo tiempo.

Nuevo hallazgo: me di cuenta de que he estado desarrollando complementos desde la versión 10 en la misma máquina y después de la reinstalación no siempre he limpiado los datos heredados de ArcGIS. Descubrí que tenía una versión anterior del complemento culpable en una versión anterior de los datos de ArcGIS en C: \ Archivos de programa (x86) \ ArcGIS. Dado que ArcGIS cargará los complementos heredados, posiblemente haya algún tipo de conflicto. Eliminé todos los datos de la aplicación arcgis heredados (Desktop10.0, Desktop10.1) dejando solo Desktop10.2 y el punto de quiebre cobró vida. Una vez más, no estoy al 100% si esta es la solución, pero puede ser otro elemento en la lista para verificar.

He visto que este problema en particular se llama "el asesino definitivo de la productividad" en otro sitio y no podría estar más de acuerdo.

En resumen, aquí está mi lista actual de tareas pendientes para el problema del punto de interrupción 'muerto':

  1. Asegúrese, en realidad estoy ejecutando el complemento. Hacer que el depurador inicie la aplicación no es suficiente: el punto de interrupción aparecerá "muerto" hasta que ejecute el complemento (botón, opción de menú, etc.)

  2. Elimine los foders OBJ y BIN del directorio del proyecto.

  3. Elimine el contenido de assebmly chache: C: \ Users \ User \ AppData \ Local \ ESRI \ Desktop10.2 \ AssemblyCache

  4. Eliminar todos los datos de ensamblaje heredados. (Si la versión actual es 10.2, elimine los datos de ensamblaje de Desktop10.0, Desktop10.1) No hay pruebas de que esto ayude o sea parte del problema, pero no hay razón para que estos datos existan, por lo que lo elimino por si acaso (C : \ Users \ User \ AppData \ Local \ ESRI)

  5. Según la sugerencia de soporte de ESRI; Modifique el XML de configuración de ArcCatalog y ArcMap (no funcionó por sí solo cuando lo intenté, pero varias personas lo recomendaron como solución, incluido el soporte de ESRI) Localice ArcCatalog.exe.config y ArcMap.exe.config en C: \ Archivos de programa ( x86) \ ArcGIS \ Desktop10.2 \ bin Abra cada xml en el bloc de notas y elimine la línea <supportedRuntime version="v2.0.50727"/> Se trata de la quinta línea

  6. Elimine todos los datos heredados de la aplicación ArcGIS del directorio de instalación. Esto fue lo que funcionó para mí. (probablemente) Vaya a: C: \ Archivos de programa (x86) \ ArcGIS Elimine todas las carpetas excepto la actual para Desktop10.x (es decir, Desktop10.0, Desktop10.1) Solo la versión actual de Desktop debe permanecer en esta ubicación.

  7. Elimine y vuelva a agregar todas las referencias del proyecto, incluidas las referencias que no sean ESRI, vuelva a guardar, repita los pasos 2 y 3, vuelva a compilar, ejecute dbugger.

  8. Reiniciar la computadora. (Esto funcionó en el pasado) TAMBIÉN descubrió que esta es una de las soluciones recomendadas en Stack Overflow.

  9. En Config.esriaddinx, cambie el botón para incluir onDemand = false: (sugerencia de Kirk - ver arriba) Esto no funcionó para mí personalmente.

  10. Reconstruir proyecto desde cero. (Esto funcionó para mí en el pasado).

Jakub Sisak GeoGraphics
fuente
Jakub, tuve un problema similar pero no relacionado gis.stackexchange.com/questions/155016/… . Resulta que el legado también fue un problema allí. La versión de .NET Framework no era actual, por lo que si ha probado todos estos y todavía no funciona, siga el enlace para otra posibilidad.
Michael Stimson
5

La única vez que obtuve esto es cuando tuve otra instancia de ArcMap abierta y olvidé cerrarla antes de compilar / depurar. Si no cierra todas las instancias con el ensamblaje, se seguirá utilizando el anterior. O algo así.

blah238
fuente
Intenté reiniciar la computadora abriendo VS y ejecutando el depurador sin abrir ninguna otra instancia de ArcMap. Lanzó ArcMap como de costumbre, pero el problema del "punto muerto" persistió.
Jakub Sisak GeoGraphics
así que acabo de configurar ArcGIS y Visual Studio en otra máquina (instalación limpia) y lo mismo comenzó a suceder nuevamente. He probado las sugerencias de todos y parece que estás en lo correcto. Me aseguré de eliminar todos los procesos abiertos de ArcGIS y cuando lo hago, los puntos de interrupción funcionan.
Jakub Sisak GeoGraphics
5

Como .NET Framework de mi proyecto es 4.0, cambié a supportedRuntime version="v4.0.30319"ArcMap.exe.config y noté que el problema se retrasó por este cambio. También recordé que ArcMap también carga ArcCatalog, así que también cambié ArcCatalog.exe.config supportedRuntime version="v4.0.30319"y YES !!! Está funcionando de nuevo. Pasé todo el día tratando de arreglar esto y espero que también funcione para ti.

Sabin Kolarov
fuente
1
Tuve que eliminar también las carpetas bin y obj.
Sabin Kolarov
4

Probé las sugerencias anteriores por un tiempo y finalmente llegué a una solución. Ir al grano, primero daré la solución, luego la explicación:

  1. Abra el Administrador de tareas. Finalice el proceso para cualquier copia de ArcMap.exe.

  2. Abre un Explorador de Windows. Vaya a C: \ Usuarios \\ Configuración local \ ESRI \ Desktop10 ..

  3. Si no ve AssemblyCache, Organice> Carpeta y opciones de búsqueda> Ver> desmarque "Ocultar archivos protegidos del sistema operativo (recomendado)"

  4. En los directorios en AssemblyCache, busque el que contiene su .dll.

  5. Eliminar el .dll.

  6. Reconstruir el proyecto y depurar. Una vez que se active su complemento, debería ver que el contenido de la memoria caché se actualiza.

  7. Si lo desea, vuelva a ocultar los archivos protegidos del sistema operativo.

El problema para mí fue que había una instancia anterior de mi DLL en la carpeta C: \ Users \\ Configuración local \ ESRI \ DesktopX.X \ AssemblyCache \, y tampoco pude ver \ AssemblyCache porque no me di cuenta Era un archivo oculto del sistema operativo. También hubo una instancia zombie de ArcMap ejecutándose, y cuando intenté eliminar la DLL inicialmente estaba bloqueada. Mi sospecha es que, en primer lugar, lo que causó el problema es que no cerré completamente una sesión de depuración de ArcMap antes de volver a compilar el código y comenzar otra. La antigua DLL en el caché no se pudo sobrescribir porque la antigua instancia de ArcMap todavía la tenía bloqueada, y una vez que se desincronizó con el nuevo código, la versión en caché ya no se actualizó. (Puedo ver por fechas de archivo que .config, .pdb y .xml se están actualizando pero no el .dll).

StephenKCA
fuente
Sí, esto suena como la solución correcta.
Jakub Sisak GeoGraphics
2

Estaba lidiando con el mismo problema, con mi propio complemento en otro tema totalmente, e inevitablemente seguí los siguientes:

Al principio, inicie la depuración y en el menú elija la siguiente ventana Depuración >> Windows >> Módulos, donde puede ver qué módulos se cargaron al inicio de la depuración. Si no puede ver su yourAddIn.dll, entonces al menos sabe que no fue cargado por el estudio. Si ve allí y no puede poner el punto de interrupción allí, entonces el Studio cargó uno antiguo. Para verificar esto, cambie el nombre del ensamblado en las propiedades del proyecto, reconstruya la solución, inicie la depuración y verá el viejo archivo DLL cargado allí. No sé de dónde carga el estudio este viejo dll.

Vaya al Explorador de soluciones y compruebe comparar los archivos "yourAddIn.Addin" y "yourAddIn - For Testing.AddIn" y pueden diferir. ¡El estudio usa solo el segundo archivo en su Administrador de complementos! Al primer cambio Cambie también la etiqueta para referirse a la dll correcta y también puede verificar la etiqueta. Para mí, el valor se estableció de nuevo en 0 en el archivo "yourAddIn - For Testing.AddIn", por lo que lo cambié a 1. (Si elimina el directorio bin de su complemento e inicia el estudio, le preguntará y preguntará ¡le gustaría eliminar este complemento de su lista de complementos! En este punto, Studio establece el LoadBehavior en 0.)

¡Después de estos dos cambios, comenzó a funcionar nuevamente!

MrNice
fuente
Gracias por compartir su experiencia y por brindarnos los detalles. ¡Bienvenido a nuestra comunidad!
whuber
2

Con Visual Studio, creé un nuevo complemento para Arcmap y le agregué un botón y una barra de herramientas. Resultando en un archivo de configuración que se ve así:

<ESRI.Configuration xmlns="http://schemas.esri.com/Desktop/AddIns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Name>ArcMapAddin4</Name>
  <AddInID>{b6b350bb-084d-42b8-a44a-6dbb6a9f5906}</AddInID>
  <Description>Type in a description for this Add-in.</Description>
  <Version>1.0</Version>
  <Image>Images\ArcMapAddin4.png</Image>
  <Author>Kirk</Author>
  <Company>Microsoft</Company>
  <Date>8/15/2011</Date>
  <Targets>
    <Target name="Desktop" version="10.0" />
  </Targets>
  <AddIn language="CLR" library="ArcMapAddin4.dll" namespace="ArcMapAddin4">
    <ArcMap>
      <Toolbars>
        <Toolbar id="MyToolbar4" caption="MyToolbar4" showInitially="true">
          <Items>
            <Button refID="Microsoft_ArcMapAddin4_Button1"/>
          </Items>
        </Toolbar>
      </Toolbars>
      <Commands>
        <Button id="Microsoft_ArcMapAddin4_Button1" class="Button1" message="Add-in command generated by Visual Studio project wizard." caption="My Button" tip="Add-in command tooltip." category="Add-In Controls" image="Images\Button1.png" />
      </Commands>
    </ArcMap>
  </AddIn>
</ESRI.Configuration>

Creé un código en el constructor para el botón y puse un punto de interrupción en él. Comencé en modo de depuración y veo que el ensamblado aún no se ha cargado:

ingrese la descripción de la imagen aquí

Cambié el botón para incluir onDemand = false:

ingrese la descripción de la imagen aquí

Cuando comencé de nuevo arcmap, llegó al punto de ruptura. Tenga en cuenta que si la barra de herramientas está desactivada en el inicio, deberá hacerla visible para que se llame al constructor de botones, por lo que, de alguna manera, todavía está bajo demanda.

Kirk Kuykendall
fuente
Gracias @ Kirk. Como he restaurado mi proyecto desde la copia de seguridad, parece funcionar ahora. Usualmente depuro un procedimiento que está más adelante en el camino; es decir, desde el clic, incluso de un botón, que fue el caso esta vez. Estoy bastante seguro de que el ensamblaje ya está cargado en este punto. (o debería ser, pero no por alguna razón) Definitivamente probaré esta solución la próxima vez que esto suceda.
Jakub Sisak GeoGraphics
2

Tuve que cambiar mi complemento para que arcCatalog coincida con el marco 4 con la nueva versión 10.1 de ArcCatalog.
Acabo de comentar la versión = "v2.0.50727" y no comentado "v4.0.30319"

En C: \ Archivos de programa (x86) \ ArcGIS \ Desktop10.1 \ bin, el archivo de configuración xml ArcCatlog.exe

se detiene en el punto de interrupción ahora

Parece ser el mismo problema con arcmap

anónimo
fuente
2

Después de migrar un proyecto ESRI ArcGIS 10 de una máquina a otra, encontré el error de que la máquina no podía cargar los archivos .pdb de depuración para ArcMap.exe. Probé cada consejo en esta publicación sin suerte.

Luego hice lo siguiente:

Eliminé las referencias para todas las bibliotecas Esri. * En cada proyecto que las contenía, y las volví a agregar al proyecto en la nueva máquina.

Esto es lo que finalmente funcionó para mí. Si alguien tropieza aquí con este problema impreciso y ha intentado todo lo demás enumerado en esta página, intente esto: es rápido, fácil y bastante inofensivo. No estoy completamente seguro de por qué esto tuvo que hacerse, supongo que tiene que ver con buscar las bibliotecas por máquina.

Esto fue para un proyecto que usaba Comandos Base / Barras de herramientas, y no los nuevos Complementos. Usando ArcGIS 10.0 y .NET 3.5 con Visual Studio 2010 en Windows 7 Pro.

codemouse
fuente
2

Para aquellos que apuntan a .Net 4.0 Framework, el siguiente funcionó para mí.

  1. Según muchas sugerencias, modifique ArcMap.exe.config y ArcCatalog.exe.config al marco de destino 4.0
    <?xml version="1.0" encoding="utf-8" ?> <configuration> <startup> <supportedRuntime version="v4.0.30319"/> <!--supportedRuntime version="v2.0.50727"/--> </startup>
    Por alguna razón, ArcCatalog.exe.config parece bloqueado para modificar. Lo solucioné copiándolo y modificándolo en otro directorio y luego reemplazándolo.
  2. Luego, en Config.esriaddinx, cambie el idioma del complemento a "CLR4.0"
Nilster
fuente
1

Dos posibles causas vienen a mi mente:

  1. El complemento no está registrado correctamente, por lo que la DLL no se carga en el proceso de ArcMap que se está depurando.

  2. Su proyecto está dirigido a .NET 4. Intente apuntar a .NET 3.5 en su lugar.

Petr Krebs
fuente
Orientación .Net 3.5. Simplemente no entiendo por qué todo funcionaría bien y de repente no.
Jakub Sisak GeoGraphics
1

Si está codificando con múltiples proyectos en la misma solución de Visual Studio, puede encontrar situaciones en las que Visual Studio (VS) "deshabilita" sus puntos de interrupción y no puede pasar por su código. Esto me sucedió recientemente cuando no pude entrar en un proyecto de ensamblaje de DLL "dependiente" al que se llamaba desde mi proyecto principal.

Las advertencias de VS sugirieron que mi ensamblado (DLL) estaba desactualizado y no coincidía exactamente con mi código. Hay opciones de VS para desactivar el requisito de que el código coincida, pero intuitivamente esto parecía una mala idea y fue respaldado por publicaciones de Internet. Leí muchos sitios web y hay algunas sugerencias retorcidas por ahí.

Al final, hice una búsqueda de la DLL de salida de mi máquina dependiente y encontré varias copias antiguas en varias ubicaciones en mi computadora (presumiblemente de experimentos anteriores y configuraciones de proyectos). Así que los eliminé todos y reconstruí mi solución desde cero. Esto solucionó mi problema. Supongo que mi proyecto actual se enlazó inadvertidamente a una de las copias antiguas de alguna manera y no usó la última compilación que se estaba colocando en mi carpeta de depuración.

Radar
fuente
1

Lo que funcionó para mí no fue eliminar el arcmap.config.exe como se describe en la publicación de Jakub anterior, sino configurar la etiqueta "supportRuntime" en este archivo a la versión correcta del Framework que apuntas dentro de Visual Studio, en mi caso:

<startup>
    <supportedRuntime version="v3.5"/>
</startup> 
JsP
fuente
1

En varios proyectos de ArcObjects compilé una lista de razones por las cuales la depuración podría no funcionar para complementos, extensiones y comandos (pre-complemento). En ningún orden en particular:

  1. Estás en el modo de lanzamiento de Visual Studio en lugar del modo de depuración
  2. Las versiones anteriores de la herramienta todavía están registradas en ArcMap / ArcCatalog y esto impide que se cargue su versión de depuración, o que otras herramientas con el mismo nombre estén registradas
  3. Proyecto / Solución necesita limpieza, y si es necesario, vaya a \ bin y \ obj y elimine los archivos persistentes
  4. En algunos casos, los puntos de interrupción solo se pueden alcanzar después de que la herramienta se haya activado (bajo demanda)
  5. Si no se alcanzan puntos de interrupción, es posible que ocurra una excepción en el constructor y la herramienta nunca se ejecute. Verifique mostrando todas las excepciones CLR en el menú de depuración
  6. Las entradas en C: \ Users \ <nombre> \ Configuración local \ ESRI \ DesktopX.X \ AssemblyCache deben eliminarse

Muchos pasos requieren que ArcMap se reinicie. Si todo lo demás falla, un reinicio de la máquina es una alternativa fácil, pero solo una vez he hecho que esto marque la diferencia.

tonto
fuente
0

Esto me sucedió una o dos veces. Si no recuerdo mal, pude hacer que el punto de interrupción funcionara cuando hice un cambio de código menor, lo que significaba que la aplicación fue reconstruida. ¿Qué sucede cuando construyes o reconstruyes tu proyecto?

kenbuja
fuente
Traté de reconstruir el proyecto e hice varios cambios, pero los puntos de interrupción estaban "muertos" ...
Jakub Sisak GeoGraphics
0

No puedo creer que más personas no tengan este problema. Ahora me encuentro con esto casi cada vez que estoy mejorando y depurando mis complementos.

Ninguna de las soluciones mencionadas anteriormente funciona. Para solucionar esto, necesito eliminar todo el proyecto y restaurarlo desde la copia de seguridad. Esto me lleva a creer que algo en el proyecto en particular se ha corrompido ya que generalmente comienza a suceder cuando ArcMap se bloquea durante la depuración.

Jakub Sisak GeoGraphics
fuente
¿Hay procesos persistentes de ArcMap.exe? A veces, los complementos, extensiones, comandos, etc. pueden retener un recurso o causar una condición de carrera que impide que ArcMap salga por completo.
blah238
No hay procesos de ArcMap.exe ejecutándose. Ahora tengo una respuesta del personal de ESRI para intentar eliminar <supportRuntime version = "v2.0.50727" /> de arcmap.exe.config, en el directorio bin. Sin embargo, no estoy seguro de dónde estoy eliminando este elemento y acabo de restaurar mi proyecto desde la copia de seguridad y ahora está funcionando. Cuando sepa más sobre esta solución, bloquearé ArcMap durante la depuración, lo que generalmente hace que esto suceda y lo intentaré.
Jakub Sisak GeoGraphics
0

¿Estás creando tu proyecto usando Framework 4? Tuve el mismo problema, pero cuando cambio a Framework 3.5, funciona bien.

usuario20254
fuente
0

intente limpiar y reconstruir y luego ejecutar sin depurar, cuando la aplicación se ejecute, adjúntelo en VS

Mostafa
fuente
0

Sé que esto puede sonar demasiado obvio, pero lo mencionaré de todos modos es que necesita la edición adecuada de Visual Studio. Por ejemplo, este problema podría ocurrir con una edición exprés de un año dado, mientras que podría funcionar con una edición definitiva. Si usa say 2010, intente cambiar a 2012. Luego intente cambiar de express a ultimate. Haría esto si aún no lo has hecho antes de meterte con problemas de carga de símbolos. ESRI proporciona información sobre la descarga de los símbolos a la memoria caché como se menciona en el enlace anterior (Ayuda de ArcObjects 10 .NET SDK). Sin embargo, esto puede no ser necesario. Asegúrese de utilizar el .net framework apropiado también antes de depurar, por ejemplo .net 3.5 en las ediciones anteriores.

user89997
fuente