Use o Inspetor de memória para inspecionar a memória ArrayBuffer
, TypedArray
e DataView
em JavaScript, bem como WebAssembly.Memory
de aplicativos Wasm escritos em C++.
Visão geral
O Memory Inspector organiza o conteúdo da memória e ajuda a navegar rapidamente por matrizes grandes. É possível conferir os valores ASCII do conteúdo da memória ao lado dos bytes e selecionar diferentes endianidades. Use o Memory Inspector enquanto depura seu app da Web para ter um fluxo de trabalho eficiente.
Abrir o Memory Inspector
Há algumas maneiras de abrir o Inspetor de memória.
Abrir no 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 Sources e defina um ponto de interrupção na linha 18.
- Atualize a página.
- Expanda a seção Escopo no painel Desenvolvedor de depuração à direita.
É possível abrir o Inspetor de memória:
- Pelo ícone. Clicando no ícone ao lado da propriedade
buffer
ou - No menu de contexto. Clique com o botão direito do mouse na propriedade
buffer
e selecione Revelar no painel do Memory Inspector.
- Pelo ícone. Clicando no ícone ao lado da propriedade
Inspecionar vários objetos
- Você também pode inspecionar DataView ou TypedArray. Por exemplo,
b2
é umTypedArray
. Para inspecionar isso, clique com o botão direito do mouse na propriedadeb2
e selecione Revelar no painel do Memory Inspector (ainda não há ícone paraTypedArray
ouDataView
). - Uma nova guia é aberta no Memory inspector. Você pode inspecionar vários objetos de uma vez.
O Memory Inspector
O Memory Inspector é composto por três áreas principais:
Barra de navegação
- A entrada de endereço mostra o endereço de byte atual no formato hexadecimal. Você pode inserir um novo valor para pular para um novo local no buffer de memória. Por exemplo, digite
0x00000008
. - Os buffers de memória podem ser maiores que uma página. Em vez de rolar, 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 avançar. Caso contrário, o botão Atualizar oferece a opção de atualizar a memória e o conteúdo.
Buffer de memória
- À esquerda, o endereço é mostrado no formato hexadecimal.
- A memória também é mostrada em formato hexadecimal, com cada byte separado por um espaço. O byte selecionado é destacado. Você pode clicar no byte ou navegar com o teclado (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 (esquerda, direita, cima, baixo).
Inspetor de valor
- Uma barra de ferramentas na parte de cima tem um botão para alternar entre endian grande e pequeno e abrir as configurações. Abra as configurações para selecionar quais tipos de valor 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, todos são mostrados.
- A codificação é clicável. É possível alternar entre dec, hex, oct para números inteiros e sci, dec para números de ponto flutuante.
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 o endereço ao lado de
Pointer 32-bit
ePointer 64-bit
. Clique nele para ir até o endereço. Os botões ficam esmaecidos e não podem ser clicados se os endereços não forem válidos. - Clique em Retomar execução de script para percorrer o código.
- A representação ASCII agora está atualizada. Todas as interpretações de valor também são atualizadas.
- Vamos personalizar o Inspetor de valor para mostrar apenas ponto flutuante. Clique no botão settings e marque apenas 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 usando a barra de navegação. Repita a etapa 4 para observar as mudanças nos valores.
Inspeção de memória do WebAssembly
O objeto WebAssembly.Memory
é um ArrayBuffer
que armazena 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. Confira sua versão em
chrome://version/
. - Instale a extensão C/C++ DevTools Support (DWARF). É um plug-in para depurar aplicativos C/C++ da WebAssembly usando informações de depuração DWARF.
Para inspecionar o WebAssembly.Memory
de um objeto:
- Abra o DevTools na página de demonstração.
- No painel Origens, abra
demo-cpp.cc
e defina um ponto de interrupção na funçãomain()
na linha 15:x[i] = n - i - 1;
. - Recarregue a página para executar o aplicativo. O depurador pausa no ponto de interrupção.
- No painel Debugger, expanda Escopo > 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 Revelar no painel do Memory Inspector.
Para parar de destacar a memória do objeto, no painel Memory Inspector, passe o cursor sobre o ícone do objeto e clique no botão x
.
Para saber mais, veja: