Estou usando o Visual Studio 2010 no modo de depuração e tenho "otimizar código" desmarcado. Não consigo observar rapidamente (ou passar o mouse) qualquer variável no depurador. Eu recebo este erro "Não é possível avaliar a expressão porque o código do método atual está otimizado".
Mesmo uma linha como: int i = -3, observando rapidamente i, recebo "Não é possível obter o valor do local ou do argumento 'i', pois não está disponível neste ponteiro de instrução, possivelmente porque foi otimizado".
Este link mencionado em uma pergunta semelhante parece não se aplicar.
Está faltando uma configuração?
c#
visual-studio
visual-studio-2010
Tony_Henrich
fonte
fonte
Respostas:
Enquanto o projeto estava no modo de depuração, a solução não estava. Quando eu mudei, funcionou.
fonte
Eu tive esse problema quando estava usando o VS 2010. Minha configuração da solução (Debug) foi selecionada. Resolvi isso desmarcando a propriedade Otimizar código nas propriedades do projeto. Projeto (clique com o botão direito) => Propriedades => Compilar (guia) => desmarque Otimizar código
fonte
Parece que você está depurando uma versão otimizada / lançada, apesar de a caixa otimizada desmarcada. As coisas que você pode tentar são:
Se você não conseguir ver o item de menu Módulos no menu Debug -> Windows, pode ser necessário adicioná-lo no menu "Personalizar ...".
fonte
Project.Web
tem Otimização desmarcada, mas ainda aparece como Otimizado quando olho para seu assembly emDebug > Modules
:(No VS2013, acesse: Ferramentas -> Opções -> Depuração -> Geral e ative 'Usar o modo de compatibilidade gerenciada'. Isso desativa o novo comportamento de avaliação da função.
fonte
Tente executar no modo de depuração. Se você estiver executando no modo de liberação, receberá esta mensagem.
fonte
Minha situação não foi coberta por nenhuma das respostas acima. Encontrei o seguinte: Artigo do MSDN sobre encadeamento que explica que, quando preso em algumas operações primitivas de encadeamento nativo, o depurador não pode acessar os dados. Por exemplo, quando um thread está em Task.Wait (), isso aparece.
fonte
Eu tive o mesmo problema. Mas, no meu caso, o
Debuggable
atributo foi codificado noAssemblyInfo.cs
arquivo do meu projeto e, portanto, não foi (sobrescrito) por compilação. Funcionou após remover a linha que especifica oDebuggable
atributo.fonte
Para mim, isso estava acontecendo no VS2017 e no VS2019. Parou de acontecer depois que eu selecionei a opção "Otimização de JIT suprimida na carga do módulo".
fonte
Eu tive o mesmo problema no VS2008. No meu caso, foi resolvido via solução-reconstruir.
fonte
Além do @Kragen mencionado, se você estiver depurando um projeto da web
feche o visual studio e tente excluir os arquivos temporários em C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ Arquivos temporários do ASP.NET
fonte
Outra coisa que você pode fazer é criar um arquivo com o mesmo nome da dll otimizada, mas com a extensão ini e adicionar o seguinte:
[Controle de depuração do .NET Framework]
GenerateTrackingInfo = 1
AllowOptimize = 0
Isso instruirá o JIT a não otimizar suas variáveis.
Observe que você ainda precisa do pdb, então você terminará com algo assim: yourDll.dll yourDll.pdb yourDll.ini
Isso funciona especialmente bem em cenários em que você não tem acesso para gerar novamente as DLLs com a opção de depuração.
http://www.hanselman.com/blog/DebugVsReleaseTheBestOfBothWorlds.aspx
fonte
Quando você vir a mensagem " Não é possível avaliar a expressão porque o código do método atual está otimizado " . Depois de emitir uma
Debugger.Break()
instrução, certifique-se de pressionar F10 para avançar para a próxima instrução.Depois de passar para a próxima instrução e assumindo que você esteja executando uma compilação de depuração, essa mensagem deve desaparecer.
fonte
Em relação ao problema com a propriedade "Otimizar código" sendo DESATIVADA, o código ainda está sendo compilado como otimizado: O que finalmente me ajudou depois de tentar tudo foi marcar a caixa de seleção "Ativar depuração de código não gerenciado" na mesma página de configurações (Propriedades do projeto - Depuração). Não está diretamente relacionado à otimização do código, mas com isso ativado, o VS não otimiza mais minha biblioteca e posso depurar.
fonte
Eu tive o mesmo problema ao depurar uma biblioteca de classes de um aplicativo da web testbed. Eu estava fazendo referência à versão de lançamento no banco de testes e isso foi definido para ser otimizado nas propriedades da biblioteca de classes.
Desmarcar a caixa de seleção otimizar código para a versão de lançamento nas propriedades da biblioteca de classes, enquanto estou escrevendo, resolveu o problema.
fonte
Sei que essa é uma resposta posterior, mas encontrei outra referência a uma maneira de resolver esse problema que pode ajudar outras pessoas no futuro. Esta página da web descreve a configuração de uma variável de ambiente (COMPLUS_ZapDisable = 1) que impede a otimização, pelo menos para mim! (Não esqueça a segunda parte de desativar o processo de hospedagem do Visual Studio.) No meu caso, isso pode ter sido ainda mais relevante porque eu estava depurando uma DLL externa através de um servidor de símbolos, mas não tenho certeza.
fonte
Eu tive esse problema com um projeto F # que esteve aqui e ali entre o Visual Studio e o MonoDevelop, talvez originando-se no último (eu esqueço). No VS, a caixa de otimização estava desmarcada, mas a otimização certamente parecia estar ocorrendo no que diz respeito ao depurador.
Depois de comparar o XML do arquivo do projeto com o de um íntegro, o problema era óbvio: o projeto íntegro tinha uma
<optimize>false</optimize>
linha explícita , enquanto o ruim estava completamente ausente. O VS estava obviamente deduzindo de sua ausência que a otimização estava desabilitada, enquanto o compilador estava fazendo o oposto.A solução foi adicionar essa propriedade ao arquivo do projeto e recarregar.
fonte
Comecei a receber esta mensagem quando migrei para o Visual Studio 2017. Nenhuma das idéias nesta página que tentei funcionou para mim. Em outro post, encontrei esta sugestão e funcionou - remova:
... do seu arquivo AssemblyInfo.
fonte
Eu tive o mesmo problema no VS 2010. Limpei e recompilei a solução e ela funcionou.
fonte
O comentário de vickramds acima, referente a http://torulflundgren.blogspot.com.au/2010/03/cannot-obtain-value-of-local-or.html , fez isso por mim. Eu verifiquei tudo - excluí todas as DLLs, arquivos pdb das pastas bin locais, Limpa, Reconstrói, limpa todas as pastas dos Arquivos temporários do ASP.NET, garante que os sinalizadores TRACE / DEBUG sejam definidos, verifica os caminhos da DLL, etc.
Para colocá-lo para que não seja perdido, no (s) projeto (s) afetado (s):
Propriedades do projeto -> Compilar -> Avançado -> Informações sobre depuração: total.
Você deseja verificar se a configuração de Depuração foi selecionada antes de fazer isso, a menos que você pretenda o contrário.
fonte
Se você estiver tentando depurar um projeto do ASP.NET, verifique se o menu suspenso Propriedades> Web> Servidores do projeto está definido como "IIS Express" (além de verificar tudo o mais aqui).
fonte
Eu misturei dlls de extensão c ++ / cli mfc, que foram otimizadas mesmo se a configuração de depuração (vista na janela VS 2017 Modules). Como a resposta anterior sugeriu, mudei "No VS2013, vá para: Ferramentas -> Opções -> Depuração -> Geral e ative 'Usar o modo de compatibilidade gerenciada'. Isso desativa o novo comportamento de avaliação da função." Essas configurações também são encontradas no VS 2017.
Mas isso não foi suficiente, então também copiei a configuração UseDebugLibraries do arquivo de projeto de outro aplicativo MFC para a extensão do arquivo de projeto dll.
Em seguida, reconstrua e resolva o problema.
fonte
No Visual Studio 2012, ativar a opção " Gerenciado " em Ferramentas> Depuração> Just-In-Time funcionou para mim.
fonte