Perché il breakpoint non può essere "colpito" durante il debug di un componente aggiuntivo ArcGIS 10?


24

Di tanto in tanto mi imbatto nel seguente problema:

Inizio il debug del componente aggiuntivo e i punti di interruzione vengono ignorati. Sembra quasi che la comunicazione tra l'IDE e il componente non funzioni.

Il mio problema è che l'ultima volta che è successo l'ho risolto e ora non ricordo cosa ho fatto per risolverlo.

Il punto di interruzione non verrà attualmente colpito. Nessun simbolo è stato caricato per il documento. inserisci qui la descrizione dell'immagine

In parte, il problema che sto riscontrando è già descritto qui, ma non esiste una soluzione per l'effettivo malfunzionamento del breakpoint.

Si noti che normalmente funziona.

L'eliminazione del cestino e dell'oggetto non sembra funzionare.

Questa volta ho appena ripristinato il mio intero progetto dal backup e ho ricominciato, ma vorrei sapere come risolvere questo problema se dovessi imbattermi di nuovo in questo.


1
L'attributo xml "onDemand" è impostato su false nel file di configurazione?
Kirk Kuykendall,

Non ho una risposta definitiva (anche se di solito significa che il debugger non riesce a trovare il file pdb per la dll caricata), ma puoi provare a setacciare queste domande su SO per vedere se ti spostano nella giusta direzione.
Michael Todd,

@Kirk, non vedo tale attributo nel file config.esriaddinx.
Jakub Sisak GeoGraphics,

@Michael - grazie. darà un'occhiata più da vicino. Il problema è che posso aggiungere funzionalità al mio componente aggiuntivo per mesi e felicemente svuotato e i punti di interruzione improvvisi non funzionano ...
Jakub Sisak GeoGraphics

2
L'ho fatto accadere più volte senza motivo apparente. Se ricordo, l'eliminazione delle directory obj e bin lo ha risolto un paio di volte, copiando il pdb e la dll sospetti nella directory bin del progetto corrente ha funzionato un paio di volte, ecc. Nulla che io possa indicare che funzionerà ogni volta , anche se. In bocca al lupo.
Michael Todd,

Risposte:


16

Ecco una soluzione non ufficiale e ancora non testata da parte del personale ESRI. (Hanno sottolineato che questa non è una soluzione ufficiale)

Prova a rimuovere da arcmap.exe.config, nella directory bin.

Questo è il file xml \ ArcGIS \ Desktop10.0 \ bin \ arcmap.exe.config.

inserisci qui la descrizione dell'immagine


3
In realtà, è "documentato" qui resources.arcgis.com/en/help/arcobjects-net/conceptualhelp/… Ho riscontrato questo problema durante la codifica del plug-in ogr-workspace e ho finito per inserirlo nella FAQ dello sviluppatore github.com/ RBURHUM / arcgis-ogr
Ragi Yaser Burhum,

Ciò ha risolto il problema per me e un altro problema che avevo dei miei Debug.WriteLine()messaggi non inviati alla finestra di output in VS 2010.
GeoSharp

Ho riscontrato ANCORA questo problema e questo è ciò che ha funzionato questa volta. Sto eseguendo VS 2010 Express (C #) e ho come target .NET 4.0. Ho dovuto decommentare la versione runtime supportata v4.0 e rimuovere il riferimento v2.0.
Radar,

8

2 anni e 2 versioni successive e questo è ancora un problema. Ho appena finito di aggiornare / migliorare tutti i miei componenti aggiuntivi per 10.2 e ho riscontrato di nuovo questo problema. Ho implementato TUTTE le congestioni in questo post e nulla ha funzionato ma ho scoperto 1 possibile ulteriore problema . Sfortunatamente, non sono sicuro che questo sia stato il colpevole o meno perché ho anche implementato la maggior parte delle altre possibili correzioni allo stesso tempo.

Nuova scoperta: mi sono reso conto che ho sviluppato Addin dalla versione 10 sulla stessa macchina e dopo la reinstallazione non ho sempre ripulito i dati ArcGIS legacy. Ho scoperto di avere una versione precedente dell'add-colpevole in una versione precedente dei dati ArcGIS in C: \ Programmi (x86) \ ArcGIS. Dato che ArcGIS caricherà i componenti aggiuntivi legacy, potrebbe essersi verificato un conflitto. Ho rimosso tutti i dati delle applicazioni arcgis legacy (Desktop10.0, Desktop10.1) lasciando solo Desktop10.2 e il punto di interruzione ha preso vita. Ancora una volta non sono al 100% se questa è la soluzione, ma potrebbe essere un altro elemento dell'elenco da verificare.

Ho visto questo particolare problema essere chiamato "l'ultimo killer della produttività" su un altro sito e non potrei essere più d'accordo.

Riassumendo qui è la mia attuale lista di cose da fare per il problema dei punti di interruzione "morti":

  1. Assicurati, sto effettivamente eseguendo il componente aggiuntivo. Avere il debugger avviare l'applicazione non è sufficiente: il punto di interruzione apparirà "morto" fino a quando eseguirò il componente aggiuntivo (pulsante, opzione di menu, ecc.)

  2. Eliminare i foders OBJ e BIN dalla directory del progetto.

  3. Elimina il contenuto del caos assebmly: C: \ Users \ User \ AppData \ Local \ ESRI \ Desktop10.2 \ AssemblyCache

  4. Elimina tutti i dati dell'assembly legacy. (Se la versione corrente è 10.2 elimina i dati di assemblaggio di Desktop10.0, Desktop10.1) Non ci sono prove che ciò aiuti o faccia parte del problema, ma non c'è motivo per cui questi dati debbano esistere, quindi li elimino nel caso (C : \ utenti \ utente \ AppData \ Local \ ESRI)

  5. Come suggerito dal supporto ESRI; Modifica il file di configurazione di ArcCatalog e ArcMap XML (non ha funzionato da solo quando ho provato, ma diverse persone lo hanno consigliato come soluzione, incluso il supporto ESRI) Trova ArcCatalog.exe.config e ArcMap.exe.config in C: \ Programmi ( x86) \ ArcGIS \ Desktop10.2 \ bin Apri ogni xml nel blocco note e rimuovi la riga <supportedRuntime version="v2.0.50727"/> Riguarda la quinta riga

  6. Elimina tutti i dati dell'applicazione ArcGIS legacy dalla directory di installazione. Questo è ciò che ha funzionato per me. (probabilmente) Vai a: C: \ Programmi (x86) \ ArcGIS Elimina tutte le cartelle tranne quelle correnti per Desktop10.x (ovvero Desktop10.0, Desktop10.1) Solo la versione desktop corrente deve rimanere in questa posizione.

  7. Rimuovere e aggiungere nuovamente tutti i riferimenti al progetto inclusi riferimenti non ESRI, ripristinare, ripetere i passaggi 2 e 3, ricompilare, eseguire dbugger.

  8. Riavvia il computer. (Questa volta ha funzionato in passato) Inoltre ha scoperto che questa è una delle soluzioni consigliate su StackTranslate.it.

  9. In Config.esriaddinx - cambia il pulsante per includere onDemand = false: (il suggerimento di Kirk - vedi sopra) Questo non ha funzionato per me personalmente.

  10. Ricostruisci il progetto da zero. (Questo ha funzionato per me in passato.)


Jakub, ho avuto un problema simile ma non correlato gis.stackexchange.com/questions/155016/… - risulta che anche l'eredità era un problema. La versione del framework .net non era attuale, quindi se hai provato tutti quelli e non funziona ancora segui il link per l'ennesima possibilità.
Michael Stimson,

5

L'unica volta che ho avuto questo è quando ho aperto un'altra istanza di ArcMap e ho dimenticato di chiuderlo prima di creare / eseguire il debug. Se non si chiudono tutte le istanze utilizzando l'assemblaggio, si continuerà a utilizzare quello vecchio. O qualcosa di simile.


Ho provato a riavviare il computer aprendo VS ed eseguendo il debugger senza aprire altre istanze di ArcMap. Ha lanciato ArcMap come al solito bu il problema del "punto di interruzione morto" persisteva.
Jakub Sisak GeoGraphics,

quindi ho appena installato ArcGIS e Visual Studio su un'altra macchina (installazione completamente pulita) e la stessa cosa ha ricominciato a succedere. Ho provato il suggerimento di tutti e sembra che tu abbia ragione. Mi sono assicurato di uccidere tutti i processi ArcGIS aperti e quando lo faccio i punti di interruzione funzionano.
Jakub Sisak GeoGraphics,

5

Poiché .NET Framework del mio progetto è 4.0, ho cambiato supportedRuntime version="v4.0.30319"in ArcMap.exe.config e ho notato che il problema è stato ritardato da questa modifica. Ho anche ricordato che ArcMap carica anche ArcCatalog, quindi ho cambiato anche ArcCatalog.exe.config supportedRuntime version="v4.0.30319"e SÌ !!! Funziona di nuovo. Ho trascorso tutto il giorno a cercare di risolvere questo problema e spero che funzioni anche per te.


1
Ho dovuto eliminare anche le cartelle bin e obj.
Sabin Kolarov,

4

Ho provato i suggerimenti sopra per un po 'e finalmente sono arrivato a una soluzione. Passando all'inseguimento, darò prima la soluzione, quindi la spiegazione:

  1. Apri Task Manager. Termina processo per qualsiasi copia di ArcMap.exe.

  2. Apri un Windows Explorer. Passare a C: \ Utenti \\ Impostazioni locali \ ESRI \ Desktop10 ..

  3. Se non vedi AssemblyCache, Organizza> Opzioni cartella e ricerca> Visualizza> deseleziona "Nascondi file protetti del sistema operativo (consigliato)"

  4. Nelle directory in AssemblyCache, cerca quella contenente il tuo .dll.

  5. Elimina il .dll.

  6. Ricostruire il progetto ed eseguire il debug. Una volta attivato il componente aggiuntivo, il contenuto della cache dovrebbe essere aggiornato.

  7. Se lo si desidera, nascondere nuovamente i file del sistema operativo protetto.

Il problema per me era che c'era una vecchia istanza della mia DLL nella cartella C: \ Users \\ Local Settings \ ESRI \ DesktopX.X \ AssemblyCache \, e inoltre non riuscivo a vedere \ AssemblyCache perché non me ne rendevo conto era un file OS nascosto. C'era anche un'istanza zombie di ArcMap in esecuzione e quando ho provato a eliminare la DLL inizialmente era bloccata. Il mio sospetto è che ciò che ha causato il problema in primo luogo è che non ho completamente chiuso una sessione di debug di ArcMap prima di ricompilare il codice e avviarne un altro. La vecchia DLL nella cache non poteva essere sovrascritta perché la vecchia istanza di ArcMap era ancora bloccata e una volta che non era sincronizzata con il nuovo codice, la versione memorizzata nella cache non veniva più aggiornata. (Vedo per data del file che .config, .pdb e .xml sono in fase di aggiornamento ma non il .dll.)


Sì, sembra la soluzione corretta.
Jakub Sisak GeoGraphics,

2

Avevo a che fare con lo stesso problema, con il mio componente aggiuntivo in un altro argomento, e ho inevitabilmente seguito:

Inizialmente, avvia il debug e nel menu scegli la seguente finestra Debug >> Windows >> Moduli, dove puoi vedere quali moduli sono stati caricati all'avvio del debug. Se non riesci a vedere lì il tuo AddIn.dll, almeno sai che non è stato caricato dallo studio. Se vedi lì e non puoi inserire il punto di interruzione lì, Studio ha caricato un vecchio. Per verificare ciò, cambia il nome dell'assembly nelle proprietà del progetto, ricostruisci la soluzione, avvia il debug e vedrai la vecchia dll caricata lì. Non so da dove lo studio carica questa vecchia dll.

Vai a Esplora soluzioni e controlla il confronto tra i file "yourAddIn.Addin" e "yourAddIn - For Testing.AddIn" e potrebbero differire. Lo studio utilizza solo il 2 ° file nel suo gestore di componenti aggiuntivi! Al primo cambio Cambia anche il tag in esso per fare riferimento alla DLL corretta e puoi anche controllare il tag. Per me è stato riportato a 0 nel file "yourAddIn - For Testing.AddIn", quindi l'ho cambiato di nuovo in 1. (Se elimini la directory bin del tuo componente aggiuntivo e avvii lo studio ti verrà chiesto e chiederai che desideri rimuovere questo componente aggiuntivo dall'elenco dei componenti aggiuntivi! A questo punto Studio imposta LoadBehavior su 0.)

Dopo questi due cambiamenti ha ripreso a funzionare!


Grazie per aver condiviso la tua esperienza e la cura di fornirci i dettagli. Benvenuto nella nostra comunità!
whuber

2

Con Visual Studio, ho creato un nuovo componente aggiuntivo per Arcmap e ad esso ho aggiunto un pulsante e una barra degli strumenti. Il risultato è un file di configurazione simile al seguente:

<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>

Ho creato del codice nel costruttore per il pulsante e vi ho inserito un punto di interruzione. Ho iniziato in modalità debug e vedo che l'assembly non è ancora stato caricato:

inserisci qui la descrizione dell'immagine

Ho cambiato il pulsante per includere onDemand = false:

inserisci qui la descrizione dell'immagine

Quando ho riavviato arcmap, ha colpito il punto di interruzione. Si noti che se la barra degli strumenti è disattivata all'avvio, è necessario renderla visibile per fare in modo che venga chiamato il costruttore del pulsante, quindi in qualche modo è ancora su richiesta.


Grazie @Kirk. Da quando ho ripristinato il mio progetto dal backup, sembra funzionare ora. Di solito eseguo il debug di una procedura che è più avanti; cioè chiamato dal clic anche di un pulsante che era il caso questa volta. Sono abbastanza sicuro che l'assemblaggio sia già caricato a questo punto. (o dovrebbe esserlo ma non è per qualche motivo) Sicuramente proverò questa soluzione la prossima volta che accadrà.
Jakub Sisak GeoGraphics,

2

Ho dovuto cambiare il mio componente aggiuntivo per arcCatalog affinché corrispondesse usando il framework 4 con la nuova versione 10.1 di ArcCatalog.
Ho appena commentato la versione = "v2.0.50727" e non commentato "v4.0.30319"

In C: \ Programmi (x86) \ ArcGIS \ Desktop10.1 \ bin il file di configurazione xml di ArcCatlog.exe

si ferma sul punto di interruzione ora

Sembra essere lo stesso problema con arcmap


2

Dopo aver migrato un progetto ESRI ArcGIS 10 da una macchina all'altra, ho riscontrato l'errore che la macchina non è stata in grado di caricare i file .pdb di debug per ArcMap.exe. Ho provato ogni consiglio su questo post senza fortuna.

Quindi ho fatto quanto segue:

Ho eliminato i riferimenti per tutte le librerie Esri. * In ciascun progetto che li conteneva e li ho nuovamente aggiunti al progetto sulla nuova macchina.

Questo è ciò che alla fine ha funzionato per me. Se qualcuno si imbatte in questo vago problema e ha provato tutto il resto elencato in questa pagina, prova questo: è veloce, facile e abbastanza innocuo. Non sono del tutto sicuro del perché debba essere fatto, suppongo che abbia a che fare con la ricerca delle librerie per macchina.

Questo era per un progetto che utilizzava BaseCommands / Barre degli strumenti e non i nuovi componenti aggiuntivi. Utilizzo di ArcGIS 10.0 e .NET 3.5 con Visual Studio 2010 su Windows 7 Pro.


2

Per chi ha come target .Net 4.0 Framework, il seguito ha funzionato per me.

  1. Come da molti suggerimenti, modificare ArcMap.exe.config e ArcCatalog.exe.config sul framework di destinazione 4.0
    <?xml version="1.0" encoding="utf-8" ?> <configuration> <startup> <supportedRuntime version="v4.0.30319"/> <!--supportedRuntime version="v2.0.50727"/--> </startup>
    Per qualche motivo, ArcCatalog.exe.config sembra bloccato per la modifica. L'ho aggirato copiandolo e modificandolo in un'altra directory e poi sostituendolo.
  2. Quindi in Config.esriaddinx cambiare la lingua Addin in "CLR4.0"

1

Mi vengono in mente due possibili cause:

  1. Il componente aggiuntivo non è registrato correttamente quindi la DLL non viene caricata nel processo ArcMap in fase di debug.

  2. Il tuo progetto è destinato a .NET 4. Prova invece a utilizzare .NET 3.5.


Targeting .Net 3.5. Non capisco perché tutto dovrebbe funzionare bene e all'improvviso no.
Jakub Sisak GeoGraphics,

1

Se si codifica con più progetti nella stessa soluzione di Visual Studio, è possibile che si verifichino situazioni in cui Visual Studio (VS) "disabilita" i punti di interruzione e non si è in grado di scorrere il codice. Questo mi è successo di recente, dove non sono riuscito a entrare in un progetto di assemblaggio DLL "dipendente" che era stato chiamato dal mio progetto principale.

Gli avvisi VS hanno suggerito che il mio assembly (DLL) non era aggiornato e non corrispondeva esattamente al mio codice. Ci sono opzioni VS per disattivare il requisito di corrispondenza del codice, ma intuitivamente questa sembrava una cattiva idea ed era supportata da post su Internet. Ho letto molti siti Web e ci sono alcuni suggerimenti nodosi là fuori.

Alla fine ho fatto una ricerca della DLL di output dalla mia macchina dipendente e ho trovato diverse vecchie copie in varie posizioni sul mio computer (presumibilmente da precedenti esperimenti e configurazioni di progetto). Quindi li ho cancellati tutti e ho ricostruito la mia soluzione da zero. Questo ha risolto il mio problema. Immagino che il mio progetto attuale sia stato inavvertitamente associato a una delle vecchie copie in qualche modo e non usando l'ultima build che era stata inserita nella mia cartella di debug.


1

Ciò che ha funzionato per me non è stato eliminare arcmap.config.exe come descritto nel post di Jakub sopra, ma impostare il tag "supportRuntime" in questo file sulla versione corretta del Framework che si targetizza in Visual Studio, nel mio caso:

<startup>
    <supportedRuntime version="v3.5"/>
</startup> 

1

In numerosi progetti ArcObjects ho compilato un elenco di motivi per cui il debug potrebbe non funzionare per componenti aggiuntivi, estensioni e comandi (pre-componente aggiuntivo). Senza un ordine particolare:

  1. Sei in modalità di rilascio di Visual Studio anziché in modalità di debug
  2. Le vecchie versioni dello strumento sono ancora registrate con ArcMap / ArcCatalog e impediscono il caricamento della versione di debug oppure vengono registrati altri strumenti con lo stesso nome
  3. Il progetto / la soluzione deve essere pulito e, se necessario, andare in \ bin e \ obj ed eliminare tutti i file persistenti
  4. In alcuni casi i punti di interruzione possono essere colpiti solo dopo l'attivazione dello strumento (su richiesta)
  5. Se non vengono raggiunti punti di interruzione, è possibile che si stia verificando un'eccezione nel costruttore e lo strumento non viene mai eseguito. Verifica mostrando tutte le eccezioni CLR nel menu debug
  6. Le voci in C: \ Users \ <nome> \ Impostazioni locali \ ESRI \ DesktopX.X \ AssemblyCache devono essere eliminate

Molti passaggi richiedono il riavvio di ArcMap. Se tutto il resto fallisce, un riavvio della macchina è un semplice fallback, ma ho fatto solo una volta questo fare la differenza.



0

Mi è successo questo una o due volte. Se ricordo bene, sono stato in grado di far funzionare il punto di interruzione quando ho apportato una piccola modifica del codice, il che significa che l'applicazione è stata ricostruita. Cosa succede quando costruisci o ricostruisci il tuo progetto?


Ho provato a ricostruire il progetto e ho apportato diverse modifiche, ma i punti di interruzione erano "morti" ...
Jakub Sisak GeoGraphics,

0

Non posso credere che più persone non abbiano questo problema. Ora mi imbatto in questo quasi ogni volta che sto migliorando e debug i miei componenti aggiuntivi.

Nessuna delle soluzioni sopra menzionate funziona. Per risolvere questo problema, devo eliminare l'intero progetto e ripristinarlo dal backup. Questo mi porta a credere che qualcosa nel progetto particolare sia diventato corrotto poiché di solito inizia a verificarsi quando ArcMap si arresta in modo anomalo durante il debug.


Esistono processi ArcMap.exe persistenti? A volte componenti aggiuntivi, estensioni, comandi ecc. Possono trattenere una risorsa o causare una race condition che impedisce ad ArcMap di uscire completamente.
blah238,

Nessun processo ArcMap.exe in esecuzione. Ora ho una risposta dal personale ESRI per provare a rimuovere <supportRuntime version = "v2.0.50727" /> da arcmap.exe.config, nella directory bin. Tuttavia, non sono sicuro da dove sto rimuovendo questo elemento e ho appena ripristinato il mio progetto dal backup e ora funziona. Quando ne saprò di più su questa correzione, andrò in crash ArcMap durante il debug, il che di solito lo rende possibile e lo proverò.
Jakub Sisak GeoGraphics,

0

Stai creando il tuo progetto usando Framework 4? Ho avuto lo stesso problema, ma quando passo a Framework 3.5, funziona benissimo.


0

prova a pulire e ricostruire, quindi esegui senza eseguire il debug, quando l'applicazione viene collegata in VS


0

So che potrebbe sembrare troppo ovvio, ma menzionerò comunque che è necessario l'edizione appropriata di Visual Studio. Ad esempio, questo problema potrebbe verificarsi con un'edizione espressa di un determinato anno mentre potrebbe funzionare con un'edizione definitiva. Se stai usando diciamo 2010, prova a passare al 2012. Quindi prova a passare da express a ultimate. Lo farei se non lo avessi già fatto prima con i problemi di caricamento dei simboli. ESRI fornisce informazioni sul download dei simboli nella cache come indicato nel collegamento sopra (Guida di SDK di .NET ArcObjects 10). Tuttavia, questo potrebbe non essere necessario. Assicurati di utilizzare il framework .net appropriato anche prima di eseguire il debug, ad esempio .net 3.5 nelle versioni precedenti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.