Partilhar via


Objetos de depurador nativos em extensões JavaScript - Considerações de design e teste

Este tópico descreve considerações de design e teste para usar os objetos depuradores nativos em extensões JavaScript.

Os objetos nativos do depurador representam várias construções e comportamentos do ambiente do depurador. Os objetos podem ser passados para (ou adquiridos em) extensões JavaScript para manipular o estado do depurador.

Para obter informações sobre extensões JavaScript de objeto de depurador, consulte Objetos de depurador nativos em extensões JavaScript.

Para obter informações gerais sobre como trabalhar com JavaScript, consulte JavaScript Debugger Scripting.

Considerações sobre o design do modelo de dados do depurador

Princípios de design

Considere os princípios a seguir para fazer com que suas extensões de depurador apresentem informações detetáveis, consultáveis e programáveis.

  • A informação está perto de onde é necessária. Por exemplo, as informações sobre uma chave do Registro devem ser exibidas como parte de uma variável local que contém um identificador de chave do Registro.
  • A informação é estruturada. Por exemplo, as informações sobre uma chave do Registro são apresentadas em campos separados, como tipo de chave, ACL de chave, nome da chave e valor. Isso significa que os campos individuais podem ser acessados sem analisar texto.
  • As informações são consistentes. As informações sobre identificadores de chave do Registro são apresentadas da maneira mais semelhante possível às informações sobre identificadores de arquivo.

Evite estas abordagens que não suportam estes princípios.

  • Não estruture seus itens em uma única "pia de cozinha" plana. Uma hierarquia organizada permite que os usuários naveguem pelas informações que estão procurando sem conhecimento prévio do que estão procurando e oferece suporte à capacidade de descoberta.
  • Não converta uma extensão dbgeng clássica simplesmente movendo-a para o modelo enquanto ainda emite telas de texto bruto. Isso não pode ser combinado com outras extensões e não pode ser consultado com expressões LINQ. Em vez disso, divida os dados em campos separados e consultáveis.

Diretrizes de nomenclatura

  • A capitalização dos campos deve ser PascalCase. Uma exceção pode ser considerada para nomes que são amplamente conhecidos em outra grafia, como jQuery.
  • Evite usar caracteres especiais que normalmente não seriam usados em um identificador C++. Por exemplo, evite usar nomes como "Comprimento total" (que contém um espaço) ou "[tamanho]" (que contém colchetes). Esta convenção permite um consumo mais fácil a partir de linguagens de script onde esses caracteres não são permitidos como parte dos identificadores, e também permite um consumo mais fácil a partir da janela de comando.

Diretrizes de Organização e Hierarquia

  • Não estenda o nível superior do namespace do depurador. Em vez disso, você deve estender um nó existente no depurador para que as informações sejam exibidas onde forem mais relevantes.
  • Não duplique conceitos. Se você estiver criando uma extensão de modelo de dados que lista informações adicionais sobre um conceito que já existe no depurador, estenda as informações existentes em vez de tentar substituí-las por novas informações. Em outras palavras, uma extensão que exibe detalhes sobre um módulo deve estender o objeto Module existente em vez de criar uma nova lista de módulos.
  • Os comandos livremente flutuantes do utilitário devem fazer parte do namespace Debugger.Utility. Eles também devem ser sub-namespaced adequadamente (por exemplo, Debugger.Utility.Collections.FromListEntry)

Compatibilidade com versões anteriores e alterações significativas

Um script publicado não deve quebrar a compatibilidade com outros scripts que dependem dele. Por exemplo, se uma função é publicada no modelo, ela deve permanecer no mesmo local e com os mesmos parâmetros, sempre que possível.

Não utilização de recursos externos

  • As extensões não devem gerar processos externos. Processos externos podem interferir com o comportamento do depurador e se comportarão incorretamente em vários cenários de depurador remoto (por exemplo, controles remotos dbgsrv, controles remotos ntsd e "remotos -d ntsd")
  • As extensões não devem exibir nenhuma interface do usuário. A exibição de elementos da interface do usuário se comportará incorretamente em cenários de depuração remota e pode interromper os cenários de depuração do console.
  • As extensões não devem manipular o mecanismo do depurador ou a interface do usuário do depurador por meio de métodos não documentados. Isso causa problemas de compatibilidade e se comportará incorretamente em depuradores com diferentes interfaces de utilizador.
  • As extensões devem acessar as informações de destino somente por meio das APIs do depurador documentadas. Tentar acessar informações sobre um destino por meio de APIs do win32 falhará em muitos cenários remotos e até mesmo em alguns cenários de depuração local entre limites de segurança.

Sem uso de recursos específicos do dbgeng

Os scripts que se destinam a ser usados como extensões não devem depender de recursos específicos do dbgeng sempre que possível (como a execução de extensões "clássicas" do depurador). Os scripts devem ser utilizáveis sobre qualquer depurador que hospede o modelo de dados.

Testando extensões do depurador

Espera-se que as extensões funcionem em uma ampla gama de cenários. Embora algumas extensões possam ser específicas para um cenário (como um cenário de depuração do kernel), espera-se que a maioria das extensões funcione em todos os cenários ou tenha metadados indicando os cenários suportados.

Modo Kernel

  • Depuração ao vivo do kernel
  • Depuração de despejo do kernel

Modo de Utilizador

  • Depuração do modo de usuário em tempo real
  • Depuração de arquivo de despejo em modo de usuário

Além disso, considere estes cenários de uso do depurador

  • Depuração de vários processos
  • Depuração de várias sessões (por exemplo, dump + utilizador ativo numa única sessão)

Uso do depurador remoto

Teste a operação adequada com os cenários de uso do depurador remoto.

  • Controles remotos DBGSRV
  • Controles remotos NTSD
  • NTSD -d Controles remotos

Para obter mais informações, consulte Depuração usando CDB e NTSD e Ativação de um servidor de processos.

Testes de regressão

Investigue o uso de automação de testes que pode verificar a funcionalidade de suas extensões, conforme novas versões do depurador são lançadas.

Ver também

objetos depuradores nativos em extensões JavaScript

Objetos de depurador nativos em extensões JavaScript - Detalhes do objeto do depurador.

Depuração com Script em JavaScript

Scripts de exemplo do depurador JavaScript