Por que o ponto de interrupção não pode ser "atingido" ao depurar um complemento do ArcGIS 10?

24

De vez em quando, encontro o seguinte problema:

Começo a depurar o suplemento e os pontos de interrupção são ignorados. Quase parece que a comunicação entre o IDE e o componente não está funcionando.

Meu problema é que, na última vez em que isso aconteceu, resolvi o problema e agora não consigo me lembrar do que fiz para corrigi-lo.

O ponto de interrupção não será atingido no momento. Nenhum símbolo foi carregado para o documento. insira a descrição da imagem aqui

Em parte, o problema que eu estou tendo já está descrito aqui, mas não há solução para o mau funcionamento real do ponto de interrupção.

Observe que isso normalmente funciona.

Excluir a lixeira e o objeto não parece funcionar.

Dessa vez, restaurei todo o meu projeto do backup e iniciei novamente, mas gostaria de saber como corrigir isso, caso me depare com isso novamente.

Jakub Sisak GeoGraphics
fonte
11
O atributo xml "onDemand" está definido como false no seu arquivo de configuração?
precisa saber é o seguinte
Não tenho uma resposta definitiva (embora isso normalmente signifique que o depurador não consegue encontrar o arquivo pdb para a dll carregada), mas você pode tentar examinar essas questões no SO para ver se elas o movem na direção certa.
Michael Todd
@ Kirk, não vejo esse atributo no arquivo config.esriaddinx.
Jakub Sisak GeoGraphics
@ Michael - obrigado. vai dar uma olhada. O problema é que eu posso adicionar funcionalidades ao meu suplemento por meses e, felizmente, depurar e pontos de interrupção
repentinamente
2
Já aconteceu várias vezes sem motivo aparente. Se bem me lembro, excluir os diretórios obj e bin resolveu o problema algumas vezes, copiando o suspeito pdb e dll para o diretório bin do projeto atual funcionou algumas vezes, etc. Nada que eu possa apontar para isso funcionará sempre , Apesar. Boa sorte.
Michael Todd

Respostas:

16

Aqui está uma solução não oficial e ainda não testada da equipe da ESRI. (Eles enfatizaram que essa não é uma solução oficial)

Tente remover do arcmap.exe.config, no diretório bin.

Este é o arquivo xml \ ArcGIS \ Desktop10.0 \ bin \ arcmap.exe.config.

insira a descrição da imagem aqui

Jakub Sisak GeoGraphics
fonte
3
Na verdade, ele está "documentado" aqui resources.arcgis.com/en/help/arcobjects-net/conceptualhelp/… Corri para esse problema ao codificar o plug-in ogr-workspace e acabei colocando-o na FAQ do desenvolvedor github.com/ RBURHUM / arcgis-ogr
Ragi Yaser Burhum 26/10/12
Isso resolveu o problema para mim, bem como outro problema que eu estava tendo de minhas Debug.WriteLine()mensagens não estão sendo enviados para a janela de saída no VS 2010.
GeoSharp
Eu corri para esta questão novamente e é isso que funcionou desta vez. Estou executando o VS 2010 Express (C #) e direcionando o .NET 4.0. Eu tive que descomentar a versão de tempo de execução suportada pela v4.0 e remover a referência da v2.0.
Radar
8

2 anos e 2 versão mais tarde e isso ainda é um problema. Acabei de atualizar / melhorar todos os meus suplementos para 10.2 e me deparei com esse problema novamente. Implementou TODAS as sugestões neste post e nada funcionou, mas eu descobri um possível problema adicional . Infelizmente, não tenho certeza se esse foi o culpado ou não, porque também implementei a maioria das outras correções possíveis ao mesmo tempo.

Nova descoberta: percebi que desenvolvi Addins desde a versão 10 na mesma máquina e, após a reinstalação, nem sempre limpamos os dados herdados do ArcGIS. Eu descobri que tinha uma versão mais antiga do complemento culpado em uma versão anterior dos dados do ArcGIS em C: \ Arquivos de Programas (x86) \ ArcGIS. Como o ArcGIS carregará os complementos legados, possivelmente houve algum tipo de conflito. Removai todos os dados do aplicativo arcgis herdado (Desktop10.0, Desktop10.1), deixando apenas o Desktop10.2 e o ponto de interrupção ganhou vida. Novamente, não estou 100% se essa é a solução, mas pode ser outro item da lista a ser verificado.

Eu já vi esse problema específico ser chamado de "o melhor assassino de produtividade" em outro site e não podia concordar mais.

Para resumir aqui está minha lista de tarefas atual para o problema de ponto de interrupção 'morto':

  1. Certifique-se de que estou realmente executando o suplemento. Após o lançamento do depurador, o aplicativo não é suficiente - o ponto de interrupção aparecerá "morto" até que eu execute o complemento (botão, opção de menu etc.)

  2. Exclua as alimentações OBJ e BIN do diretório do projeto.

  3. Exclua o conteúdo do assebmly chache: C: \ Usuários \ Usuário \ AppData \ Local \ ESRI \ Desktop10.2 \ AssemblyCache

  4. Exclua todos os dados de montagem herdados. (Se a versão atual for 10.2, exclua os dados da montagem Desktop10.0, Desktop10.1) : \ Users \ User \ AppData \ Local \ ESRI)

  5. Conforme sugestão de suporte da ESRI; Altere o XML de configuração do ArcCatalog e ArcMap (não funcionou por si só quando tentei, mas várias pessoas recomendaram isso como uma solução, incluindo o suporte a ESRI) Localize ArcCatalog.exe.config e ArcMap.exe.config em C: \ Arquivos de Programas ( x86) \ ArcGIS \ Desktop10.2 \ bin Abra cada xml no bloco de notas e remova a linha <supportedRuntime version="v2.0.50727"/> Trata-se da quinta linha

  6. Exclua todos os dados do aplicativo ArcGIS herdados do diretório de instalação. Isso que funcionou para mim. (provavelmente) Vá para: C: \ Arquivos de programas (x86) \ ArcGIS Exclua todas as pastas, exceto as atuais, do Desktop10.x (por exemplo, Desktop10.0, Desktop10.1). Somente a versão atual do Desktop deve permanecer neste local.

  7. Remova e adicione novamente todas as referências de projeto, incluindo referências não ESRI, salve novamente, repita as etapas 2 e 3, recompile, execute o dbugger.

  8. Reinicie o computador. (Isso já funcionou no passado) TAMBÉM descobriu que essa é uma das soluções recomendadas no Stack Overflow.

  9. No Config.esriaddinx - altere o botão para incluir onDemand = false: (sugestão de Kirk - veja acima) Isso não funcionou para mim pessoalmente.

  10. Reconstrua o projeto do zero. (Isso funcionou para mim no passado.)

Jakub Sisak GeoGraphics
fonte
Jakub, eu tive um problema semelhante, mas não relacionado, gis.stackexchange.com/questions/155016/… - verifica-se que o legado também era um problema lá. A versão do framework .net não era atual; portanto, se você já tentou todas essas e ainda não está funcionando, siga o link para mais uma possibilidade.
Michael Stimson
5

A única vez que obtive isso foi quando tive outra instância do ArcMap aberta e esqueci de fechá-la antes de criar / depurar. Se você não fechar todas as instâncias usando a montagem, a antiga continuará sendo usada. Ou algo assim.

blah238
fonte
Tentei reiniciar o computador abrindo o VS e executando o depurador sem abrir nenhuma outra instância do ArcMap. Ele lançou o ArcMap como de costume, mas o problema do "ponto de interrupção morto" persistia.
Jakub Sisak GeoGraphics
então eu apenas configurei o ArcGIS e o Visual Studio em outra máquina (instalação limpa) e a mesma coisa começou a acontecer novamente. Eu tentei a sugestão de todos e você parece estar correto. Assegurei-me de matar todos os processos abertos do ArcGIS e, quando o faço, os pontos de interrupção funcionam.
Jakub Sisak GeoGraphics
5

Como o .NET Framework do meu projeto é 4.0, mudei para supportedRuntime version="v4.0.30319"no ArcMap.exe.config e notei que o problema foi atrasado por essa alteração. Também lembrei que o ArcMap também carrega o ArcCatalog, então mudei também o ArcCatalog.exe.config para supportedRuntime version="v4.0.30319"e YES !!! Está funcionando novamente. Passei o dia todo tentando consertar isso e espero que funcione para você também.

Sabin Kolarov
fonte
11
Eu tive que excluir também as pastas bin e obj.
Sabin Kolarov
4

Tentei as sugestões acima por um tempo e finalmente cheguei a uma solução. Direto ao assunto, darei a solução primeiro e depois a explicação:

  1. Abra o Gerenciador de tarefas. Finalize o processo para qualquer cópia do ArcMap.exe.

  2. Abra um Windows Explorer. Navegue para C: \ Usuários \\ Configurações locais \ ESRI \ Desktop10.

  3. Se você não vir o AssemblyCache, Organize> Opções de pasta e pesquisa> Exibir> desmarque "Ocultar arquivos protegidos do sistema operacional (recomendado)"

  4. Nos diretórios do AssemblyCache, procure aquele que contém a sua .dll.

  5. Exclua a DLL.

  6. Reconstrua o projeto e depure. Depois que o seu suplemento for ativado, você deverá ver o conteúdo do cache atualizado.

  7. Se desejar, oculte novamente os arquivos protegidos do sistema operacional.

O problema para mim era que havia uma instância antiga da minha DLL na pasta C: \ Usuários \\ Configurações Locais \ ESRI \ DesktopX.X \ AssemblyCache \ e também não conseguia ver \ AssemblyCache porque não percebi era um arquivo de sistema operacional oculto. Havia também uma instância zumbi do ArcMap em execução, e quando tentei excluir a DLL inicialmente ela estava bloqueada. Minha suspeita é que o que causou o problema em primeiro lugar é que não encerrei completamente uma sessão de depuração do ArcMap antes de recompilar o código e iniciar outra. A DLL antiga no cache não pôde ser substituída porque a instância antiga do ArcMap ainda a mantinha bloqueada e, uma vez que ficou fora de sincronia com o novo código, a versão em cache não foi mais atualizada. (Posso ver pelas datas dos arquivos que o .config, .pdb e .xml estão sendo atualizados, mas não o .dll.)

StephenKCA
fonte
Sim, isso soa como a solução correta.
Jakub Sisak GeoGraphics
2

Eu estava lidando com o mesmo problema, com meu próprio suplemento em outro tópico e inevitava o seguinte:

Inicialmente, inicie a depuração e, no menu, escolha a seguinte janela Debug >> Windows >> Modules, onde você pode ver quais módulos foram carregados na inicialização da depuração. Se você não conseguir ver o yourAddIn.dll, pelo menos você saberá que ele não foi carregado pelo estúdio. Se você vir lá e não puder colocar o ponto de interrupção ali, o Studio carregou um antigo. Para verificar isso, altere o nome do assembly nas propriedades do projeto, reconstrua a solução, inicie a depuração e você verá a dll antiga carregada lá. Não sei de onde o estúdio carrega essa dll antiga.

Vá para o Solution Explorer e verifique a comparação dos arquivos "yourAddIn.Addin" e "yourAddIn - For Testing.AddIn" e eles podem ser diferentes. O estúdio usa apenas o segundo arquivo em seu Gerenciador de suplementos! Na primeira alteração Altere também a tag para se referir à dll correta e você poderá verificar a tag também. Para mim, o valor foi definido como 0 no arquivo "yourAddIn - For Testing.AddIn", então eu mudei novamente para 1. (Se você excluir o diretório bin do seu suplemento e iniciar o estúdio, ele solicitará a solicitação. que você deseja remover este suplemento da sua lista de suplementos! Nesse momento, o Studio define o LoadBehavior como 0.)

Após essas duas alterações, começou a funcionar novamente!

MrNice
fonte
Obrigado por compartilhar sua experiência e por nos fornecer os detalhes. Bem vindo à nossa comunidade!
whuber
2

Com o Visual Studio, criei um novo suplemento para o Arcmap e adicionei um botão e uma barra de ferramentas. Resultando em um arquivo de configuração semelhante a este:

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

Eu criei algum código no construtor para o Button e coloquei um ponto de interrupção nele. Comecei no modo de depuração e veja se o assembly ainda não foi carregado:

insira a descrição da imagem aqui

Alterei o botão para incluir onDemand = false:

insira a descrição da imagem aqui

Quando iniciei o arcmap novamente, ele atingiu o ponto de interrupção. Observe que, se a barra de ferramentas estiver desativada na inicialização, você deverá torná-la visível para fazer com que o construtor de botões seja chamado - portanto, de certa forma, ele ainda está sob demanda.

Kirk Kuykendall
fonte
Obrigado @Kirk. Desde que restaurei meu projeto do backup, ele parece funcionar agora. Eu costumo depurar um procedimento mais adiante; ou seja, chamado a partir do clique uniforme de um botão, que foi o caso desta vez. Tenho certeza de que o assembly já está carregado neste momento. (ou deveria ser, mas não é por alguma razão) Definitivamente tentarei esta solução na próxima vez que isso acontecer.
Jakub Sisak GeoGraphics
2

Tive que mudar meu complemento para o arcCatalog para combinar com o framework 4 com a nova versão 10.1 do ArcCatalog.
Acabei de comentar a versão = "v2.0.50727" e não comentada "v4.0.30319"

Em C: \ Arquivos de Programas (x86) \ ArcGIS \ Desktop10.1 \ bin, o arquivo de configuração xml ArcCatlog.exe

pára no ponto de interrupção agora

Parece ser o mesmo problema com o arcmap

anônimo
fonte
2

Depois de migrar um projeto ESRI ArcGIS 10 de uma máquina para outra, encontrei o erro de que a máquina não podia carregar os arquivos .pdb de depuração do ArcMap.exe. Eu tentei todos os conselhos deste post sem sorte.

Então eu fiz o seguinte:

Excluí as referências para todas as bibliotecas Esri. * Em cada projeto que as continha e as adicionei novamente ao projeto na nova máquina.

Isto é o que finalmente funcionou para mim. Se alguém se deparar com esse problema vago e tiver tentado tudo o mais listado nesta página, tente isso - é rápido, fácil e bastante inofensivo. Não sei ao certo por que isso foi feito, acho que isso tem a ver com procurar as bibliotecas por máquina.

Isso era para um projeto que usava BaseCommands / Barras de Ferramentas, e não os novos Suplementos. Usando o ArcGIS 10.0 e .NET 3.5 com o Visual Studio 2010 no Windows 7 Pro.

codemouse
fonte
2

Para aqueles que almejam o .Net 4.0 Framework, o seguinte funcionou para mim.

  1. Conforme muitas sugestões, modifique o ArcMap.exe.config e o ArcCatalog.exe.config para atingir a estrutura 4.0.
    <?xml version="1.0" encoding="utf-8" ?> <configuration> <startup> <supportedRuntime version="v4.0.30319"/> <!--supportedRuntime version="v2.0.50727"/--> </startup>
    Por alguma razão, o ArcCatalog.exe.config parece bloqueado para ser modificado. Eu consegui contorná-lo copiando e modificando-o em outro diretório e substituindo-o.
  2. Em seguida, no Config.esriaddinx, altere o idioma Addin para "CLR4.0"
Nilster
fonte
1

Duas causas possíveis me vêm à mente:

  1. O suplemento não está registrado corretamente, portanto a DLL não é carregada no processo do ArcMap que está sendo depurado.

  2. Seu projeto está direcionado ao .NET 4. Tente segmentar o .NET 3.5.

Petr Krebs
fonte
Segmentação .Net 3.5. Só não entendo por que tudo funcionaria bem e de repente não.
Jakub Sisak GeoGraphics
1

Se você estiver codificando com vários projetos na mesma solução do Visual Studio, poderá encontrar situações em que o Visual Studio (VS) "desativa" seus pontos de interrupção e você não consegue percorrer seu código. Isso aconteceu comigo recentemente, onde não pude entrar em um projeto de assembly DLL "dependente" que estava sendo chamado no meu projeto principal.

Os avisos do VS sugeriram que meu assembly (DLL) estava desatualizado e não correspondia exatamente ao meu código. Existem opções do VS para desativar o requisito de que o código corresponda, mas intuitivamente isso pareceu uma péssima idéia e foi apoiado por postagens na Internet. Eu li muitos sites e existem algumas sugestões gnarly por aí.

No final, pesquisei a DLL de saída da minha máquina dependente e encontrei várias cópias antigas em vários locais do meu computador (presumivelmente em experimentos anteriores e configurações de projetos). Por isso, apaguei todos eles e reconstruí minha solução do zero. Isso corrigiu meu problema. Acho que meu projeto atual foi inadvertidamente vinculado a uma das cópias antigas de alguma forma e não estava usando a versão mais recente que estava sendo colocada na minha pasta de depuração.

Radar
fonte
1

O que funcionou para mim não foi excluir o arcmap.config.exe, conforme descrito na postagem de Jakub acima, mas definir a tag "supportedRuntime" neste arquivo para a versão correta do Framework que você segmenta no Visual Studio, no meu caso:

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

Em vários projetos do ArcObjects, compilei uma lista de razões pelas quais a depuração pode não funcionar para suplementos, extensões e comandos (pré-suplemento). Em nenhuma ordem particular:

  1. Você está no modo de lançamento do Visual Studio em vez do modo de depuração
  2. As versões antigas da ferramenta ainda estão registradas no ArcMap / ArcCatalog e estão impedindo que sua versão de depuração seja carregada, ou outras ferramentas com o mesmo nome são registradas.
  3. O projeto / solução precisa de limpeza e, se necessário, vá para \ bin e \ obj e exclua todos os arquivos remanescentes
  4. Em alguns casos, os pontos de interrupção só podem ser atingidos após a ferramenta ter sido ativada (sob demanda)
  5. Se nenhum ponto de interrupção for atingido, é possível que exista uma exceção no construtor e a ferramenta nunca seja executada. Verifique mostrando todas as exceções de CLR no menu de depuração
  6. As entradas em C: \ Usuários \ <name> \ Configurações locais \ ESRI \ DesktopX.X \ AssemblyCache precisam ser excluídas

Muitas etapas exigem que o ArcMap seja reiniciado. Se tudo mais falhar, uma reinicialização da máquina é um fallback fácil, mas eu só tive uma vez que isso fez a diferença.

tomfumb
fonte
0

Isso aconteceu comigo uma ou duas vezes. Se bem me lembro, consegui que o ponto de interrupção funcionasse quando fiz uma pequena alteração no código, o que significava que o aplicativo foi reconstruído. O que acontece quando você cria ou reconstrói seu projeto?

kenbuja
fonte
Eu tentei reconstruir o projeto e fiz várias alterações, mas ainda assim os pontos de interrupção estavam "mortos" ...
Jakub Sisak GeoGraphics
0

Não acredito que mais pessoas não estejam tendo esse problema. Agora, encontro isso quase sempre que estou melhorando e depurando meus suplementos.

Nenhuma das soluções mencionadas acima funciona. Para corrigir isso, eu preciso excluir o projeto inteiro e restaurá-lo do backup. Isso me leva a acreditar que algo no projeto em particular ficou corrompido, pois geralmente começa a acontecer quando o ArcMap falha durante a depuração.

Jakub Sisak GeoGraphics
fonte
Existem processos persistentes do ArcMap.exe? Às vezes, suplementos, extensões, comandos etc. podem se apegar a um recurso ou causar uma condição de corrida que impede que o ArcMap saia completamente.
blah238
Nenhum processo do ArcMap.exe em execução. Agora tenho uma resposta da equipe da ESRI para Tente remover <supportedRuntime version = "v2.0.50727" /> do arcmap.exe.config, no diretório bin. No entanto, não tenho certeza de onde estou removendo este item e acabei de restaurar meu projeto do backup e agora ele está funcionando. Quando eu souber mais sobre essa correção, travarei o ArcMap durante a depuração, o que geralmente faz com que isso aconteça e faça uma tentativa.
Jakub Sisak GeoGraphics
0

Você está criando seu projeto usando o Framework 4? Eu tive o mesmo problema, mas quando mudo para o Framework 3.5, ele funciona bem.

user20254
fonte
0

tente limpar e reconstruir e execute sem depuração, quando o aplicativo for executado, anexá-lo no VS

mostafa
fonte
0

Sei que isso pode parecer óbvio demais, mas mencionarei de qualquer maneira que você precisa da edição apropriada do Visual Studio. Por exemplo, esse problema pode ocorrer com uma edição expressa de um determinado ano, enquanto pode funcionar com uma edição definitiva. Se você estiver usando o Say 2010, tente mudar para 2012. Em seguida, tente mudar de expresso para final. Eu faria isso se você ainda não o fez antes de mexer com problemas de carregamento de símbolos. A ESRI fornece informações sobre o download dos símbolos para o cache, conforme mencionado no link acima (Ajuda do ArcObjects 10 .NET SDK). No entanto, isso pode não ser necessário. Verifique se você está usando a estrutura .net apropriada também antes da depuração, por exemplo .net 3.5 nas edições mais antigas.

user89997
fonte