Почему точка останова не может быть «достигнута» при отладке надстройки ArcGIS 10?


24

Время от времени я сталкиваюсь со следующей проблемой:

Я начинаю отлаживать надстройку и точки останова игнорируются. Почти кажется, что связь между IDE и компонентом не работает.

Моя проблема в том, что в прошлый раз, когда это произошло, я решил это, и теперь я не могу вспомнить, что я сделал, чтобы это исправить.

Точка останова в настоящее время не будет достигнута. Для документа не было загружено никаких символов. введите описание изображения здесь

Частично проблема, которая у меня возникла, уже описана здесь, но нет решения для фактической неисправности точки останова.

Обратите внимание, что это нормально работает.

Удаление корзины и объекта, кажется, не работает.

На этот раз я просто восстановил весь проект из резервной копии и начал заново, но я хотел бы знать, как это исправить, если я столкнусь с этим снова.


1
Для атрибута xml onDemand установлено значение false в вашем файле конфигурации?
Кирк Куйкендалл

У меня нет однозначного ответа (хотя обычно это означает, что отладчик не может найти pdb-файл для загруженной dll), но вы можете попробовать проанализировать эти вопросы на SO, чтобы увидеть, двигают ли они вас в правильном направлении.
Майкл Тодд

@Kirk, я не вижу такого атрибута в файле config.esriaddinx.
Якуб Сисак Географическая графика

@ Майкл - спасибо. будет присматриваться. Проблема в том, что я могу добавлять функциональность в мою надстройку месяцами и успешно отлаживать ее, и внезапно точки останова не работают ...
Якуб Сисак GeoGraphics

2
У меня это тоже случалось несколько раз без видимой причины. Насколько я помню, удаление каталогов obj и bin разрешило это пару раз, копирование подозрительных pdb и dll в каталог bin текущего проекта работало пару раз и т. Д. Ничто, на что я могу указать, не будет работать каждый раз , хотя. Удачи.
Майкл Тодд

Ответы:


16

Вот неофициальное и до сих пор не проверенное решение от сотрудников ESRI. (Они подчеркнули, что это не официальное решение)

Попробуйте удалить из arcmap.exe.config в каталоге bin.

Это XML-файл \ ArcGIS \ Desktop10.0 \ bin \ arcmap.exe.config.

введите описание изображения здесь


3
На самом деле, это «задокументировано» здесь resources.arcgis.com/en/help/arcobjects-net/conceptualhelp/… Я столкнулся с этой проблемой при кодировании плагина ogr-workspace и в конечном итоге поместил его в FAQ для разработчиков github.com/ RBURHUM / arcgis-ogr
Раги Язер Бурхум

Это решило эту проблему для меня, а также еще одну проблему, из-за которой мои Debug.WriteLine()сообщения не отправлялись в окно вывода в VS 2010.
GeoSharp

Я снова столкнулся с этой проблемой, и это сработало на этот раз. Я использую VS 2010 Express (C #) и ориентируюсь на .NET 4.0. Мне пришлось раскомментировать версию v4.0, поддерживаемую во время выполнения, и удалить ссылку на v2.0.
Радар

8

2 года и 2 версия спустя, и это все еще проблема. Только что закончил обновлять / улучшать все мои надстройки для 10.2 и снова столкнулся с этой проблемой. Реализованы ВСЕ предложения в этом посте, но ничего не получилось, но я обнаружил еще одну возможную проблему . К сожалению, я не уверен, был ли это виновником или нет, потому что я также реализовал большинство других возможных исправлений одновременно.

Новая находка: я понял, что разрабатываю надстройки начиная с версии 10 на той же машине и после переустановки не всегда очищал устаревшие данные ArcGIS. Я обнаружил, что у меня была более старая версия надстройки виновника в предыдущей версии данных ArcGIS в C: \ Program Files (x86) \ ArcGIS. Поскольку ArcGIS загрузит устаревшие надстройки, возможно, возник конфликт. Я удалил все устаревшие данные приложения arcgis (Desktop10.0, Desktop10.1), оставив только Desktop10.2, и точка останова ожила. Опять же, я не на 100%, если это решение, но это может быть другой пункт в списке, чтобы проверить.

Я видел, как эту конкретную проблему называют «убийцей конечной производительности» на другом сайте, и я не мог согласиться с этим.

Подводя итог, вот мой текущий список дел для «мертвой» проблемы точки останова:

  1. Убедитесь, что я на самом деле работает надстройка. Недостаточно запустить приложение отладчиком - точка останова будет отображаться как «мертвая», пока я не запущу надстройку (кнопка, пункт меню и т. Д.)

  2. Удалите фодеры OBJ и BIN из каталога проекта.

  3. Удалите содержимое сборки: C: \ Users \ User \ AppData \ Local \ ESRI \ Desktop10.2 \ AssemblyCache

  4. Удалите все устаревшие данные сборки. (Если текущая версия - 10.2, удалите данные сборки Desktop10.0, Desktop10.1) Нет никаких доказательств того, что это помогает или является частью проблемы, но нет причины, по которой эти данные должны существовать, поэтому я удаляю их на всякий случай (C : \ Users \ User \ AppData \ Local \ ESRI)

  5. Согласно предложению поддержки ESRI; Измените XML-конфигурацию ArcCatalog и ArcMap (когда я пытался, она не работала сама по себе, но несколько человек рекомендовали это как решение, включая поддержку ESRI) Найдите ArcCatalog.exe.config и ArcMap.exe.config в C: \ Program Files ( x86) \ ArcGIS \ Desktop10.2 \ bin Откройте каждый xml в блокноте и удалите строку <supportedRuntime version="v2.0.50727"/> Это примерно пятая строка

  6. Удалите все устаревшие данные приложения ArcGIS из установочного каталога. Это то, что работает для меня. (возможно) Перейдите по адресу: C: \ Program Files (x86) \ ArcGIS. Удалите все папки, кроме текущих, для Desktop10.x (т. е. Desktop10.0, Desktop10.1). В этом месте должна оставаться только текущая версия Desktop.

  7. Удалите и повторно добавьте все ссылки на проекты, включая ссылки не-ESRI, выполните восстановление, повторите шаги 2 и 3, перекомпилируйте, запустите dbugger.

  8. Перезагрузите компьютер. (Это раньше работало в прошлом). Также было установлено, что это одно из рекомендованных решений по переполнению стека.

  9. В Config.esriaddinx - измените кнопку, чтобы включить onDemand = false: (совет Кирка - см. Выше). Лично для меня это не сработало.

  10. Перестройте проект с нуля. (Это работало для меня в прошлом.)


Якуб, у меня была похожая, но не связанная с этим проблема gis.stackexchange.com/questions/155016/… - оказывается, наследие тоже было проблемой. Версия фреймворка .net не была актуальной, поэтому, если вы попробовали все из них, но она все еще не работает, перейдите по ссылке, чтобы получить еще одну возможность.
Майкл Стимсон

5

Единственный раз, когда я получил это, это когда я открыл еще один экземпляр ArcMap и забыл закрыть его перед сборкой / отладкой. Если вы не закроете все экземпляры, используя сборку, тогда будет использоваться старый. Или что-то типа того.


Я попытался перезагрузить компьютер, открыв VS и запустив отладчик, не открывая другие экземпляры ArcMap. Он запустил ArcMap, как обычно, но проблема «мертвой точки останова» сохранялась.
Якуб Сисак GeoGraphics

так что я просто установил ArcGIS и Visual Studio на другую машину (все чистые установки), и то же самое начало происходить снова. Я попробовал предложение каждого, и вы, кажется, правы. Я убедился, что убил все открытые процессы ArcGIS, и когда я это сделаю, точки останова сработают.
Якуб Сисак География

5

Поскольку мой проект .NET Framework версии 4.0, я перешел на supportedRuntime version="v4.0.30319"ArcMap.exe.config и заметил, что это изменение было отложено. Я также вспомнил, что ArcMap также загружает ArcCatalog, поэтому я также изменил ArcCatalog.exe.config на supportedRuntime version="v4.0.30319"YES !!! Это снова работает. Я провел весь день, пытаясь это исправить, и я надеюсь, что это сработает и для вас.


1
Мне пришлось удалить также папки bin и obj.
Сабин Коларов

4

Я некоторое время пробовал приведенные выше предложения и, наконец, нашел решение. Переходя к преследованию, я сначала дам решение, а затем объяснение:

  1. Откройте диспетчер задач. Завершить процесс для любой копии ArcMap.exe.

  2. Откройте проводник Windows. Перейдите к C: \ Users \\ Local Settings \ ESRI \ Desktop10 ..

  3. Если вы не видите AssemblyCache, выберите «Упорядочить»> «Папка и параметры поиска»> «Просмотр»> снимите флажок «Скрыть защищенные файлы операционной системы (рекомендуется)»

  4. В каталогах в AssemblyCache найдите тот, который содержит ваш .dll.

  5. Удалить .dll.

  6. Перестройте проект и отладьте. Как только ваше дополнение активируется, вы должны увидеть, что содержимое кэша обновляется.

  7. При желании повторно скрыть защищенные файлы ОС.

Проблема для меня заключалась в том, что в папке C: \ Users \\ Local Settings \ ESRI \ DesktopX.X \ AssemblyCache \ был старый экземпляр моей DLL, и я также не мог видеть \ AssemblyCache, потому что я не понимал, это был скрытый файл ОС. Был также запущен экземпляр зомби ArcMap, и когда я попытался удалить DLL, она была заблокирована. Я подозреваю, что в первую очередь проблема была в том, что я не совсем закрыл сеанс отладки ArcMap, прежде чем перекомпилировать код и запустить другой. Старая DLL в кеше не может быть перезаписана, потому что старый экземпляр ArcMap все еще заблокировал ее, и как только она вышла из синхронизации с новым кодом, кэшированная версия больше не обновлялась. (По датам файлов я вижу, что .config, .pdb и .xml обновляются, но не .dll.)


Да, это звучит как правильный обходной путь.
Якуб Сисак GeoGraphics

2

Я имел дело с той же проблемой, с моей собственной надстройкой в ​​совершенно другой теме, и я исследовал следующее:

Сначала запустите debug и в меню выберите следующее окно Debug >> Windows >> Modules, где вы можете увидеть, какие модули были загружены при запуске отладки. Если вы не видите там yourAddIn.dll, то, по крайней мере, вы знаете, что он не был загружен студией. Если вы видите там и не можете установить точку останова, то Studio загрузила старую. Чтобы проверить это, измените имя сборки в свойствах проекта, перестройте решение, запустите отладку, и вы увидите старую DLL, загруженную туда. Я не знаю, откуда студия загружает эту старую DLL.

Перейдите в обозреватель решений и проверьте сравнение файлов «yourAddIn.Addin» и «yourAddIn - For Testing.AddIn», и они могут отличаться. Студия использует только 2-й файл в своем менеджере надстроек! При первом изменении также измените тег в нем, чтобы он ссылался на правильную DLL, и вы также можете проверить тег. Для меня значение было установлено обратно на 0 в файле «yourAddIn - For Testing.AddIn», поэтому я изменил его обратно на 1. (Если вы удалите каталог bin своей надстройки и запустите студию, она спросит вас и спросит что вы хотели бы удалить эту надстройку из списка надстроек! На этом этапе Studio устанавливает LoadBehavior равным 0.)

После этих двух изменений он снова начал работать!


Спасибо за то, что поделились своим опытом и предоставили нам подробную информацию. Добро пожаловать в наше сообщество!
whuber

2

В Visual Studio я создал новую надстройку для Arcmap и добавил к ней кнопку и панель инструментов. В результате файл конфигурации выглядит следующим образом:

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

Я создал некоторый код в конструкторе для Button и установил в нем точку останова. Я начал в режиме отладки и вижу, что сборка еще не загружена:

введите описание изображения здесь

Я изменил кнопку, чтобы включить onDemand = false:

введите описание изображения здесь

Когда я снова запустил arcmap, он достиг точки останова. Обратите внимание, что если при запуске панель инструментов отключена, вам нужно сделать ее видимой, чтобы вызвать вызов конструктора кнопки - так что в некоторых случаях она все еще по требованию.


Спасибо @Kirk. Поскольку я восстановил свой проект из резервной копии, похоже, он работает. Я обычно отлаживаю процедуру, которая находится дальше по дороге; то есть вызывается нажатием даже кнопки, которая была на этот раз. Я почти уверен, что сборка уже загружена на данный момент. (или должно быть, но не по какой-то причине) Я обязательно попробую это решение в следующий раз, когда это произойдет.
Якуб Сисак Географическая графика

2

Пришлось изменить мой плагин для arcCatalog, чтобы он соответствовал с помощью framework 4 с новой версией ArcCatalog 10.1.
Просто закомментировал версию = "v2.0.50727" и раскомментировал "v4.0.30319"

В C: \ Program Files (x86) \ ArcGIS \ Desktop10.1 \ bin конфигурационный файл ArcCatlog.exe xml

останавливается на точке останова сейчас

Кажется, такая же проблема с arcmap


2

После того, как я перенес проект ESRI ArcGIS 10 с одного компьютера на другой, я столкнулся с ошибкой, что машина не может загрузить отладочные файлы .pdb для ArcMap.exe. Я попробовал каждый совет на этом посту без какой-либо удачи.

Затем я сделал следующее:

Я удалил ссылки для всех библиотек Esri. * В каждом проекте, который их содержал, и повторно добавил их в проект на новом компьютере.

Это то, что в итоге сработало для меня. Если кто-то споткнется здесь с этой неясной проблемой и попробует все остальное, перечисленное на этой странице, попробуйте это - это быстро, легко и довольно безопасно. Я не совсем уверен, почему это нужно было сделать, я предполагаю, что это связано с поиском библиотек для каждой машины.

Это было для проекта, который использовал BaseCommands / Toolbars, а не новые надстройки. Использование ArcGIS 10.0 и .NET 3.5 с Visual Studio 2010 в Windows 7 Pro.


2

Для тех, кто ориентируется на .Net 4.0 Framework, у меня работает следующее.

  1. Согласно многим предложениям, измените ArcMap.exe.config и ArcCatalog.exe.config для целевой платформы 4.0.
    <?xml version="1.0" encoding="utf-8" ?> <configuration> <startup> <supportedRuntime version="v4.0.30319"/> <!--supportedRuntime version="v2.0.50727"/--> </startup>
    По какой-то причине ArcCatalog.exe.config кажется заблокированным для изменения. Я справился с этим, скопировав и изменив его в другом каталоге, а затем заменив.
  2. Затем в Config.esriaddinx измените язык надстройки на "CLR4.0"

1

На ум приходят две возможные причины:

  1. Надстройка не зарегистрирована должным образом, поэтому DLL не загружается в отлаживаемый процесс ArcMap.

  2. Ваш проект нацелен на .NET 4. Вместо этого попробуйте нацелиться на .NET 3.5.


Таргетинг .Net 3.5. Я просто не понимаю, почему все будет работать нормально, а вдруг - нет.
Якуб Сисак Географическая графика

1

Если вы программируете с несколькими проектами в одном и том же решении Visual Studio, вы можете столкнуться с ситуациями, когда Visual Studio (VS) «отключает» ваши точки останова, и вы не можете выполнить пошаговое выполнение кода. Это недавно произошло со мной, когда я не смог войти в «зависимый» проект сборки DLL, который вызывался из моего основного проекта.

Предупреждения VS указывают на то, что моя сборка (DLL) устарела и точно не соответствует моему коду. Существуют опции VS, чтобы отключить требование соответствия кода, но интуитивно это казалось плохой идеей и было подкреплено сообщениями в Интернете. Я читаю много веб-сайтов, и там есть несколько грубых предложений.

В конце концов я выполнил поиск выходной DLL-библиотеки с моего зависимого компьютера и обнаружил несколько старых копий в разных местах на моем компьютере (предположительно из более ранних экспериментов и конфигураций проекта). Поэтому я удалил их все и перестроил свое решение с нуля. Это исправило мою проблему. Я предполагаю, что мой текущий проект каким-то образом случайно привязался к одной из старых копий и не использовал последнюю сборку, которая была помещена в мою папку отладки.


1

Для меня сработало не удаление arcmap.config.exe, как описано в посте Jakub выше, а установка в этом файле тега «SupportRuntime» для правильной версии Framework, на которую вы ориентируетесь в Visual Studio, в моем случае:

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

1

В ряде проектов ArcObjects я составил список причин, по которым отладка может не работать для надстроек, расширений и команд (предварительная надстройка). В произвольном порядке:

  1. Вы находитесь в режиме выпуска Visual Studio вместо режима отладки
  2. Старые версии инструмента по-прежнему зарегистрированы в ArcMap / ArcCatalog, и они препятствуют загрузке вашей отладочной версии или регистрируются другие инструменты с тем же именем.
  3. Project / Solution требует очистки, и при необходимости перейдите в \ bin и \ obj и удалите все оставшиеся файлы
  4. В некоторых случаях точки останова могут быть достигнуты только после активации инструмента (по требованию)
  5. Если точки прерывания не достигнуты, возможно, в конструкторе происходит исключение, и инструмент никогда не запускается. Проверьте, показывая все исключения CLR в меню отладки
  6. Записи в C: \ Users \ <имя> \ Local Settings \ ESRI \ DesktopX.X \ AssemblyCache необходимо удалить

Для многих шагов требуется перезапуск ArcMap. Если все остальное терпит неудачу, перезапуск машины - легкий запасной вариант, но я только однажды сделал это имеет значение.


1

То, что сработало для меня, было описано AnthonyWJones в /programming/7192361/silverlight-project-wont-enter-debug-mode : «Откройте свойства соответствующего веб-проекта. Выберите вкладку« Веб ». внизу и в разделе «Отладчики» убедитесь, что «Silverlight» установлен. »


0

Я имел это случиться со мной один или два раза. Если я правильно помню, мне удалось заставить точку останова работать, когда я сделал небольшое изменение кода, что означало, что приложение было перестроено. Что происходит, когда вы строите или перестраиваете свой проект?


Я попытался перестроить проект и сделал несколько изменений, но точки останова были «мертвы» ...
Якуб Сисак Географическая графика

0

Я не могу поверить, что больше людей не имеют этой проблемы. Теперь я сталкиваюсь с этим почти каждый раз, когда улучшаю и отлаживаю свои надстройки.

Ни одно из вышеупомянутых решений не работает. Чтобы это исправить, мне нужно удалить весь проект и восстановить его из резервной копии. Это наводит меня на мысль, что что-то в конкретном проекте стало поврежденным, поскольку обычно это происходит, когда ArcMap дает сбой во время отладки.


Существуют ли длительные процессы ArcMap.exe? Иногда надстройки, расширения, команды и т. Д. Могут удерживать ресурс или вызывать состояние гонки, препятствующее полному выходу из ArcMap.
blah238

Процессы ArcMap.exe не запущены. Теперь у меня есть ответ от сотрудников ESRI: попробуйте удалить <supportRuntime version = "v2.0.50727" /> из arcmap.exe.config в каталоге bin. Однако я не уверен, откуда я удаляю этот элемент, и я только что восстановил свой проект из резервной копии, и теперь он работает. Когда я узнаю больше об этом исправлении, во время отладки произойдет сбой ArcMap, что обычно делает это и дает ему попытку.
Якуб Сисак География

0

Вы создаете свой проект с использованием Framework 4? У меня была такая же проблема, но когда я переключаюсь на Framework 3.5, он работает нормально.


0

попробуйте очистить и перестроить, а затем запустить без отладки, когда приложение работает, подключите его в VS


0

Я знаю, что это может показаться слишком очевидным, но я все равно упомяну, что вам нужна соответствующая версия Visual Studio. Например, эта проблема может возникнуть с экспресс-выпуском данного года, в то время как она может работать с окончательной версией. Если вы используете, скажем, 2010, попробуйте перейти на 2012 год. Затем попробуйте переключиться с экспресс-на конечную. Я бы сделал это, если вы еще не сталкивались с проблемами загрузки символов. ESRI предоставляет информацию о загрузке символов в кэш, как указано в ссылке выше (Справка ArcObjects 10 .NET SDK). Тем не менее, это не может быть необходимым. Убедитесь, что вы используете соответствующую .net Framework также до отладки, например .net 3.5 в более старых выпусках.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.