Use o Inspetor de memória para inspecionar ArrayBuffer
, TypedArray
e DataView
de memória no JavaScript, bem como WebAssembly.Memory
de aplicativos Wasm escritos em C++.
Visão geral
O Inspetor de memória organiza o conteúdo da memória e ajuda você a navegar por grandes matrizes rapidamente. É possível visualizar os valores ASCII do conteúdo da memória diretamente ao lado dos bytes e selecionar diferentes extremidades. Use o Inspetor de memória enquanto depura seu app da Web para um fluxo de trabalho eficiente.
Abrir o Inspetor de memória
Há algumas maneiras de abrir o Inspetor de memória.
Abrir a partir do menu
- Abra o DevTools.
- Clique em Mais opções > Mais ferramentas > Inspetor de memória.
Abrir durante a depuração
- Abra uma página com JavaScript
ArrayBuffer
. Vamos usar esta página de demonstração. - Abra o DevTools.
- Abra o arquivo demo-js.js no painel Origens e defina um ponto de interrupção na linha 18.
- Atualize a página.
- Expanda a seção Escopo no painel Depurador à direita.
Abra o Inspetor de memória:
- Do ícone. Clique no ícone ao lado da propriedade
buffer
. - No menu de contexto. Clique com o botão direito do mouse na propriedade
buffer
e selecione Reveal in Memory Inspector panel.
- Do ícone. Clique no ícone ao lado da propriedade
Inspecionar vários objetos
- Também é possível inspecionar o DataView ou o TypedArray. Por exemplo,
b2
é umTypedArray
. Para inspecionar isso, clique com o botão direito do mouse na propriedadeb2
e selecione Reveal in Memory Inspector (ainda sem ícone paraTypedArray
ouDataView
). - Uma nova guia será aberta no Inspetor de memória. Observe que é possível inspecionar vários objetos de uma vez.
Inspetor de memória
O Inspetor de memória consiste em três áreas principais:
Barra de navegação
- A entrada de endereço mostra o endereço de byte atual em formato hexadecimal. Você pode inserir um novo valor para ir para um novo local no buffer de memória. Por exemplo, tente o tipo
0x00000008
. - Os buffers de memória podem ser mais longos que uma página. Em vez de rolar a tela, use os botões esquerda e direita para navegar.
- Os botões à esquerda permitem a navegação para frente/para trás.
- Por padrão, o buffer é atualizado automaticamente ao caminhar. Caso não esteja, use o botão refresh para atualizar a memória e o conteúdo.
Buffer de memória
- À esquerda, o endereço é exibido no formato hexadecimal.
- A memória também é mostrada no formato hexadecimal, com cada byte separado por um espaço. O byte selecionado é destacado. Você pode clicar no byte ou navegar com o teclado (para a esquerda, direita, cima, baixo).
- Uma representação ASCII da memória é mostrada no lado direito. Um destaque mostra o valor correspondente aos bits selecionados no byte. Assim como na memória, você pode clicar no byte ou navegar com o teclado (para a esquerda, direita, cima, baixo).
Inspetor de valor
- Uma barra de ferramentas superior tem um botão para alternar entre big e small endian e abrir as configurações. Abra as configurações para selecionar quais tipos de valores eles querem ver por padrão no inspetor.
- A área principal mostra todas as interpretações de valor de acordo com as configurações. Por padrão, todas são mostradas.
- A codificação é clicável. Você pode alternar entre dec, hexadecimal e outubro para número inteiro e sci e dec para flutuações.
Como inspecionar a memória
Vamos inspecionar a memória juntos.
- Siga estas etapas para iniciar a depuração.
- Mude o endereço para
0x00000027
na entrada de endereço. - Observe a representação ASCII e as interpretações de valor. Todos os valores estão vazios no momento.
- Observe o botão azul Ir para endereço ao lado do
Pointer 32-bit
e doPointer 64-bit
. Você pode clicar nele para acessar o endereço. Os botões ficam esmaecidos e não são clicáveis se os endereços não são válidos. - Clique em Retomar execução do script para analisar o código.
- A representação ASCII foi atualizada. Todas as interpretações de valor também são atualizadas.
- Vamos personalizar o Inspetor de valor para mostrar apenas o ponto flutuante. Clique no botão settings e marque somente Float 32-bit e Float 64-bit.
- Vamos mudar a codificação de
dec
parasci
. Observe que as representações de valor são atualizadas de acordo. - Tente navegar pelo buffer de memória com o teclado ou a barra de navegação. Repita a etapa 4 para observar as mudanças de valores.
Inspeção de memória do WebAssembly
O objeto WebAssembly.Memory
é um ArrayBuffer
que contém os bytes brutos da memória do objeto. O painel Memory Inspector permite inspecionar esses objetos em aplicativos Wasm escritos em C++.
Para aproveitar ao máximo a inspeção WebAssembly.Memory
:
- Use o Chrome 107 ou mais recente. Verifique sua versão em
chrome://version/
. - Instale a extensão C/C++ DevTools (DWARF). Este plug-in serve para depurar aplicativos WebAssembly em C/C++ usando informações de depuração DWARF.
Para inspecionar o WebAssembly.Memory
de um objeto:
- Abra o DevTools nesta página de demonstração.
- No painel Sources, abra
demo-cpp.cc
e defina um ponto de interrupção na funçãomain()
na linha 15:x[i] = n - i - 1;
. - Atualize a página para executar o aplicativo. O depurador pausa no ponto de interrupção.
- No painel Debugger, expanda Scope > Local.
Clique no ícone ao lado da matriz
x: int[10]
.Como alternativa, clique com o botão direito do mouse na matriz e selecione Reveal in Memory Inspector panel.
Para parar de destacar a memória do objeto, no painel Memory Inspector, passe o cursor sobre o selo do objeto e clique no botão x
.
Para saber mais, veja: