“O ponto de interrupção não será atingido no momento. O código fonte é diferente da versão original. ” O que isto significa?

514

Ao depurar no Visual Studio, às vezes adiciono um ponto de interrupção, mas é oco e o VS diz "O ponto de interrupção não será atingido no momento. O código-fonte é diferente da versão original". Obviamente, isso me impede de poder depurar.

O que diabos a mensagem significa? Qual versão original? Se eu acabei de abrir a solução e não fiz nenhuma alteração no código, como pode haver uma 'versão original'?

David
fonte
36
recompilação / construir o projeto antes de adicionar o ponto de ruptura
lexu
você está abrindo um projeto escrito em outra versão do visual studio?
Mahesh Velaga 18/03/10
2
É um projeto de site. Não deve haver necessidade de construí-lo explicitamente. Deve compilar em uso. Eu suspeito que o VS não pode criar o site, mas não está me dizendo isso! Mahesh - não, todos com a mesma versão do VS.
David
No meu caso .. Eu tenho diferentes versões do mesmo código (por exemplo, test.cs na versão Live e versão do devolopment .. quando abri a versão do devolopment e coloquei o breakpoint em test.cs, deu o mesmo erro, mas descobri que coloquei o teste do breakpoint cs classe que relacionado a versão SLN ao vivo não devolopment modo a verificar o cs tem já em construção de solução)
dankyy1
5
Excluir diretórios bin e obj do que reconstruir funcionou para mim.
Aycan Yaşıt 28/11/14

Respostas:

277

Como se diz, o "código fonte é diferente da versão original".

Clique com o botão direito do mouse na pasta do projeto dentro do Solution Explorer e escolha Clean. Crie uma nova versão do projeto e o ponto de interrupção funcionará novamente!

Veedrac
fonte
120
Usar limpeza nem sempre funciona. Eu tive que excluir manualmente tudo na minha pasta bin para fazê-lo funcionar novamente.
Carra
3
Por engano, eu tinha uma referência a uma DLL na minha pasta bin. Corrigido o caminho de referência corrigido.
Brad Urani
39
Para mim, até a exclusão das pastas bin e obj não funcionou. Eu tive que reiniciar o Visual Studio também.
D512
1
Passamos quase um dia para encontrar a solução. Muito obrigado por fornecer uma solução.
Racs
8
Fechei o VS, excluí todas as pastas bin e obj, reconstruo tudo, verifiquei as configurações de compilação, a compilação foi bem-sucedida. Sem dados. Coisas simples não devem ser tão complicadas. >: |
1/15
129

Se você desmarcou o projeto DLL na configuração de compilação de depuração , seu novo código nunca será criado!

Vamos para Build --> Configuration Manager ... (no VS2010) e verifique se o projeto com o código que você está tentando depurar está verificado na configuração de compilação atual.

Oliver
fonte
Obrigado pela sugestão Oliver. Definitivamente, isso não está acontecendo aqui, notaria rapidamente se um dos meus projetos não estivesse em construção.
David
3
Eu tinha exatamente o mesmo problema, só que não tinha nada desmarcado. foi apenas compilar para x86 nessa caixa de diálogo, enquanto minha máquina local é x64! Então eu selecionei a Any CPUopção e ela funciona novamente.
JP Hellemons
3
Remover projetos da configuração de depuração sem uma razão válida deve ser um pecado fundamental, pois essa configuração pode ser usada pela máquina de criação de IC (eu sei que ela está aqui); Eu sei que poderia ser uma das muitas etapas de construção, mas ainda assim ... @ Oliver Espero que o membro da equipe tenha comprado alguns biscoitos para você! :)
Fetchez la vache
Eu tive esse problema quando mudei para o x86 em vez do AnyCPU. Ele removeu os projetos da construção por algum motivo desconhecido.
precisa
O projeto está listado para Construir no gerenciador de configuração para que isso não me ajudou Eu tenho medo :(
Ortund
43

Para mim, foi enquanto trabalhava em um projeto de site. Depois de limpar essas pastas temporárias, recebi os erros apropriados do compilador de volta:

  • C:\Documents and Settings\%username%\AppData\Local\Temp\Temporary ASP.NET Files
  • C:\windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files

Finalmente resolvi o problema quando descobri que um arquivo de classe que eu havia intencionalmente movido para uma subpasta, de alguma forma reapareceu na pasta raiz. O VS estava usando esse enquanto eu estava editando o outro.

AnthonyVO
fonte
2
Esvaziar os arquivos temporários no diretório do Windows funcionou para mim, saúde!
ChrisFletcher
7
Eu só queria adicionar uma resposta semelhante - verifique se nenhuma cópia antiga da dll do seu projeto está disponível em nenhuma das pastas temporárias que o ASP.NET usa, como C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Arquivos ASP.NET temporários - como mencionado - mas também C: \ Windows \ Microsoft.NET \ Framework_64_ \ v4.0.30319 \ Arquivos ASP.NET temporários . Eu uso Tudo para procurar rapidamente essas cópias .
19413 Oliver
12
Apenas uma dica rápida: digitando %localappdata%na caixa de pesquisa leva você diretamente paraC:\Documents and Settings\%username%\AppData\Local
dav_i
1
Posso confirmar que isso funcionou para mim no Visual Studio 2013 em um projeto de serviço da web.
Moeri
Fiz tudo isso, mas não parece ter ajudado. Eu também fiquei muito animado ao ver isso.
Ortund
40

Você já fez isso?

Deseja continuar e executar a última compilação bem-sucedida?

Se você marcou a caixa e pressionou "Sim", a última versão bem-sucedida será executada, mesmo que seu projeto não seja compilado. Isso significa que sempre que você definir um ponto de interrupção, receberá esse erro.

Tente alterar este valor:

  • Ferramentas
    • Opções
      • Projetos e Soluções
        • Construir e executar
          • Em execução, quando ocorrem erros de compilação ou implantação: Não iniciar
Codesleuth
fonte
Eu não acho que tinha feito isso. Obrigado pelo link embora. Deu-me uma ideia do que significa esse prompt!
David
11
O Visual Studio tinha essa opção há décadas (pelo menos o VS98 tinha). Eu nunca entendi por que alguém iria querer executar a última compilação bem-sucedida. Afinal, se era isso que eu queria, eu o teria lançado diretamente, pois não conseguia depurar de qualquer maneira. Não iniciar teria sido um padrão mais sensato.
OregonGhost
6
Eu o usei algumas vezes para executar o projeto (por qualquer motivo, como apenas para mostrar a alguém) enquanto ainda estou escrevendo códigos que não serão compilados. Às vezes é útil. Pessoalmente, deixo-o desativado.
Codesleuth
3
Talvez se eles tivessem que mostrar seu superior quando ele de repente aparecesse. Eles poderiam pressionar f5 e ser como "você vê, funciona!"
Gigala
33

Vamos para

  • Ferramentas
    • Opções
      • Depuração
        • Geral

Desmarque a opção Exigir que os arquivos de origem correspondam exatamente à versão original

Rachmad
fonte
17
@Rachmad Esta solução funciona. Mas não parece a solução completa, porque isso significa que nossos arquivos de origem não é corresponde exatamente a versão original
onmyway133
É exatamente isso que eu estava procurando pelo @entropy. Embora isso permita que os pontos de interrupção sejam definidos, o fato é que a fonte usada não corresponde ao pdb usado. A melhor solução é consertar isso. Em tempos que não podem ser feitos, isso funciona muito bem.
JamesG
Mesmo com esta desmarcada, a execução não atingiu o ponto de interrupção e os persiste erro
Ortund
12
Esta não é uma solução para esse problema, mas uma solução alternativa. Obviamente, não quero trabalhar com arquivos desatualizados no depurador.
Obi Wan
2
@ObiWan Não é óbvio. Eu gosto de fazer pequenas edições e continuar depurando mesmo sabendo que a origem e a compilação são diferentes.
Alan Baljeu 9/08/19
30

Selecione Depurar nas configurações da solução , em vez da versão

captura de tela do menu

AdiKonstantin
fonte
1
Este foi o meu problema. Eu compilei no modo de depuração, alterei o código e depois o executei no modo de lançamento. Não é de admirar que o depurador tenha pensado que o código era diferente - os símbolos de depuração eram diferentes. Quando excluí a pasta bin, conforme sugerido por outras pessoas, recebi o erro "nenhum símbolo foi carregado para este documento". Foi só então que fiz a conexão e fiz o meu caminho para esta resposta. Precisa de mais votos!
Indot_brad
É possível que o projeto seja desabilitado para compilação, mesmo na configuração de compilação Debug. É necessário um exame da configuração da compilação, o flip-flopping entre a configuração de Debug / Release é inútil.
Asad Saeeduddin
Também foi para mim. tentou limpar, reconstruindo as outras soluções referenciadas sem sucesso. Não percebeu a solução foi me olhando na cara
Adam Hey
Foi o que aconteceu comigo - eu estava construindo meu projeto e substituindo minhas dlls repetidas vezes, mas o problema simplesmente não desaparece. Percebi que o código estava sendo criado no modo Release enquanto eu estava substituindo as DLLs da pasta / bin / debug. Eu sou estúpido.
displayName
Eu queria anexar a um processo que foi construído no modo de liberação. Mudar para depuração resolveu meu problema.
fivef 23/10
27

Preste atenção na janela "Saída" no VS. Ele informará quais montagens são carregadas e quando. Você pode ver que uma versão mais antiga do seu assembly em algum lugar da pasta está sendo carregada.

Por exemplo, se você tiver várias montagens e estiver tentando interromper uma das montagens de suporte, o CLR cuidará da resolução da montagem, o que pode carregar outro arquivo de montagem além daquele que você referenciou no projeto.

Tormod
fonte
1
Também vale a pena ter em mente, mas não acho que seja o problema aqui, pois estou tentando entrar em um projeto de site, não em uma biblioteca de classes.
David
24

Fechar o Visual Studio e reabrir a solução pode corrigir o problema, ou seja, é um bug no próprio IDE (estou executando o VS2010).

Se você tiver mais de uma instância do Visual Studio em execução, precisará fechar a instância que está executando a solução com o problema.

Luke Whyte
fonte
4
Fechar o Visual Studio também funcionou para mim. Além disso, com ações Limpar / Reconstruir.
danielb
3
Isso corrigiu a solução no VS 2015
TaintedLemon 9/16
3
Corrigido problema no VS 2017
Daniel Fisher lennybacon
Corrigido o problema no VS 2012
seebiscuit
19

Uma nova maneira de obter esse problema apareceu no Visual Studio 2017 15.3.1 a 15.3.5. Se você estiver usando o EditorConfig , a charset=utf8opção causa esses sintomas. A equipe do VS reproduziu isso e diz que está trabalhando nisso .

Portanto, uma correção é comentar sua charset=utf8 linha no arquivo .editorconfig.

Editar: Isso deve ser corrigido a partir do VS 15.5.

John Hatton
fonte
O status agora é "Corrigido - versão pendente" a partir de dois dias atrás (9 de outubro de 2017). O que é uma boa notícia, já que o UTF-8 é o único padrão sensato para a codificação de texto atualmente. :-)
rmunn 11/11
Percebo também que a causa final desse problema foi aparentemente esse outro bugfix , onde charset=utf8estava sendo interpretado como "UTF-8 com BOM". Alterar essa interpretação para "sem BOM" quebrou alguns arquivos UTF-8 que continham a BOM. Portanto, se você se deparar com esse problema e a correção do Visual Studio ainda não foi lançada, tente remover a BOM desde o início dos arquivos de texto e isso pode resolver o problema. (Este comentário é implorando para uma referência Zero Wing ... :-))
rmunn
Este foi o problema para mim também. Atualmente, este não é fixo ou pelo menos liberado ainda ou bug foi re-introduzida (versão 15.4.2)
avidenic
12

Isso também acontece frequentemente se você estiver usando um arquivo de referências a binários (em vez de referências de projetos a códigos em seu projeto), e o binário compilado que você está referenciando fica fora de sincronia com o código-fonte correspondente em sua máquina. Isso pode acontecer porque você baixou uma nova versão do binário do controle de origem sem o novo código-fonte que o acompanha, ou você tem algumas versões do binário em sua máquina e está fazendo referência a uma cópia antiga etc. Se isso é realmente o problema, é um bom motivo para usar as referências do projeto, tanto quanto possível.

Stijn
fonte
Entendo o que você quer dizer e vale a pena ter isso em mente para o futuro, mas a fonte em questão aqui é um projeto de site, não uma biblioteca de classes.
David
Esse é um problema comum ao pegar o código legado que me deixa coçando a cabeça, imaginando qual gênio decidiu referenciar uma dll de um projeto na solução que só é usada por outro projeto na solução. sigh
Kell
10

Para mim, nenhum dos itens resolveu o problema. Acabei de adicionar uma nova linha de código dentro dessa função, algo como:

int a=0;

adicionando isso, acho que acionei o visual studio para adicionar essa função à versão original

Mehrdad Babaki
fonte
7

Isso pode acontecer quando a hora do sistema é alterada durante a depuração ou entre sessões de depuração, seja programaticamente, manualmente ou por um programa externo.

Tomi
fonte
Não posso marcar com +1 isso o suficiente. Eu reinstalei o Windows recentemente e não percebi que o relógio do sistema estava desligado. Com certeza, essa alteração estragou tudo e a reconstrução de toda a solução / projeto corrigiu-a magicamente.
Kyle Baran
7

Há uma configuração quase imperceptível que corrigiu esse problema para mim. Se houver um arquivo de origem específico no qual o ponto de interrupção não esteja atingindo, ele poderá ser listado em

  • Solution Explorer
    • clique com o botão direito do mouse em Solução
      • Propriedades
        • Propriedades Comuns
          • Arquivos de origem de depuração
            • "Não procure esses arquivos de origem".

Por alguma razão desconhecida para mim, o VS 2013 decidiu colocar um arquivo de origem lá e, posteriormente, não consegui mais atingir o ponto de interrupção nesse arquivo. Esse pode ser o culpado pelo "código-fonte ser diferente da versão original".

JBSnorro
fonte
Eu enfrentei exatamente o mesmo problema. Sua resposta me ajudou! Obrigado! 1
jweyrich 4/11/15
5

O problema é que suas informações de depuração não estão sincronizadas com seu assembly. A solução é simples:

  1. Vá para a pasta bin
  2. Remova os arquivos .pdb
  3. Reconstruir

Deve fazer o truque!

(o estranho é que uma reconstrução sem jogar fora os arquivos .pdb nem sempre funciona. Posso ver a data da modificação sendo atualizada, mas ainda em algum lugar da cadeia (depurador VS2013, IIS, cache de montagem) essa alteração não é detectada )

FrankyHollywood
fonte
O Build-> Clean Solution também deve remover os arquivos que precisam ser removidos.
31516 Dave
Após uma enorme perda de tempo perdida devido a esse problema, essa solução foi bem-sucedida. Thx FrankyHollywood
AD
4

Você pode receber essa mensagem quando estiver usando um ativador e a montagem na qual você definiu o ponto de interrupção ainda não foi carregada.

O ponto de interrupção será resolvido assim que o ativador carregar a montagem (assumindo que os símbolos de montagem e depuração estejam atualizados). Um bom lugar para se olhar é a janela de módulos no menu de depuração. Lá, você deve procurar também a montagem à qual seu arquivo pertence. Primeiro verifique se a montagem está carregada. Então, de onde é carregado? Então, o arquivo de símbolos está carregado. Novamente, de onde o arquivo de símbolos é carregado? Por fim, verifique as versões de ambos.

Stijn
fonte
4

Eu encontrei isso também. As condições que causaram meu problema:

  • Estou executando uma instância completa do IIS7 localmente
  • Estou versionando meu software em projetos separados

Eu havia causado isso abrindo uma versão anterior (o VS solicitou que perguntasse se eu queria apontar para esta instância na depuração do IIS, respondi 'Sim') e depois abri a versão atual (respondendo novamente ao prompt do IIS com um 'Sim' ), tentando depurar na versão anterior.

Para resolver, apenas fechei e reabri a versão anterior e a pretendida, mais uma vez afirmando-a como a fonte de depuração.

baker.nole
fonte
3

Tente desativar e redefinir o ponto de interrupção durante a execução no modo de depuração, em vez de fazê-lo antes de iniciar o modo de depuração.

mikeTheLiar
fonte
3

Isso acontece também ao depurar um projeto C ++ que carrega um módulo que foi implementado com alguma linguagem CRL (C ++ gerenciado, C # etc). Nessa situação, a mensagem de erro é realmente enganosa.

A solução é colocar a propriedade de configuração de suporte do Common language runtime (CLR) no projeto de inicialização e recompilar isso.

Stijn
fonte
3

Se você tiver mais de um projeto em sua solução , verifique se o projeto correto está definido como StartUp Project. Para definir um projeto específico como o Projeto de inicialização da sua solução, clique com o botão direito do mouse no projeto, escolha Set As StartUp Project.

Depois de definir meu projeto de inicialização corretamente, o ponto de interrupção desejado foi alcançado pelo encadeamento.

Nome em Exibição
fonte
É importante notar também que, se o seu ponto de interrupção estiver em um projeto que NÃO é o seu projeto de inicialização, e NÃO PODE ser feito seu projeto de inicialização (porque, por exemplo, você precisa ter um projeto diferente para ser o inicial), você pode (depois de iniciar o principal) clique com o botão direito do mouse e escolha Depurar >> Iniciar nova instância do projeto que possui o ponto de interrupção em que você deseja acessar #
Caius Jard
3

Eu experimentei isso em uma versão de 32 bits no vs2017.

Exatamente nenhuma das soluções funcionou para mim. Reiniciei, limpei os arquivos IDE, limpei a solução criada, extraí do git repo e reconstruí a solução sem sucesso.

Eu estava obtendo uma dependência de 64 bits do nuget e, assim que usei o assembly, as fontes não estavam mais sendo construídas no executável final e, em vez disso, as fontes em cache do IDE estavam sendo construídas.

Removai a configuração de nuget, removi o assembly referenciado, baixei a fonte, criei o log4net manualmente, assinei, adicionei-o a uma pasta no meu projeto, adicionei referência a ele e pude depurar novamente.

Isso foi uma dor, espero que consiga aparecer na lista de respostas para todos verem.

Editar: não houve erro durante a compilação, apesar de a opção "erro na solicitação de compilação" estar ativada nas configurações do IDE.

nurettin
fonte
3

Para mim, a solução estava oculta nas Advanced Build Settingspropriedades do projeto: insira a descrição da imagem aqui

Por um motivo desconhecido, foi definido como none : configurá-lo para fullcausar os pontos de interrupção a serem atingidos.

Para chegar a esse diálogo, abra as propriedades do projeto, vá para Builde selecione o Advanced...botão na parte inferior da página.

riqitang
fonte
3

Eu tive o mesmo problema em vários projetos em um projeto de arquitetura em camadas e o problema estava nas configurações: a caixa de seleção de compilação do projeto selecionado não foi marcada. então o problema foi corrigido para um projeto.

Para uma outra camada, estava dando o mesmo problema, mesmo a compilação é ativada nas configurações. Eu fiz todas as outras opções, como reiniciar a limpeza do projeto, mas nenhuma delas ajudou. Finalmente, desmarquei a caixa de seleção de compilação para esse projeto em particular e limpei e recompilei. o novo marcou a caixa de seleção e fez o mesmo. então o problema foi corrigido.

Espero que isto ajude..

Priyankara
fonte
2

No meu caso, eu estava anexando a um processo em execução no VS 2012. Ao anexar, você tem a opção de depurar em vários modos (nativo, script, silverlight, gerenciado 2.0, gerenciado 4.0, etc.). Por padrão, o depurador seleciona o modo automaticamente. No entanto, o Automático nem sempre faz a escolha correta. Se o seu processo contiver vários tipos de código, verifique se o depurador está usando o correto.

tom silencioso
fonte
No meu caso, eu estava anexando ao w3wp.exe para depurar o código .NET, mas por algum motivo estava anexando o depurador de scripts que não conseguia ver meus pontos de interrupção em C #. Mudá-lo para o depurador .NET permitiu que meus pontos de interrupção C # funcionassem.
Oran Dennison
2

No meu caso, eu estava desenvolvendo um aplicativo Windows CE, testado em um emulador. O problema era que o executável não foi implantado no emulador; portanto, o .pdb (no ambiente de desenvolvimento) não estava sincronizado com o .exe (no emulador), porque o novo .exe nunca foi copiado para o emulador. Eu tive que excluir o .exe no emulador para forçar uma nova implantação. Então funcionou.

Julen
fonte
2

O que funcionou para mim foi mudar a plataforma da solução de x86 para Qualquer CPU. Depois de mudar para Qualquer, defini um endereço de parada, gerenciei o site, abri a página, cliquei no botão e ele parou. Fechei o site, mudei de volta para x86 e executei a mesma sequência com sucesso.

John
fonte
2
Talvez a escolha da CPU não afete o problema e é apenas o fato de forçar uma reconstrução?
GTC
Ele usará outra pasta bin, provavelmente havia uma dll antiga no seu mapa de qualquer cpu.
Carra 14/05
Eu tive esse problema enquanto a plataforma ativa x86 (que eu nunca usei), voltar para o Win32 resolveu o problema. O PC é compartilhado, então alguém define essa plataforma por qualquer motivo.
Zac
2

No Windows 7, Visual Studio Express 2010, se você tiver ativado a opção Usar o modo de compatibilidade para o Windows XP SP3 , esse erro poderá ocorrer.

Desmarquei a opção e ela funcionou perfeita novamente. Clique com o botão direito do mouse no atalho para o VS ou o executável, selecione propriedades e compatibilidade .

Pete
fonte
1
O que pode estar acontecendo aqui é que a configuração da versão muda de x32 para x64 quando você desativa o modo de compatibilidade, e talvez você não tenha todos os seus projetos selecionados para compilação no x32. Por que certos projetos estão desabilitados para compilação no x32 é algo sobre o qual você precisará conversar com os membros da sua equipe.
Asad Saeeduddin
Esse foi exatamente o meu problema. Obrigado!
9189 Johan Holtby
2

Primeiro eu tentei na linha de comando;

excluindo arquivos temporários da linha de comando funcionou.

C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Arquivos temporários do ASP.NET> raiz de rd / s

Quando desativo "Ativar apenas meu código" em Ferramentas -> Opções -> Depuração -> Geral

O problema foi resolvido para mim. É um aplicativo WCF, estava tentando depurar uma página ashx. http://blogs.msdn.com/b/zainnab/archive/2010/10/25/understanding-just-my-code.aspx

Teoman shipahi
fonte
2

Aconteceu comigo porque eu tinha outros projetos na solução que não estavam sendo construídos. Depois de descarregar esses projetos problemáticos (clique com o botão direito do mouse no projeto no Solution Explorer -> Unload Project), reconstruí a solução e executei novamente - o ponto de interrupção foi atingido!

Sarah
fonte
2

Por acaso, estava no Visual Studio 2017 depois de adicionar arquivos existentes ao projeto. Isso funcionou para mim:

  1. feche a solução,
  2. SolutionFolder\.vs\SolutionName\v15\sqlite3e removastorage.ide
  3. abra a solução novamente
lauriano
fonte
Obrigado por esta solução! Nenhum antes funcionou, e isso salvou meu dia :)
StefanaB 12/02
2

Verifique se você não está no modo de liberação ao tentar depurar.

Entre
fonte