Esri Addin für ArcCatalog kann nicht debuggt werden


8

Es war ein Münzwurf, ob es sich bei dieser Frage um eine GIS.SE- oder eine StackOverflow-Frage handelt ... Ich gehe mit GIS.SE, weil das Problem bei ArcCatalog zu liegen scheint.

Ich habe mehrere Addins, die für ArcCatalog (und auch ArcMap) geschrieben wurden. Früher konnte ich den Code mit F5-Debugging mithilfe von Haltepunkten debuggen. Jetzt sind alle meine Haltepunkte mit der Meldung inaktiv. Der Haltepunkt wird derzeit nicht erreicht. Für dieses Dokument wurden keine Symbole geladen :

Geben Sie hier die Bildbeschreibung ein

Ich habe die Vorschläge von Stack Overflow ausprobiert:

Behebung „Der Haltepunkt wird derzeit nicht erreicht. Für dieses Dokument wurden keine Symbole geladen. “

Dieser Haltepunkt wird derzeit nicht erreicht. Der Quellcode unterscheidet sich vom Original (auch nach dem Reinigen / Wiederherstellen).

Der Haltepunkt wird derzeit nicht erreicht. Für dieses Dokument wurden keine Symbole geladen

und auch

Warum kann der Haltepunkt beim Debuggen eines ArcGIS 10-Add-Ins nicht "getroffen" werden? Dies scheint jedoch ein anderes Problem zu sein.

Da dies ein Addin (DLL) ist, gibt es kein Startprojekt. Ich habe alle anderen Versionen gereinigt . Ich habe eine subtile Änderung an der Esriaddinx-Datei in der vorgenommen message=, um zu bestätigen, dass die Änderungen vorgenommen wurden - alles gut, es gibt keine ältere Version.

Während der Bereinigung habe ich festgestellt, dass Add-Ins für ArcCatalog an einen Ort kopiert werden, an %USERPROFILE%\Documents\ArcGIS\AddIns\Desktop10.X\{AddInID}\dem sich ArcMap-Add-Ins nicht befinden. Ich habe versucht, die PDF-Datei in den Add-In-Ordner zu kopieren, aber es scheint, dass der Code nicht mehr debuggt wird und ArcCatalog auf die Kopie umgeschaltet / umgeleitet wurde.

Gibt es eine Möglichkeit zum Debuggen mit Haltepunkt-Addins für ArcCatalog? Beachten Sie, dass ArcMap-Add-Ins und eigenständige Anwendungen problemlos debuggen.

Umgebung:

  • Windows 7 64bit
  • ArcGis 10.1
  • Visual Studio 2010 Professional (sowohl VB.net als auch C #)

Ich hatte ein ähnliches Problem mit ArcMap 10.3 in Kombination mit Visual Studio 2013. Ich habe dieselben Beiträge gefunden, die Sie erwähnt haben, und tatsächlich konnte ich an einem Punkt tatsächlich debuggen und einen Haltepunkt erreichen. Aber aus irgendeinem Grund hörte das nach einer Weile auf zu arbeiten, und ich konnte es auf keinen Fall wieder zum Laufen bringen. Schließlich habe ich das Zielframework in meinem Projekt von .Net 4.5 auf .Net 3.5 zurückgesetzt und die unterstützte Laufzeit in der .exe.config auf v2.0.50727 gesetzt. Das hat es für mich gelöst. Vielleicht verwendet Ihr ArcCatalog-Add-In 4.5 und das ArcMap One 3.5?
Berend

Das ist eine Möglichkeit @Berend. Das Zielframework (alle Konfigurationen) ist auf .NET Framework 3.5-Clientprofil eingestellt. Sollte dies ein 4- oder 4-Clientprofil sein? Dieses Tool ist sehr alt, ursprünglich in VB6 geschrieben. Es wurde in ArcGis 9.3 in .net konvertiert, das 3.5 verwendet. Als es in ein Add-In konvertiert wurde, wurde das Framework nicht geändert - es wurde kompiliert und lief in Ordnung, sodass ich das nicht sah müssen es ändern. Ich denke wirklich, dass Sie hier etwas vorhaben - etwas, das ich in den anderen Posts nicht gesehen habe.
Michael Stimson

DAS IST ES @Berend !!! Bitte schreibe das als Antwort, um dein Kopfgeld zu sammeln. Ich habe das Zielframework in .NET Framework 4-Clientprofil geändert und die Haltepunkte wurden aktiv. Ich wusste, dass es etwas Einfaches, aber gut Verstecktes geben musste, das ich übersah ... Vielen Dank . Jetzt kann ich diesen Code richtig debuggen.
Michael Stimson

Antworten:


2

Upgrade meines ersten Kommentars auf eine Antwort:

Ich hatte ein ähnliches Problem mit ArcMap 10.3 in Kombination mit Visual Studio 2013. Ich habe dieselben Beiträge gefunden, die @ michael-miles-stimulson erwähnt hat, und tatsächlich konnte ich an einem Punkt tatsächlich debuggen und einen Haltepunkt erreichen. Aber aus irgendeinem Grund hörte das nach einer Weile auf zu arbeiten, und ich konnte es auf keinen Fall wieder zum Laufen bringen.

Schließlich habe ich das Zielframework in meinem Projekt von .Net 4.5 auf .Net 3.5 zurückgesetzt und die unterstützte Laufzeit in der .exe.config auf v2.0.50727 festgelegt. Das hat es für mich gelöst.

Wenn das ArcCatalog-Add-In 4.5 und das ArcMap One-Add-In 3.5 verwendet, wird das in der Frage erläuterte Verhalten erläutert.

Ich denke nicht, dass es wichtig ist, wenn Sie die Client- oder Vollversion verwenden. Ich verwende immer die Vollversion, da mir an einem Punkt immer eine Klasse fehlt, die nicht in der Client-Version enthalten ist.


Danke Berend. Das hat das Problem total behoben, nimm das Kopfgeld mit meinen Komplimenten.
Michael Stimson

1

Während der Bereinigung habe ich festgestellt, dass Add-Ins für ArcCatalog nach% USERPROFILE% \ Documents \ ArcGIS \ AddIns \ Desktop10.X {AddInID} \ kopiert werden, wo dies bei ArcMap-Add-Ins nicht der Fall ist

Tatsächlich werden Arcmap-Addins auch nach der Installation (oder einem Build in Visual Studio) an diesen Speicherort kopiert.

Führen Sie die folgenden Schritte aus, um dieses Problem zu lösen:

  1. Reinigen Sie Ihre gesamte Lösung in Visual Studio, indem Sie mit der rechten Maustaste auf die Lösung klicken und "Lösung reinigen" wählen

  2. Wenn Ihr Arccatalog-Add-In-Projekt von anderen Assemblys von Drittanbietern abhängig ist, stellen Sie sicher, dass diese Assemblys PDF-Dateien (Symbol) neben sich haben

  3. Wenn Sie in Visual Studio andere Projekte in Ihrer Lösung haben, von denen Ihr Arccatalog-Projekt abhängig ist, fügen Sie deren Projektreferenz anstelle ihrer DLLs hinzu. wie dieses Bild:

Geben Sie hier die Bildbeschreibung ein


Ich habe die Bereinigung durchgeführt, das war eines der ersten Dinge, die ich getan habe. Es gibt keine anderen Projekte oder Assemblys von Drittanbietern (möglicherweise benötigt diese eine Excel-Bibliothek v12). Glauben Sie, dass die Excel-Objekte dieses Problem verursachen? Wenn ja, wie kann ich eine PDF-Datei dafür bekommen? Ich glaube nicht, dass Microsoft mir ihren Quellcode geben wird, unabhängig davon, wie alt diese Version ist.
Michael Stimson

Sehr gut möglich. Entfernen Sie einfach die Excel-Objekte, bereinigen Sie das Debug und wiederholen Sie den Vorgang.
Farid Cheraghi

Das Teilen von Quellcode von Microsoft ist eine Nr. Für pdb google es.
Farid Cheraghi

1
Das Excel / ArcObjects ist das, was ich zum Debuggen brauche. Aus irgendeinem Grund geht es durch das Blatt bis ungefähr X und stoppt. Ich weiß, dass ArcGis v10.x Excel-Tabellen unterstützt. Dieser Code und die zugehörigen Blätter stammen jedoch aus ArcGis 9.1 und sind nicht konform (die Kopfzeile befindet sich in Zeile 3). Dieser Beitrag enthielt Anweisungen zum Abrufen der pdb social.msdn.microsoft.com/Forums/office/en-US/…, also werde ich es versuchen .
Michael Stimson

1
Farid, wie sich herausstellte, war es eine .NET Framework-Version, die das Problem verursachte. Dies hat möglicherweise etwas damit zu tun, dass Excel das Spiel nicht mit der alten Version spielen möchte. Eines der vielen Microsoft-Updates hat möglicherweise die Möglichkeit beeinträchtigt, Excel 12-Objekte in .net 3.5 zu verwenden.
Michael Stimson

1

Ok, ich habe gerade überprüft, ob ich mit diesem Verfahren den Code schrittweise durchlaufen kann. Ich mache dies in ArcMap, aber ich denke, es sollte für ArcCatalog gelten, da sich der Prozess mit dem Debuggen von DLLs und nicht mit einem ESRI-spezifischen Element befasst. Ich habe dies sowohl in ArcMap 10.2.2 als auch in ArcCatalog 10.2.2 bestätigt. Da dies ein Windows-Prozess ist, der sich direkt mit DLLs befasst, sollten ESRI-Softwareversionen keine Rolle spielen.

Ich verwende Visual Studio, um an einen Prozess anzuhängen .

Ich kann mit diesem Prozess eine kompilierte Erweiterung (DLL) durchlaufen, wenn die DLL in einem anderen Programm aufgerufen wird.

Hier ist was ich tue ...

Öffnen Sie in Visual Studio Ihr Erweiterungsprojekt. Ich habe meine Erweiterung in VS 2010 C # Express erstellt, verwende dafür jedoch VS 2013 Ultimate. Ich bin nicht sicher, ob " An Prozess anhängen" in der 2010 Express-Version eine Option ist. Ich habe es nicht gesehen, aber es könnte irgendwo versteckt sein, da es die Express-Version war.

Öffnen Sie Ihr ESRI-Produkt und installieren Sie das Add-In. Klicken Sie nun in VS auf An Prozess anhängen und wählen Sie Ihren ESRI-Produktprozess aus. Meins war ArcMap.exe . Von hier aus sollte Visual Studio seinen Debugger an das Programm anhängen. Wenn die DLL ausgeführt wird, für die Sie geöffnet und Haltepunkte festgelegt haben, wird sie dort gestoppt. Dies funktioniert wie jedes andere Programm, das Sie in Visual Studio debuggen. Es kann einige Debug in einige der ESRI Artikel strecken , obwohl der Code die meisten ist wahrscheinlich so nicht so nützlich verschleiert.

Ich habe sichergestellt, dass ich das Add-In aus meinem Release-Verzeichnis für mein Projekt installiert habe. Soweit ich das beurteilen kann, kopiert ESRI die DLL nicht in einen ihrer Ordner, sondern verwendet ihr Esri Assembly Registration Utility , um den Speicherort der DLL zu registrieren, damit das System weiß, wo es zu finden ist, wenn auf ein ESRI-Produkt verwiesen wird.

Zu Ihrer Information: Ich verwende diesen Prozess, um Klassenbibliotheken zu debuggen, die ich in einem Projekt schreibe und die in einem anderen verwendet werden. Dieselbe Theorie sollte dort ESRI-Add-Ins anwenden, da es sich nur um Klassenbibliotheken (DLLs) handelt, die in ein anderes Programm aufgerufen werden. Abgesehen von Visual Studio sollte meines Erachtens jeder andere Windows-Debugger eine Verbindung zur DLL herstellen können.

BITTE poste Kommentare zu diesem Thema. Ich habe gedacht, dass dies für eine Weile funktionieren würde und bin sehr gespannt, wie andere mit dieser Methode fair umgehen.

BEARBEITEN Ich habe gerade ein neues ArcCatalog-Add-In erstellt, das aus einer einfachen Schaltfläche besteht. Ich habe string stophere = "debugger stopped!";im Ereignishandler eine Zeichenfolgenzuweisung für das Klickereignis der Schaltfläche hinzugefügt . In ArcCatalog wurde die Verwendung der Methode " An Prozess anhängen" nicht mehr verwendet . Informationen zu Visual Studio 2010 zum Prozess finden Sie hier .

In MSDN gibt es einige Dinge zum Debuggen von DLLs mit verschiedenen Methoden in Visual Studio und Windows Debugger. Ich persönlich finde das Anhängen an den Prozess besser als das Starten einer externen Programmmethode und auch besser als die Verwendung des Remote-Debuggers .

Der einzige Nachteil dieser Methode ist, dass Sie den F5- Ansatz verlieren, bei dem Sie direkt in Visual Studio debuggen. Nehmen Sie also Änderungen an Ihrem Code vor, installieren Sie das Update, starten Sie ArcCatalog, hängen Sie es an den Prozess an und treffen Sie dann Ihre Haltepunkte. Ich finde jedoch, dass diese Methode ziemlich gut zu wissen ist, falls Sie auf Probleme stoßen, wie Sie sie haben. Dieser Vorgang kann etwas länger dauern, ist jedoch eine todsichere Methode, um Ihre Ergebnisse zu erzielen.


Ich habe Visual Studio 2010 Professional , es gibt einen großen Unterschied zwischen ArcMap und ArcCatalog, wie in der Frage angegeben ... meine ArcMap-Addins debuggen einwandfrei. Als ich dies als COM-Code (ArcGis 9.3.1) schrieb, funktionierte es einwandfrei. Wenn ich darüber nachdenke, sollte ich sicherstellen, dass auch die sehr alten Esri-Erweiterungen (9.3.1) weg sind. Was haben Sie in Ihrem Kommentar zur Bearbeitung der Datei ArcCatalog.exe.config gesagt? Können Sie mir bitte das erste halbe Dutzend Zeilen zeigen? Versuchen Sie, ein ArcCatalog-Add-In zu erstellen, das nur sehr wenig bewirkt (msgbox sollte ausreichen), und prüfen Sie, ob Sie es debuggen können.
Michael Stimson

@ MichaelMiles-Stimson ... war dieser Kommentar für diese Antwort gedacht? Außerdem habe ich meine Frage bearbeitet, um weitere Informationen hinzuzufügen, und mit ArcCatalog getestet. Meine Methode funktioniert, aber Sie können F5 nicht in Visual Studio ausführen. Sie müssen ein wenig mehr arbeiten, aber dennoch das gleiche Ergebnis erzielen, ohne sich mit Konfigurationsdateien befassen zu müssen.
Branco

Branco, vielen Dank für Ihre nachdenkliche Antwort, aber wie sich herausstellte, war es eine .NET Framework-Version, die das Problem verursachte.
Michael Stimson

1

Dies ist eine Datei, die ich über ein paar Jahre mit ArcMap- und ArcCatalog-Erweiterungen und dann mit Add-Ins erstellt habe:

Dinge, die verhindern können, dass ArcMap Add-Ins in Visual Studio debuggt:

  • Release-Modus statt Debug-Modus (bei Verwendung eines alten Nicht-Add-In-Ansatzes kann dies ein Problem sein, da die DLL \ bin \ Debug höchstwahrscheinlich bei regasm registriert wurde, nicht bei \ bin \ Release
  • Alte Versionen von Tools in der Benutzeroberfläche verhindern das Laden der Debug-Version (Starten Sie ArcMap ohne Visual Studio, entfernen Sie alle Befehle und löschen Sie alle Add-Ins, schließen Sie ArcMap).
  • Gibt es eine Möglichkeit, dass die Nicht-Add-In-Version verwendet wird? Wenn nicht, muss die DLL registriert sein
  • Das Add-In muss zum Debuggen niemals manuell installiert werden
  • Bereinigen Sie die Lösung und das Projekt, durchsuchen Sie dann die Anwendungsdateien manuell und löschen Sie alle Inhalte / bin und / obj
  • Leeren Sie den Inhalt von C: \ Benutzer \ <NAME> \ Lokale Einstellungen \ ESRI \ Desktop10.0 \ AssemblyCache
  • Stellen Sie sicher, dass alle anderen Projekt- / Bin-Speicherorte, auf die ArcMap beim Debuggen zuvor / möglicherweise verwiesen hat, keine zuvor erstellten DLLs / Add-Ins mit demselben Namen haben wie die, die Sie debuggen möchten (dh Dot Net-Migration / Add-In-Version) Zusammenstoß)
  • In einigen Add-Ins sind Haltepunkte erst dann realisierbar, wenn auf die Schaltfläche des Tools geklickt wurde - dann wird sie initialisiert
  • Wenn überhaupt keine Haltepunkte erreicht werden, wird möglicherweise eine Ausnahme im Konstruktor ausgelöst und das Tool wird nicht ausgeführt. Überprüfen Sie dies, indem Sie alle CLR-Ausnahmen über das Debug-Menü -> Ausnahmen -> "Common Language Runtime Exceptions" anzeigen.
  • Wenn alles andere fehlschlägt, starten Sie neu

Vielen Dank für die Mühe tombumb, alle diese wurden in dem verlinkten Beitrag angesprochen. Berend hat die richtige Antwort (diesmal), da es nicht einer der üblichen Verdächtigen war.
Michael Stimson

0

Hier ist die Lösung:

Versuchen Sie, SupportedRuntime aus arcmap.exe.config im Verzeichnis bin zu entfernen.

Dies ist die XML-Datei \ ArcGIS \ Desktop10.0 \ bin \ arcmap.exe.config.

Warum kann der Haltepunkt beim Debuggen eines ArcGIS 10-Add-Ins nicht "getroffen" werden?


Ich habe diesen Beitrag in der Frage referenziert. Hier geht es nicht um ArcMap, das funktioniert einwandfrei, sondern um ArcCatalog, das das Problem verursacht. Trotzdem netter Versuch. Ich denke, ich muss ein Kopfgeld dafür anbieten.
Michael Stimson

Hi @ MichaelMiles-Stimson Haben Sie versucht, die Datei ArcCatalog.exe.config zu bearbeiten? Für das letzte Addin, das ich entwickelt habe, habe ich dieses <! - <supportedRuntime version = "v4.0.30319" /> -> auskommentiert und stattdessen dieses <supportedRuntime version = "v2.0.50727" />
rowanwins

Ich konnte <supportRuntime version = "v2.0.50727" /> nicht finden, um @rowanwins zu kommentieren. Angenommen, ich habe ein Backup und möchte stattdessen die Zeile löschen. Was steht im <startup> -Gehäuse? Gibt es einen Grund, warum diese Zeile auskommentiert ist?
Michael Stimson

Vielleicht könnten Sie das bei @rowanwins als Antwort einfügen, die zumindest einen Screenshot von dem, was Sie ausdrücken möchten, und möglicherweise noch ein paar Worte zulässt, und ich werde es morgen untersuchen ... Zeit zu Hause!
Michael Stimson

0

Einige offensichtliche Schritte (ich nehme an, Sie haben diese bereits ausprobiert ... aber immer noch).

  1. Überprüfen Sie, ob der Modus immer noch "Debug" ist, anstatt ihn freizugeben.
  2. Löschen Sie die Ordner "obj" und "bin" und erstellen Sie sie neu.

Ja, das getan. Das wurde auf einem der Stapelüberlaufpfosten erwähnt. Es muss etwas weniger offensichtliches sein.
Michael Stimson
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.