Como subproduto da otimização de código feita por navegadores modernos, durante a depuração, você não pode "ver" todas as variáveis que "de fato" estão no escopo. Isso é bem conhecido e foi abordado em uma pergunta anterior aqui no SO . Esse recurso, embora certamente útil na produção me chateie bastante durante o desenvolvimento, me deixa mais lento (isso deve ser óbvio).
Agora, minha pergunta é: existe alguma maneira de desativar esse comportamento? Posso editar algum arquivo de configuração, ou existe um plug-in do navegador, ou talvez haja uma "versão de compilação especial para desenvolvedores" do executável do navegador? Adoro digitar meu código no console imediatamente quando estou escrevendo um novo código, então isso está realmente me incomodando.
ATUALIZAÇÃO / EDIÇÃO
Aqui está uma solução parcial, creditada a Paul1365972.
Você precisa iniciar o navegador chrome na linha de comando, com opções especiais, como:
- Feche completamente o Chrome
- Execute o Chrome a partir do console com
"C:/Program Files (x86)/Google/Chrome/Application/chrome.exe" --js-flags="--allow-natives-syntax"
o Windows para outros SOs semelhantes. - Abra o console do desenvolvedor e execute
"%GetHeapUsage()"
. Se você iniciou o Chrome corretamente com a opção, um número será registrado no console; caso contrário, você receberá um erro de sintaxe.
Com esse sinalizador de linha de comando, você pode 'conversar com o mecanismo V8' com comandos iniciados por %
, que são erros de sintaxe no JavaScript comum. Uma lista dos comandos V8 disponíveis desse tipo foi dada na resposta de Paulo .
Existe %NeverOptimizeFunction()
nessa lista, que é algo que parecia com o que eu precisaria chamar e terminar com isso. Infelizmente, essa função não faz o que eu esperava, como demonstrado na próxima captura de tela.
(((O outro link da resposta de Paul (módulo de nó nativo da v8)) não é importante para nós aqui neste contexto. Tudo o que faz é envolver uma linha em torno das chamadas da função "%" para que o código não falhe navegadores que não são v8.)))
(((Lembro-me de uma época em que isso funcionou (quando essa otimização ainda não foi inventada / implementada)). Não sei há quanto tempo. Dez anos? 15 anos? Algo assim. Qual foi a última versão do Chrome (se qualquer) e qual foi a última versão do firefox (mais segura aqui que existe) onde você poderia fazer? Não receberá a recompensa, mas receberá um voto positivo, se você souber e publicá-la como resposta .)))
A SOLUÇÃO
OBRIGADO PETR SRNICEK
NOVA PERGUNTA
Embora a solução de Petr ajude bastante, ela não é perfeita. Como essa pergunta está ficando muito longa, publiquei uma nova pergunta sobre como a solução de Petr pode ser aprimorada. (É claro que eu poderia editar esta pergunta aqui, mas isso pareceria "não histórico", se você entende o que quero dizer.)
v8-natives
biblioteca apenas envolve as chamadas% importantes no código em uma biblioteca simples que devem estar noops
em um navegador ou nó que não foi iniciado na bandeira especial --allow-nativos-sintaxe ..
%NeverOptimizeFunction(foo)
eu também a chamei de bodyOnload, "só porque", pensando "bem, não vai doer". A questão é que foo
NÃO é desoptimizado da maneira que eu esperava. Variável lorem
é invisível. Digamos que eu queira escrever o código que deve entrar na função foo. Em vez de digitá-lo no meu editor de texto, digito-o no console de desenvolvimento (enquanto o depurador está no foo), ver se ele faz o que eu quero e depois copio / colo do console para o meu editor de texto. É assim que eu amo trabalhar. E não pode. Por causa da otimização. Pegue?
--js-flags
(incluindo vários relacionados ao TurboFan ), bem como com vários comandos nativos do V8 antes de Paul1365972 postar sua resposta, mas não consegui atingir o comportamento desejado. Acredito que essa abordagem possa ser um beco sem saída. Pode valer a pena adicionar uma [v8]
tag a esta pergunta. Alguém com um entendimento profundo do funcionamento interno do V8 pode ser capaz de esclarecer se esse é o caminho a seguir ou talvez apontá-lo na direção correta.