Não foi possível depurar o Esri Addin for ArcCatalog


8

Foi um sorteio se esta pergunta é GIS.SE ou StackOverflow ... Eu vou com GIS.SE porque o problema parece estar no ArcCatalog.

Eu tenho vários suplementos que foram escritos para o ArcCatalog (e também o ArcMap); anteriormente eu era capaz de F5 depurar o código usando pontos de interrupção agora todos os meus pontos de interrupção estão inativos com a mensagem O ponto de interrupção não será atingido no momento. Nenhum símbolo foi carregado para este documento :

insira a descrição da imagem aqui

Eu tentei as sugestões do Stack Overflow:

Fixação “O ponto de interrupção não será atingido no momento. Nenhum símbolo foi carregado para este documento. ”

No momento, este ponto de interrupção não será atingido, o código-fonte é diferente do original (mesmo após a limpeza / reconstrução)

O ponto de interrupção não será atingido no momento. Nenhum símbolo foi carregado para este documento

e também

Por que o ponto de interrupção não pode ser "atingido" ao depurar um complemento do ArcGIS 10? mas isso parece ser um problema diferente.

Como este é um Addin (dll), não há projeto de inicialização. Eu limpei todas as outras versões. Fiz uma alteração sutil no arquivo Esriaddinx message=para confirmar que as alterações estavam sendo feitas - tudo bem, não existe uma versão mais antiga.

Durante a limpeza, notei que os suplementos do ArcCatalog são copiados para o local %USERPROFILE%\Documents\ArcGIS\AddIns\Desktop10.X\{AddInID}\onde não estão os suplementos do ArcMap. Tentei copiar o arquivo pdb para a pasta de suplementos, mas parece que o código não está mais sendo depurado e o ArcCatalog mudou / redirecionou para a cópia.

Existe uma maneira de depurar com suplementos de pontos de interrupção para o ArcCatalog? Observe que os complementos do ArcMap e aplicativos independentes são depurados muito bem.

Meio Ambiente:

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

Eu tive um problema semelhante com o ArcMap 10.3 em combinação com o Visual Studio 2013. Encontrei as mesmas postagens que você mencionou e, de fato, a certa altura, eu poderia depurar e atingir um ponto de interrupção. Mas, por algum motivo, isso parou de funcionar depois de um tempo e não havia como fazê-lo funcionar novamente. Por fim, reverti a estrutura de destino no meu projeto de .Net 4.5 para .Net 3.5 e configurei o supportedRuntime no .exe.config para v2.0.50727. Isso resolveu para mim. Talvez o seu complemento ArcCatalog use 4.5 e o ArcMap one 3.5?
Berend

Essa é uma possibilidade @Berend. O Target Framework (todas as configurações) está definido como .NET Framework 3.5 Client Profile ... deve ser 4 ou 4 Client Profile? Essa ferramenta é muito antiga, originalmente escrita em VB6, foi convertida para .net no ArcGis 9.3, que usa 3.5; portanto, quando foi convertida em um complemento, a estrutura não foi alterada - ela foi compilada e executada OK, então não vi o arquivo. precisa mudar isso. Eu realmente acho que você está interessado em algo aqui - algo que eu não vi nos outros posts.
Michael Stimson 29/07

É ISSO @Berend !!! por favor, escreva isso como uma resposta para receber sua recompensa. Alterei a estrutura de destino para o .NET Framework 4 Client Profile e os pontos de interrupção se tornaram ativos; Eu sabia que tinha que haver algo simples, mas bem escondido, que eu estava ignorando ... Muito obrigado . Agora posso depurar esse código corretamente.
Michael Stimson 29/07

Respostas:


2

Atualizando meu comentário inicial para uma resposta:

Eu tive um problema semelhante com o ArcMap 10.3 em combinação com o Visual Studio 2013. Encontrei as mesmas postagens que @ michael-miles-stimson mencionou e, de fato, em um ponto, eu poderia realmente depurar e atingir um ponto de interrupção. Mas, por algum motivo, isso parou de funcionar depois de um tempo e não havia como fazê-lo funcionar novamente.

Por fim, reverti a estrutura de destino no meu projeto de .Net 4.5 para .Net 3.5 e configurei o supportedRuntime no .exe.config para v2.0.50727. Isso resolveu para mim.

Se o complemento ArcCatalog usa 4.5 e o ArcMap one 3.5, isso explicaria o comportamento explicado na pergunta.

Eu acho que não importa se você usa a versão Cliente ou Versão Completa, eu sempre uso a Versão Completa, porque a certa altura, sempre sinto falta de uma classe que não está na versão Cliente.


Obrigado Berend. Isso resolveu totalmente o problema, aceite a recompensa com meus elogios.
22715 Michael Stimson

1

Durante a limpeza, notei que os suplementos do ArcCatalog são copiados para% USERPROFILE% \ Documents \ ArcGIS \ AddIns \ Desktop10.X {AddInID} \ onde os suplementos do ArcMap não são

Na verdade, os complementos do Arcmap também são copiados para esse local após a instalação (ou um Build in Visual studio).

Para resolver esse problema, tente estas etapas:

  1. Limpe toda a sua solução no visual studio clicando com o botão direito do mouse na solução e escolha Limpar solução

  2. se o seu projeto de suplemento arccatalog depender de outros assemblies de terceiros, verifique se esses assemblies têm arquivos .pdb (símbolo) ao lado deles

  3. No visual studio, se você tiver outros projetos em sua solução em que seu projeto arccatalog depende deles, adicione a referência do projeto em vez das dlls. como esta imagem:

insira a descrição da imagem aqui


Fiz a limpeza, foi uma das primeiras coisas que fiz, não há outros projetos ou montagens de terceiros (talvez, este precise da biblioteca do Excel v12) ... você acha que os objetos do Excel estão causando esse problema? Nesse caso, como posso obter um arquivo pdb para isso - não acho que a Microsoft me dê seu código-fonte, independentemente da idade dessa versão.
Michael Stimson 29/07

Muito possivel. Simplesmente remova os objetos do excel, limpe e tente novamente a depuração.
Farid Cheraghi

compartilhar código fonte da microsoft é um não. Para pdb, pesquise no google.
Farid Cheraghi

1
O Excel / ArcObjects é o que eu preciso depurar. Por alguma razão, está passando pela folha para cerca de X e parando. Eu sei que o ArcGis v10.x suporta planilhas do Excel, mas esse código e as planilhas associadas se originaram no ArcGis 9.1 e as planilhas não são compatíveis (o cabeçalho está na linha 3). Esta postagem deu instruções sobre como obter o pdb social.msdn.microsoft.com/Forums/office/en-US/…, por isso vou tentar.
Michael Stimson 29/07

1
Farid, como se viu, era uma versão do .NET framework que estava causando o problema. Isso pode ter algo a ver com o Excel não querer jogar o jogo com a versão antiga. Uma das muitas atualizações da Microsoft pode ter prejudicado a capacidade de usar objetos do Excel 12 no .net 3.5.
Michael Stimson 29/07

1

Ok, acabei de verificar que sou capaz de percorrer o código usando esse processo. Estou fazendo isso no ArcMap, mas acho que deve se aplicar ao ArcCatalog, pois o processo lida com DLLs de depuração e não com um item específico da ESRI. Eu confirmei isso no ArcMap 10.2.2 e no ArcCatalog 10.2.2. Como este é um processo do Windows que lida com DLLs diretamente, as versões do software ESRI não devem importar.

Estou usando o Visual Studio para anexar a um processo .

Eu sou capaz de percorrer uma extensão compilada (DLL) usando esse processo quando a DLL é invocada em outro programa.

Aqui está o que estou fazendo ...

No Visual Studio, abra seu projeto de extensão. Criei minha extensão no VS 2010 C # Express, mas estou usando o VS 2013 Ultimate para fazer isso. Não tenho certeza se Anexar ao processo é uma opção na versão 2010 Express. Eu não vi, mas poderia estar escondido em algum lugar, pois era a versão Express.

Abra o seu produto ESRI e instale o suplemento. Agora, de volta ao VS, clique em Anexar ao processo e selecione o processo do seu produto ESRI. O meu era o ArcMap.exe . A partir daqui, o Visual Studio deve anexar seu depurador ao programa e, quando a DLL for executada, aberta e com pontos de interrupção definidos, ela será interrompida por aí. Isso funcionará como qualquer outro programa que você está depurando no Visual Studio. Ele pode esticar alguma depuração em alguns dos itens ESRI embora o código é mais provável ofuscado por isso não tão útil.

Certifiquei-me de instalar o suplemento do diretório Release para o meu projeto. Até onde eu sei, a ESRI não copia a DLL em uma de suas pastas, mas eles usam o Esri Assembly Registration Utility para registrar a localização da DLL, para que o sistema saiba onde encontrá-la quando referenciada em um produto ESRI.

FYI: Eu uso esse processo para depurar bibliotecas de classes que escrevo em um projeto que estão sendo utilizadas em outro. A mesma teoria deve aplicar os suplementos ESRI, pois são apenas DLLs (bibliotecas de classes) sendo chamadas para outro programa. Além do Visual Studio, acredito que qualquer outro depurador do Windows possa se conectar à DLL.

Por favor, postar comentários sobre este. Eu pensei que isso funcionaria por um tempo e estou muito curioso para ver como os outros são justos com esse método.

EDIT Acabei de criar um novo suplemento ArcCatalog, que consiste em um botão simples. Adicionei uma atribuição de sequência string stophere = "debugger stopped!";no manipulador de eventos para o evento de clique do botão. Por meio do ArcCatalog, ele parou de usar o método Attach to Process . As informações do Visual Studio 2010 sobre o processo estão aqui .

Existem algumas coisas no MSDN sobre depuração de DLLs através de vários métodos no Visual Studio e no Windows Debugger. Pessoalmente, acho o Attach to Process melhor do que iniciar um método de programa externo e também melhor do que usar o depurador remoto .

A única desvantagem desse método é que você perde a abordagem F5 onde você depura diretamente de dentro do Visual Studio. Isso significa que, faça alterações no seu código, instale a atualização, inicie o ArcCatalog, Anexe ao Processo e atinja seus pontos de interrupção. No entanto, acho que esse método é muito bom de se saber se você tiver problemas como o seu. Esse processo pode demorar um pouco mais, mas é um método infalível para obter resultados.


Eu tenho o Visual Studio 2010 Professional , há uma grande diferença entre o ArcMap e o ArcCatalog, conforme declarado na pergunta ... meus complementos do ArcMap depuram perfeitamente. Quando eu estava escrevendo isso como código COM (ArcGis 9.3.1), funcionou muito bem ... na verdade, pensando nisso, eu deveria ter certeza de que as extensões Esri (9.3.1) muito antigas também desapareceram. O que você disse no seu comentário sobre a edição do ArcCatalog.exe.config, pode me mostrar a primeira meia dúzia de linhas, por favor. Tente criar um complemento do ArcCatalog que faça muito pouco (o msgbox deve ser suficiente) e veja se você pode depurá-lo.
Michael Stimson

@ MichaelMiles-Stimson ... esse comentário foi feito para esta resposta? Além disso, editei minha pergunta para adicionar mais informações e testei com o ArcCatalog. Meu método funciona, mas você não pode F5 no Visual Studio, você precisa trabalhar um pouco mais, mas ainda assim obter o mesmo resultado sem precisar lidar com os arquivos de configuração.
Branco

Branco, obrigado por sua resposta cuidadosa, mas, como se vê, era uma versão do .NET framework que estava causando o problema.
Michael Stimson 29/07

1

Este é um arquivo que eu criei ao longo de alguns anos discutindo com as extensões ArcMap e ArcCatalog e, em seguida, Add-Ins:

Coisas que podem impedir o ArcMap de depurar suplementos no Visual Studio:

  • Modo de liberação, em vez de modo de depuração (se usar uma abordagem antiga que não seja de suplemento, isso pode ser um problema, porque provavelmente a dll \ bin \ Debug foi registrada com regasm, não \ bin \ Release
  • Versões antigas de ferramentas na interface do usuário que impedem o carregamento da versão de depuração (inicie o ArcMap sem o Visual Studio, remova todos os comandos e exclua todos os suplementos, feche o ArcMap)
  • Existe uma chance de a versão não complementar ser usada? Caso contrário, a dll deve ser registrada
  • Nunca é necessário instalar manualmente o suplemento para depuração
  • Solução e projeto limpos, verifique manualmente os arquivos do aplicativo e exclua todo o conteúdo / bin e / obj
  • Esvaziar o conteúdo de C: \ Users \ <NAME> \ Local Settings \ ESRI \ Desktop10.0 \ AssemblyCache
  • Assegure-se de que qualquer outro local do projeto \ bin anteriormente / possivelmente referenciado pelo ArcMap durante a depuração não tenha dlls / suplementos criados anteriormente com o mesmo nome que você está tentando depurar (por exemplo, versão de migração / adição de rede de pontos) choque)
  • Em alguns suplementos, os pontos de interrupção somente serão viáveis ​​após o clique no botão da ferramenta - é quando ele é inicializado
  • Se nenhum ponto de interrupção estiver sendo atingido, é possível que uma exceção esteja sendo lançada no construtor e a ferramenta não esteja sendo executada. Verifique isso mostrando todas as exceções de CLR no menu Debug -> Exceptions -> check 'Common Language Runtime Exceptions'
  • Se tudo mais falhar, reinicie

Obrigado pelo esforço, todos foram abordados no post vinculado. Berend tem a resposta correta (desta vez), pois não era um dos suspeitos de sempre.
Michael Stimson

0

Aqui está a solução:

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

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

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


Mencionei esse post na pergunta. Não se trata do ArcMap, que funciona muito bem, é o ArcCatalog que está causando o problema. Boa tentativa embora. Eu acho que vou ter que oferecer uma recompensa por este.
22715 Michael Stimson

Olá @ MichaelMiles-Stimson Você tentou editar o ArcCatalog.exe.config? Para o último suplemento que eu desenvolvi Eu uncommented este <! - <versão supportedRuntime = "v4.0.30319" /> -> e, em vez comentou esta <supportedRuntime version = "v2.0.50727" />
rowanwins

Não foi possível encontrar <supportedRuntime version = "v2.0.50727" /> para comentar @rowanwins. Supondo que eu tenha um backup e que queira excluir a linha, o que ocorre no gabinete <startup>? Existe uma razão para esta linha ser comentada?
Michael Stimson

Talvez @rowanwins você possa colocar isso como uma resposta, que permita pelo menos uma captura de tela do que você está tentando expressar e, potencialmente, mais algumas palavras, e eu a investigarei amanhã ... em casa!
Michael Stimson

0

Alguns passos óbvios (suponho que você já tenha tentado isso ... mas ainda assim).

  1. Verifique se o modo ainda está "Debug" em vez de versão.
  2. Exclua as pastas "obj" e "bin" e recrie.

Sim, fiz isso. Isso foi mencionado em uma das postagens de estouro de pilha. Tem que ser algo menos óbvio.
Michael Stimson
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.