有时我会遇到以下问题:

我开始调试加载项,并且断点被忽略。 IDE和组件之间的通信似乎几乎无法正常工作。

我的问题是,上一次发生此问题时,我已解决了该问题,但现在我不记得该如何解决此问题了。

当前不会找到断点。没有为该文档加载任何符号。


部分地,这里已经描述了我遇到的问题,但是对于实际的断点故障没有解决方案。

请注意,这通常可以正常工作。

删除bin和obj似乎不起作用。

这次我只是恢复了整个工作项目从备份开始并重新开始,但是我想知道如何解决这个问题,如果我再次遇到这个问题。

评论

配置文件中的“ onDemand” xml属性是否设置为false?

我没有明确的答案(尽管通常这意味着调试器无法找到已加载dll的pdb文件),但是您可以尝试在SO上筛选这些问题,以查看它们是否朝着正确的方向发展。

@柯克,我在config.esriaddinx文件中看不到这样的属性。

@Michael-谢谢。会仔细看看。问题是我可以在几个月内向我的外接程序添加功能,然后愉快地进行调试,突然断点不起作用...

我也曾无缘无故地发生过几次。如果我记得,删除obj和bin目录可以解决几次,将可疑的pdb和dll复制到当前项目的bin目录中可以工作几次,等等。我无法指出的是,每次都可以,虽然。祝你好运。

#1 楼

这是ESRI员工提供的非官方且未经测试的解决方案。 (他们确实强调说这不是一个官方解决方案)

尝试从bin目录中的arcmap.exe.config中删除。

这是\ ArcGIS \ Desktop10。 0 \ bin \ arcmap.exe.config xml文件。



评论


实际上,它在这里是“文档化”的resources.arcgis.com/en/help/arcobjects-net/conceptualhelp / ...我在编码ogr-workspace插件时遇到了这个问题,最终将其放在开发人员常见问题解答github.com/中RBURHUM / arcgis-ogr

–拉吉·亚瑟(Ragi Yaser Burhum)
2012年10月26日22:09

这为我解决了这个问题,还有另一个我的Debug.WriteLine()消息没有发送到VS 2010中的输出窗口的问题。

– GeoSharp
2014年4月4日在1:41

我又遇到了这个问题,这是这次的工作。我正在运行VS 2010 Express(C#),目标是.NET 4.0。我必须取消对v4.0支持的运行时版本的注释,并删除v2.0参考。

–雷达
15年4月27日在18:53

#2 楼

2年和2版本之后,这仍然是一个问题。刚完成更新/改进我的10.2版所有插件,再次遇到了这个问题。在这篇文章中实现了所有建议,但没有任何效果,但是我发现了另外1个可能的问题。不幸的是,我不确定这是否是罪魁祸首,因为我同时也实现了其他大多数可能的修复程序。

新发现:我意识到自版本10以来,我一直在同一台计算机上开发Addins,并且在重新安装后并不总是清除旧版ArcGIS数据。我发现在C:\ Program Files(x86)\ ArcGIS中的ArcGIS数据的早期版本中,有一个较旧的“罪魁祸首”插件。由于ArcGIS将加载旧版外接程序,因此可能存在某种冲突。我删除了所有旧版arcgis应用程序数据(Desktop10.0,Desktop10.1),仅保留了Desktop10.2,断点栩栩如生。同样,如果这是解决方案,我不是100%,但它可能是列表中要检查的另一项。

我已经看到这个特殊的问题在另一个站点上被称为“最终的生产力杀手”,我对此表示同意。

总结一下,这是我目前对-列出“死”断点问题:


确保,我实际上正在运行插件。调试器无法启动应用程序-断点将显示为“死”,直到我运行插件(按钮,菜单选项等)。
从项目目录中删除OBJ和BIN推子。
删除组装文件的内容:C:\ Users \ User \ AppData \ Local \ ESRI \ Desktop10.2 \ AssemblyCache
删除所有旧程序集数据。 (如果当前版本为10.2,请删除Desktop10.0,Desktop10.1组装数据)没有证据表明这有帮助或是问题的一部分,但是没有理由需要此数据,因此我删除它是为了以防万一(C :\ Users \ User \ AppData \ Local \ ESRI)
根据ESRI的支持建议;更改ArcCatalog和ArcMap配置XML(当我尝试时,它本身不能工作,但是有几个人将其推荐为解决方案,包括ESRI支持)在C中找到ArcCatalog.exe.config和ArcMap.exe.config
: \ Program Files(x86)\ ArcGIS \ Desktop10.2 \ bin
在记事本中打开每个xml并删除行<supportedRuntime version="v2.0.50727"/>
这是第五行
从安装中删除所有旧版ArcGIS应用程序数据目录。这对我有用。 (可能)转到:C:\ Program Files(x86)\ ArcGIS
删除Desktop10.x的所有文件夹(当前文件夹除外)(即Desktop10.0,Desktop10.1),仅将当前的Desktop版本保留在该位置。
重新启动计算机。 (过去曾有过类似的工作)也发现这是Stack Overflow上推荐的解决方案之一。
在Config.esriaddinx中-将按钮更改为包括onDemand = false :(柯克的建议-参见上文),这对我个人而言并不起作用。
从头开始重建项目。 (过去对我有用。)


评论


雅库布(Jakub),我有一个类似但无关的问题gis.stackexchange.com/questions/155016/…-事实证明,遗产也是一个问题。 .net框架版本不是最新的,因此,如果您尝试了所有这些版本,但仍无法正常工作,请通过链接查找另一种可能性。

–迈克尔·斯廷森(Michael Stimson)
15年7月29日在21:53

#3 楼

我唯一得到的时间是当我打开另一个ArcMap实例并忘记在构建/调试之前将其关闭时。如果您没有关闭使用该程序集的所有实例,那么旧的实例将继续使用。或类似的东西。

评论


我尝试在不打开ArcMap的任何其他实例的情况下重新启动计算机,打开VS并运行调试器。它按照常规方式启动了ArcMap,但“死点”问题仍然存在。

–雅库布·西萨克地理图形学
11年8月16日在0:15

所以我只是在另一台机器上安装了ArcGIS和Visual Studio(全部全新安装),并且同一件事再次开始发生。我尝试了每个人的建议,您似乎是正确的。我确保杀死所有打开的ArcGIS进程,并且在这样做时可以使用断点。

–雅库布·西萨克地理图形学
2011年9月2日,0:24

#4 楼

由于项目的.NET Framework为4.0,因此我在ArcMap.exe.config中更改为supportedRuntime version="v4.0.30319",并且我注意到此更改延迟了问题。我还记得ArcMap还可以加载ArcCatalog,因此我也将ArcCatalog.exe.config更改为supportedRuntime version="v4.0.30319"和YES!再次正常工作。我花了一整天的时间来解决此问题,希望它也对您有用。

评论


我还必须删除bin和obj文件夹。

– Sabin Kolarov
2012年10月27日6:49

#5 楼

我尝试了上述建议一段时间,终于找到了解决方案。紧追其后,我将首先提供解决方案,然后给出解释:


打开任务管理器。结束所有ArcMap.exe副本的处理。
打开Windows资源管理器。导航到C:\ Users \\ Local Settings \ ESRI \ Desktop10。.
如果看不到AssemblyCache,请整理>文件夹和搜索选项>视图>取消选中“隐藏受保护的操作系统文件(推荐)”
在AssemblyCache的目录中,查找包含.dll的目录。
删除.dll。
重建项目并调试。加载项激活后,您应该会看到缓存内容得到刷新。
如果需要,请重新隐藏受保护的OS文件。

对我来说,问题是我的旧实例C:\ Users \\ Local Settings \ ESRI \ DesktopX.X \ AssemblyCache \文件夹中的DLL,我也看不到\ AssemblyCache,因为我没有意识到这是一个隐藏的OS文件。还有一个正在运行的ArcMap僵尸实例,当我最初尝试删除DLL时,它已被锁定。我的怀疑是,首先导致问题的原因是,在重新编译代码并启动另一个代码之前,我没有完全关闭ArcMap的调试会话。缓存中的旧DLL无法覆盖,因为旧的ArcMap实例仍将其锁定,并且一旦与新代码不同步,缓存的版本就不再更新。 (我可以通过文件日期看到正在更新.config,.pdb和.xml,而不是.dll。)

评论


是的,这听起来像是正确的解决方法。

–雅库布·西萨克地理图形学
13年1月8日在16:03

#6 楼

我正在处理相同的问题,但在其他主题中使用了自己的加载项,因此完成了以下工作:

首先,开始调试,然后在菜单中选择以下窗口调试>> Windows >>模块,您可以在其中查看调试启动时加载了哪些模块。如果您在此处看不到yourAddIn.dll,那么至少您知道它没有被Studio加载。如果您看到那里并且无法在此处放置断点,则Studio加载了一个旧的。要检查这一点,请在项目属性中更改程序集的名称,重新生成解决方案,开始调试,然后您将看到旧的dll加载在那里。我不知道工作室是从哪里在哪里加载此旧dll的。

转到解决方案资源管理器,检查比较“ yourAddIn.Addin”和“ yourAddIn-用于Testing.AddIn”文件,它们可能不同。 Studio在其插件管理器中仅使用第二个文件!第一次更改还要更改其中的标签以引用正确的dll,您也可以检查该标签。对我来说,在“ yourAddIn-For Testing.AddIn”文件中将其设置为0,所以我将其更改为1。
(如果删除加载项的bin目录并启动studio,它将提示您,并询问您是否要从加载项列表中删除此加载项!此时Studio将LoadBehavior设置为0。)

在这两项更改之后,它又开始工作!

评论


感谢您分享您的经验,并乐意为我们提供详细信息。欢迎来到我们的社区!

– hu
2012年1月24日15:25

#7 楼

使用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时,它达到了断点。请注意,如果工具栏在启动时处于关闭状态,则需要使其可见以导致调用按钮构造函数-因此在某些方面它仍处于需求状态。

评论


谢谢@柯克。由于我已经从备份还原了项目,因此现在看来可以正常工作了。我通常会调试一个更进一步的过程。也就是说,即使是点击一次按钮,也是如此。我很确定这时程序集已经加载。 (或者应该是,但不是出于某种原因)我肯定会在下次发生这种情况时尝试此解决方案。

–雅库布·西萨克地理图形学
2011年8月15日在23:57



#8 楼

不得不更改我的arcCatalog插件,以使用框架4与新的10.1版本的ArcCatalog匹配。

C:\ Program Files(x86)\ ArcGIS \ Desktop10.1 \ bin
ArcCatlog.exe xml配置文件

现在在断点处停止

似乎与arcmap是相同的问题

#9 楼

将ESRI ArcGIS 10项目从一台计算机迁移到另一台计算机后,我遇到了该计算机无法为ArcMap.exe加载调试.pdb文件的错误。我尝试了这篇文章的每条建议,但没有任何运气。

然后我做了以下事情:

我删除了每个项目中所有Esri。*库的引用。包含它们,然后将它们重新添加到新计算机上的项目中。

这终于对我有用。如果有人在这个模糊的问题上迷路了,并且尝试过此页面上列出的所有其他内容,请尝试执行此操作-快速,轻松且无害。我不确定为什么要这样做,我想这与在每台计算机上查找库有关。

这是针对使用BaseCommands / Toolbars的项目,而不是新的加载项。在Windows 7 Pro上将ArcGIS 10.0和.NET 3.5与Visual Studio 2010结合使用。

#10 楼

对于那些针对.Net 4.0 Framework的用户,以下对我有用。


根据许多建议,将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似乎已锁定,无法修改。我通过在其他目录中复制和修改它,然后替换它来解决它。
然后在Config.esriaddinx中将Addin语言更改为"CLR4.0"


#11 楼

我想到了两个可能的原因:


该外接程序未正确注册,因此DLL不会加载到正在调试的ArcMap进程中。
您的项目面向.NET 4.尝试改用.NET 3.5。


评论


面向.Net 3.5。我只是不明白为什么一切都可以正常工作,而突然之间却没有。

–雅库布·西萨克地理图形学
2011年8月15日在20:02



#12 楼

如果在同一个Visual Studio解决方案中使用多个项目进行编码,则可能会遇到Visual Studio(VS)“禁用”断点且无法单步执行代码的情况。这是最近发生的事情,我无法进入从主项目中调用的“依赖” DLL程序集项目。

VS警告表明我的程序集(DLL)已过时且与我的代码不完全匹配。有VS选项可以关闭代码匹配的要求,但从直觉上来说,这似乎是一个坏主意,并且得到了Internet帖子的支持。我阅读了许多网站,并且那里有一些粗糙的建议。

最后,我从从属计算机中搜索了输出DLL,并在计算机的不同位置找到了一些旧副本(大概是来自早期的实验和项目配置)。所以我删除了所有这些,并从头开始重建我的解决方案。这解决了我的问题。我想我当前的项目无意中绑定到了一个旧副本,并且没有使用放置在调试文件夹中的最新版本。

#13 楼

对我有用的方法不是按照上述Jakub的帖子中所述删除arcmap.config.exe,而是将此文件中的“ supportedRuntime”标记设置为您在Visual Studio中定位的Framework的正确版本,我的情况是:

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


#14 楼

在多个ArcObjects项目中,我汇总了调试可能不适用于加载项,扩展名和命令(预加载项)的原因的列表。
没有特别的顺序:


您处于Visual Studio的Release模式,而不是Debug模式。
该工具的旧版本仍在ArcMap / ArcCatalog中注册,这些阻止了您的调试版本无法加载,或注册了其他相同名称的工具
项目/解决方案需要清理,并且如有必要,请进入\ bin和\ obj并删除任何残留的文件
在某些情况下,断点只能是激活工具后(按需)命中
如果未命中断点,则可能在构造函数中发生异常,并且该工具永远无法运行。通过在调试菜单中显示所有CLR异常来检查
C:\ Users \ <名称> \ Local Settings \ ESRI \ DesktopX.X \ AssemblyCache中的条目需要删除

许多步骤要求使用ArcMap重新启动。如果所有其他方法均失败,则重新启动计算机很容易,但我只有一次有所作为。

#15 楼

AnthonyWJones在
https://stackoverflow.com/questions/7192361/silverlight-project-wont-enter-debug-mode中描述了对我有用的方法:“打开关联的Web项目的属性。选择Web Tab。滚动到底部,然后在“调试器”部分中确保选中“ Silverlight”。”

#16 楼

我曾经一两次发生这种情况。如果我没记错的话,我在进行较小的代码更改时就能够使断点正常工作,这意味着应用程序已重建。构建或重建项目时会发生什么?

评论


我尝试重建项目并进行了一些更改,但断点仍然“死”了。

–雅库布·西萨克地理图形学
2011年8月15日23:59

#17 楼

我不敢相信会有更多的人没有这个问题。现在,几乎每次我在改进和调试加载项时都会遇到此问题。

上述解决方案均无效。要解决此问题,我需要删除整个项目并从备份中还原它。这使我相信特定项目中的某些东西已经损坏,因为它通常是在调试期间ArcMap崩溃时开始发生的。

评论


是否有缠绵的ArcMap.exe进程?有时,加载项,扩展名,命令等可能会占用资源或导致竞争状况,从而阻止ArcMap完全退出。

–blah238
11-10-25在21:16

没有ArcMap.exe进程正在运行。我现在收到ESRI工作人员的答复,要求尝试从bin目录中的arcmap.exe.config中删除。但是,我不确定从哪儿删除该项目,而我刚刚从备份中恢复了我的项目,它现在可以工作了。当我更多地了解此修复程序时,我将在调试过程中使ArcMap崩溃,这通常会使这种情况发生,并将尝试一下。

–雅库布·西萨克地理图形学
2011-10-26 13:12



#18 楼

您是在使用Framework 4创建项目吗?
我遇到了同样的问题,但是当我切换到Framework 3.5时,它工作正常。

#19 楼




尝试清理并重建,然后在不调试的情况下运行,当应用程序运行时将其附加到VS

#20 楼

我知道这听起来似乎太明显了,但是无论如何我都会提到这是您需要适当版本的Visual Studio。例如,给定年份的速成版可能会出现此问题,而最终版可能会出现此问题。如果您使用的是2010年,请尝试切换到2012年。然后尝试从Express切换到Ultimate。如果您还没有解决符号加载问题,我会这样做。 ESRI确实提供了有关将符号下载到缓存的信息,如上面的链接所述(ArcObjects 10 .NET SDK帮助)。但是,这可能不是必需的。调试之前,请确保还使用适当的.net框架,例如,旧版本上的.net 3.5。另外,请确保在调试类别下的项目属性中,您指向驻留在桌面bin文件夹中的arcmap exe的路径,尽管在开始加载项时无论如何都应位于该路径。